os/ossrv/genericopenlibs/openenvcore/include/string.dosc
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /** @file  ../include/string.h
     2 @internalComponent
     3 */
     4 
     5 /** @fn  memccpy(void *t, const void *f, int c, size_t n)
     6 @param t
     7 @param f
     8 @param c
     9 @param n
    10 @return   memccpy function returns a pointer to the next character in t after c, or NULL if c was not found in the first n characters of f.
    11 
    12   The memccpy function
    13 copies bytes from string f to string t. If the character c (as converted to an unsigned char) occurs in the string f, the copy stops and a pointer to the byte after the copy of c in the string t is returned.
    14 Otherwise, n bytes are copied, and a NULL pointer is returned.
    15 
    16 Examples:
    17 @code
    18 #include <string.h>
    19 #include <stdio.h>
    20 int main()
    21 {
    22     char one[50] = {"\0"};
    23     (void) memccpy(one, "abcdefgh",8,3);
    24     printf("String after memcpy %s
    25 ",one);
    26     (void) memccpy(one, "Hello",5,1);
    27     printf("String after memcpy %s
    28 ",one);
    29     return 0;
    30 }
    31 
    32 @endcode
    33  Output
    34 @code
    35 String after memcpy abc
    36 String after memcpy Hbc
    37 
    38 @endcode
    39 @see bcopy()
    40 @see memcpy()
    41 @see memmove()
    42 @see strcpy()
    43 
    44 
    45  
    46 
    47 @publishedAll
    48 @externallyDefinedApi
    49 */
    50 
    51 /** @fn  memchr(const void *s, int c, size_t n)
    52 @param s
    53 @param c
    54 @param n
    55 
    56 @return   The memchr function
    57 returns a pointer to the byte located,
    58 or NULL if no such byte exists within n bytes.
    59 
    60   The memchr function
    61 locates the first occurrence of c (converted to an unsigned char)
    62 in string s.
    63 
    64 Examples:
    65 @code
    66 #include <string.h>
    67 #include <stdio.h>
    68 int main()
    69 {
    70     char one[50];
    71     char* ret;
    72     strcpy(one,"abcd");
    73     ret = memchr("abcd", ’c’,4);
    74     if(!strncmp(one+2,ret,1)) printf("\ ’c\ ’ found in string \"abcd\"\n");
    75     ret = memchr(one, ’z’,4);
    76     if(ret == NULL) printf("\ ’z\ ’ not found in string \"abcd\"\n");           
    77     return 0;
    78 }
    79 
    80 @endcode
    81  Output
    82 @code
    83  ’c’ found in string "abcd"
    84  ’z’ not found in string "abcd"
    85 
    86 @endcode
    87 @see strchr()
    88 @see strcspn()
    89 @see strpbrk()
    90 @see strsep()
    91 @see strstr()
    92 @see strtok()
    93 
    94 
    95  
    96 
    97 @publishedAll
    98 @externallyDefinedApi
    99 */
   100 
   101 /** @fn  memcmp(const void *s1, const void *s2, size_t n)
   102 @param s1
   103 @param s2
   104 @param n
   105 
   106 @return   The memcmp function
   107 returns zero if the two strings are identical,
   108 otherwise returns the difference between the first two differing bytes
   109 (treated as unsigned char values, so that '\\200'
   110 is greater than '\\0'
   111 for example).
   112 Zero-length strings are always identical.
   113 
   114   The memcmp function
   115 compares byte string s1 against byte string s2. Both strings are assumed to be n bytes long.
   116 
   117 Examples:
   118 @code
   119 #include <string.h>
   120 #include <stdio.h>
   121 int main()
   122 {
   123    char str1[]  = "abcdefg";
   124    char str2[] =  "abcdefr";
   125    int result;
   126    printf( "Compare ’%.6s’ to ’%.6s\n", str1, str2 );
   127    result = memcmp( str1, str2, 6);
   128    if( result < 0 )
   129       printf( "str1 is less than str2.\n" );
   130    else if( result == 0 )
   131       printf( "str1 is equal to str2.\n" );
   132    else if( result > 0 )
   133       printf( "str1 is greater than str2.\n" );
   134    printf( "Compare ’%.7s’ to ’%.7s\n", str1, str2 );
   135    result = memcmp( str1, str2, 7 );
   136    if( result < 0 )
   137       printf( "str1 is less than str2.\n" );
   138    else if( result == 0 )
   139       printf( "str1 is equal to str2.\n" );
   140    else if( result > 0 )
   141       printf( "str1 is greater than str2.\n" );
   142    return 0;    
   143 }
   144 
   145 @endcode
   146  Output
   147 @code
   148 Compare ’abcdef’ to ’abcdef
   149 str1 is equal to str2.
   150 Compare ’abcdefg’ to ’abcdefr
   151 str1 is less than str2.
   152 
   153 @endcode
   154 @see bcmp()
   155 @see strcasecmp()
   156 @see strcmp()
   157 @see strcoll()
   158 @see strxfrm()
   159 
   160 
   161  
   162 
   163 @publishedAll
   164 @externallyDefinedApi
   165 */
   166 
   167 /** @fn  memcpy(void *dst, const void *src, size_t len)
   168 @param dst
   169 @param src
   170 @param len
   171 @return   The memcpy function
   172 returns the original value of dst.
   173 
   174   The memcpy function
   175 copies len bytes from string src to string dst.
   176 
   177 Examples:
   178 @code
   179 #include <string.h>
   180 #include <stdio.h>
   181 int main()
   182 {
   183     char one[50] = {"\0"};
   184     (void) memcpy(one, "abcdefgh",8);
   185     printf("String after memcpy %s
   186 ",one);
   187     (void) memcpy(one, "Hello",5);
   188     printf("String after memcpy %s
   189 ",one);
   190     return 0;   
   191 }
   192 
   193 @endcode
   194  Output
   195 @code
   196 String after memcpy abcdefgh
   197 String after memcpy Hellofgh
   198 
   199 @endcode
   200 @see bcopy()
   201 @see memccpy()
   202 @see memmove()
   203 @see strcpy()
   204 
   205 
   206  
   207 
   208 @publishedAll
   209 @externallyDefinedApi
   210 */
   211 
   212 /** @fn  memmove(void *dst, const void *src, size_t len)
   213 @param dst
   214 @param src
   215 @param len
   216 
   217   The memmove function copies len bytes from string src to string dst. The two strings may overlap. The copy is always done in a non-destructive 
   218 manner.
   219 
   220 Examples:
   221 @code
   222 #include <string.h>
   223 #include <stdio.h>
   224 int main()
   225 {
   226     char one[50];
   227     (void) strcpy(one, "abcdefgh");
   228     printf("String before memmove %s
   229 ",one);
   230     (void) memmove(one+1, "xyz", 2);
   231     printf("String after memmove %s
   232 ",one);
   233     (void) strcpy(one, "abcdefgh");
   234     printf("String before memmove %s
   235 ",one);
   236     (void) memmove(one+1, "xyz", 0);
   237     printf("String after memmove %s
   238 ",one);
   239     return 0;   
   240 }
   241 
   242 @endcode
   243  Output
   244 @code
   245 String before memmove abcdefgh
   246 String after memmove axydefgh
   247 String before memmove abcdefgh
   248 String after memmove abcdefgh
   249 
   250 @endcode
   251 @return   The memmove function returns pointer to dst dst.
   252 
   253 @see bcopy()
   254 @see memcpy()
   255 @see strcpy()
   256 
   257 
   258  
   259 
   260 @publishedAll
   261 @externallyDefinedApi
   262 */
   263 
   264 /** @fn  memset(void *dst0, int c0, size_t length)
   265 @param dst0
   266 @param c0
   267 @param length
   268 
   269   The memset function
   270 writes length bytes of value c0 (converted to an unsigned char) to the string dst0.
   271 
   272 Examples:
   273 @code
   274 #include <string.h>
   275 #include <stdio.h>
   276 int main()
   277 {
   278     char one[50];       
   279     strcpy(one, "abcdefgh");
   280     printf("String before memset %s
   281 ",one);
   282     memset(one+1, 'x', 3);
   283     printf("String after calling memset first time %s
   284 ",one);          
   285     memset(one+2, 'y', 0);
   286     printf("String after calling memset second time %s
   287 ",one);
   288     return 0;   
   289 }
   290 
   291 @endcode
   292  Output
   293 @code
   294 String before memset abcdefgh
   295 String after calling memset first time axxxefgh
   296 String after calling memset second time axxxefgh
   297 
   298 @endcode
   299 @return   The memset function returns its first argument.
   300 
   301 @see bzero()
   302 @see swab()
   303 
   304 
   305  
   306 
   307 @publishedAll
   308 @externallyDefinedApi
   309 */
   310 
   311 /** @fn  stpcpy(char *to, const char *from)
   312 @param to
   313 @param from
   314 
   315 Note: This description also covers the following functions -
   316  strcpy()  strncpy() 
   317 
   318 @return   The strcpy and strncpy functions
   319 return to. The stpcpy function returns a pointer to the terminating ‘\\0’
   320 character of to.
   321 
   322   The stpcpy and strcpy functions
   323 copy the string from to to (including the terminating ‘\\0’
   324 character.)
   325 
   326  The strncpy function copies at most len characters from from into to. If from is less than len characters long,
   327 the remainder of to is filled with '\\0'
   328 characters.
   329 Otherwise, to is not terminated.
   330 
   331 Examples:
   332 @code
   333 #include <string.h>
   334 #include <stdio.h>
   335 int main()
   336 {
   337     char one[50] = {"abcdefgh"};        
   338     printf("String before strcpy %s
   339 ",one);
   340     strcpy(one,"Hello");
   341     printf("String after strcpy %s
   342 ",one);
   343     strncpy(one + 5, " ",1);
   344     strncpy(one + 6, "World",5);
   345     printf("String after strncpy %s
   346 ",one);
   347     return 0;   
   348 }
   349 
   350 @endcode
   351  Output
   352 @code
   353 String before strcpy abcdefgh
   354 String after strcpy Hello
   355 String after strncpy Hello World
   356 
   357 @endcode
   358 Examples:
   359  The following sets chararray to "abc\\0\\0\\0"
   360 @code
   361 char chararray[6];
   362 (void)strncpy(chararray, "abc", sizeof(chararray));
   363 
   364 @endcode
   365  The following sets chararray to "abcdef:"
   366 @code
   367 char chararray[6];
   368 (void)strncpy(chararray, "abcdefgh", sizeof(chararray));
   369 
   370 @endcode
   371  Note that it does not NULL terminate chararray because the length of the source string is greater than or equal
   372 to the length argument. The following copies as many characters from input to buf as will fit and NULL terminates the result.
   373 Because strncpy does not guarantee to NULL terminate the string itself, this must be done explicitly.
   374 @code
   375 char buf[1024];
   376 (void)strncpy(buf, input, sizeof(buf) - 1);
   377 buf[sizeof(buf) - 1] = ’\0’;
   378 
   379 @endcode
   380 
   381 Security considerations:
   382 
   383  The strcpy function is easily misused in a manner which enables malicious users
   384 to arbitrarily change a running program's functionality through a
   385 buffer overflow attack.
   386 @see bcopy()
   387 @see memcpy()
   388 @see memmove()
   389 
   390 
   391  
   392 
   393 @publishedAll
   394 @externallyDefinedApi
   395 */
   396 
   397 /** @fn  strcasestr(const char *s, const char *find)
   398 @param s
   399 @param find
   400 
   401 Refer to  strstr() for the documentation
   402 @see memchr()
   403 @see strchr()
   404 @see strcspn()
   405 @see strpbrk()
   406 @see strrchr()
   407 @see strsep()
   408 @see strspn()
   409 @see strtok()
   410 
   411 
   412  
   413 
   414 @publishedAll
   415 @externallyDefinedApi
   416 */
   417 
   418 /** @fn  strcat(char *  s, const char *  append)
   419 @param s
   420 @param append
   421 
   422 Note: This description also covers the following functions -
   423  strncat() 
   424 
   425 @return   The strcat and strncat functions
   426 return the pointer s.
   427 
   428   The strcat and strncat functions
   429 append a copy of the null-terminated string append to the end of the null-terminated string s, then add a terminating ‘\\0’
   430 The string s must have sufficient space to hold the result.
   431 
   432  The strncat function
   433 appends not more than count characters from append, and then adds a terminating ‘\\0’
   434 
   435 Examples:
   436 @code
   437 #include <string.h>
   438 #include <stdio.h>
   439 int main()
   440 {
   441     char one[50] = {"\0"};              
   442     strcpy(one,"Hello");
   443     strcat(one," World");
   444     printf("Concatenated String %s
   445 ",one);
   446     return 0;   
   447 }
   448 
   449 @endcode
   450  Output
   451 @code
   452 Concatenated String Hello World
   453 
   454 @endcode
   455 
   456 Security considerations:
   457 
   458  The strcat function is easily misused in a manner
   459 which enables malicious users to arbitrarily change
   460 a running program's functionality through a buffer overflow attack. Avoid using strcat. Instead, use strncat or strlcat and ensure that no more characters are copied to the destination buffer
   461 than it can hold. Note that strncat can also be problematic.
   462 It may be a security concern for a string to be truncated at all.
   463 Since the truncated string will not be as long as the original,
   464 it may refer to a completely different resource
   465 and usage of the truncated resource
   466 could result in very incorrect behavior.
   467 Example:
   468 
   469 @see bcopy()
   470 @see memcpy()
   471 @see memmove()
   472 @see strcpy()
   473 
   474 
   475  
   476 
   477 @publishedAll
   478 @externallyDefinedApi
   479 */
   480 
   481 /** @fn  strchr(const char *s, int c)
   482 @param s
   483 @param c
   484 
   485 Note: This description also covers the following functions -
   486  strrchr() 
   487 
   488 @return   The functions strchr and strrchr return a pointer to the located character, or NULL if the character does not appear in the string.
   489 
   490   The strchr function locates the first occurrence of c (converted to a char)
   491 in the string pointed to by s. The terminating null character is considered part of the string;
   492 therefore if c is ‘\\0’
   493 the functions locate the terminating ‘\\0’
   494 
   495  The strrchr function is identical to strchr except it locates the last occurrence of c.
   496 
   497 Examples:
   498 @code
   499 #include <string.h>
   500 #include <stdio.h>
   501 int main()
   502 {
   503         char one[50];
   504         char* ret;
   505         strcpy(one,"abcd");
   506         ret = strchr("abcd", 'c');
   507         if(!strncmp(one+2,ret,1)) printf("\ 'c\ ' found in string \"abcd\"
   508 ");
   509         ret = strchr(one, 'z');
   510         if(ret == NULL) printf("\ 'z\ ' not found in string \"abcd\"
   511 ");               
   512         return 0;
   513 }
   514 
   515 @endcode
   516  Output
   517 @code
   518  ’c’ found in string "abcd"
   519  ’z’ not found in string "abcd"
   520 
   521 @endcode
   522 @see memchr()
   523 @see strcspn()
   524 @see strpbrk()
   525 @see strsep()
   526 @see strspn()
   527 @see strstr()
   528 @see strtok()
   529 
   530 
   531  
   532 
   533 @publishedAll
   534 @externallyDefinedApi
   535 */
   536 
   537 /** @fn  strcmp(const char *s1, const char *s2)
   538 @param s1
   539 @param s2
   540 
   541 Note: This description also covers the following functions -
   542  strncmp() 
   543 
   544 @return   The strcmp and strncmp return an integer greater than, equal to, or less than 0, according 
   545 to whether the string s1 is greater than, equal to, or less than the string s2.
   546 
   547   The strcmp and strncmp functions
   548 lexicographically compare the null-terminated strings s1 and s2.
   549 
   550  The strncmp function
   551 compares not more than len characters.
   552 Because strncmp is designed for comparing strings rather than binary data,
   553 characters that appear after a ‘\\0’
   554 character are not compared.
   555 
   556 Examples:
   557 @code
   558 #include <string.h>
   559 #include <stdio.h>
   560 int main()
   561 {
   562    char str1[]  = "abcdefg";
   563    char str2[] =  "abcdefr";
   564    int result;
   565    printf( "Compare '%s' to '%s
   566 ", str1, str2 );
   567    result = strcmp( str1, str2);
   568    if( result < 0 )
   569       printf( "str1 is less than str2.
   570 " );
   571    else if( result == 0 )
   572       printf( "str1 is equal to str2.
   573 " );
   574    else if( result > 0 )
   575       printf( "str1 is greater than str2.
   576 " );
   577    printf( "Compare '%.6s' to '%.6s
   578 ", str1, str2 );
   579    result = strncmp( str1, str2, 6 );
   580    if( result < 0 )
   581       printf( "str1 is less than str2.
   582 " );
   583    else if( result == 0 )
   584       printf( "str1 is equal to str2.
   585 " );
   586    else if( result > 0 )
   587       printf( "str1 is greater than str2.
   588 " );
   589    return 0;    
   590 }
   591 
   592 @endcode
   593  Output
   594 @code
   595 Compare ’abcdefg’ to ’abcdefr
   596 str1 is less than str2.
   597 Compare ’abased’ to ’abcdef
   598 str1 is equal to str2.
   599 
   600 @endcode
   601 @see bcmp()
   602 @see memcmp()
   603 @see strcasecmp()
   604 @see strcoll()
   605 @see strxfrm()
   606 
   607 
   608  
   609 
   610 @publishedAll
   611 @externallyDefinedApi
   612 */
   613 
   614 /** @fn  strcoll(const char *s1, const char *s2)
   615 @param s1   
   616 @param s2      
   617 
   618   This function lexicographically compares the null-terminated strings s1 and s2 according to the current locale collation, if locale is set. 
   619   Calls strcmp and returns an integer greater than, equal to, or less than 0, to whether s1 is greater than, equal to, or less than s2 if C locale is set.
   620   Otherwise it will compare the strings according to the smartphone's locale collation.
   621 
   622 Examples:
   623 @code
   624 #include <string.h>
   625 #include <stdio.h>
   626 #include <locale.h>
   627 int main()
   628 {
   629     int res;
   630     setlocale(LC_ALL,"ar_AE.ISO-8859-6");
   631     if(strcoll("abcde","abcde")==0)
   632        printf("Strings are same
   633 ");
   634     return 0;
   635 }
   636 
   637 @endcode
   638  Output
   639 @code
   640 Strings are same
   641 
   642 @endcode
   643 @return   This  function  returns  an  integer  less than, equal to, or
   644 greater than zero if s1 is found, respectively, to  be  less  than,  to
   645 match,  or be greater than s2, when both are interpreted as appropriate
   646 for the current locale.
   647 
   648 @see setlocale()
   649 @see strcmp()
   650 @see strxfrm()
   651 @see wcscoll()
   652 
   653 
   654  
   655 
   656 @publishedAll
   657 @externallyDefinedApi
   658 */
   659 
   660 /** @fn  strcpy(char *  from, const char *  to)
   661 @param from
   662 @param to
   663 
   664 Refer to  stpcpy() for the documentation
   665 @see bcopy()
   666 @see memcpy()
   667 @see memmove()
   668 
   669 
   670  
   671 
   672 @publishedAll
   673 @externallyDefinedApi
   674 */
   675 
   676 /** @fn  strcspn(const char *s, const char *charset)
   677 @param s
   678 @param charset
   679 @return   The strcspn function
   680 returns the number of characters spanned.
   681 
   682   The strcspn function
   683 spans the initial part of the null-terminated string s as long as the characters from s do not occur in string charset (it
   684 spans the complement of charset). In other words, it computes the string array index in s of the first character of s which is also in charset, else the index of the first null character.
   685 
   686 Examples:
   687 @code
   688 #include <string.h>
   689 #include <stdio.h>
   690 int main()
   691 {
   692     printf("Number of characters present in s
   693  which are not in charset is %d",strcspn("abcde","df"));
   694     return 0;
   695 }
   696 
   697 @endcode
   698  Output
   699 @code
   700 Number of characters present in s
   701  which are not in charset is 3
   702 
   703 @endcode
   704 @see memchr()
   705 @see strchr()
   706 @see strpbrk()
   707 @see strrchr()
   708 @see strsep()
   709 @see strspn()
   710 @see strstr()
   711 @see strtok()
   712 
   713 
   714  
   715 
   716 @publishedAll
   717 @externallyDefinedApi
   718 */
   719 
   720 /** @fn  strdup(const char *str)
   721 @param str
   722 
   723   The strdup function
   724 allocates sufficient memory for a copy
   725 of the string str ,
   726 does the copy, and returns a pointer to it.
   727 The pointer may subsequently be used as an
   728 argument to the function free .
   729 
   730  If insufficient memory is available, NULL is returned and errno is set to ENOMEM .
   731 
   732 Examples:
   733 @code
   734 #include <string.h>
   735 #include <stdio.h>
   736 int main()
   737 {
   738     char* ptr;
   739     ptr = (char *)strdup("abcde");
   740     printf("Duplicated string %s
   741 ",ptr);
   742     ptr = (char *)strdup("Hello Hi");
   743     printf("Duplicated string %s
   744 ",ptr);
   745     return 0;   
   746 }
   747 
   748 @endcode
   749  Output
   750 @code
   751 Duplicated string abcde
   752 Duplicated string Hello Hi
   753 
   754 @endcode
   755 @return   The  strdup()  function  returns a pointer to the duplicated string, or
   756 NULL if insufficient memory was available.
   757 
   758 @see free()
   759 @see malloc()
   760 
   761 
   762  
   763 
   764 @publishedAll
   765 @externallyDefinedApi
   766 */
   767 
   768 /** @fn  strndup(const char *old, size_t sz)
   769 @param old
   770 @param sz
   771 
   772   The strndup function
   773 allocates sufficient memory for a copy
   774 of the string old ,
   775 does the copy of at most sz characters, and returns a pointer to it.
   776 If old is longer than sz, only sz characters are copied and a terminating NULL is added.
   777 The pointer may subsequently be used as an
   778 argument to the function free .
   779 
   780  If insufficient memory is available, NULL is returned and errno is set to ENOMEM .
   781 
   782 Examples:
   783 @code
   784 #include <string.h>
   785 #include <stdio.h>
   786 #include <stdlib.h>
   787 int main()
   788 {
   789     char* ptr;
   790     ptr = (char *)strndup("abcde",3);
   791     printf("Duplicated string %s
   792 ",ptr);
   793     ptr = (char *)strndup("Hello Hi",5);
   794     printf("Duplicated string %s
   795 ",ptr);
   796     free(ptr);
   797     return 0;   
   798 }
   799 
   800 @endcode
   801  Output
   802 @code
   803 Duplicated string abc
   804 Duplicated string Hello
   805 
   806 @endcode
   807 @return   The  strdup()  function  returns a pointer to the duplicated string, or
   808 NULL if insufficient memory was available.
   809 
   810 @see free()
   811 @see malloc()
   812 
   813 
   814  
   815 
   816 @publishedAll
   817 @externallyDefinedApi
   818 */
   819 
   820 /** @fn strnlen(const char *s, size_t len)
   821 @param s
   822 @param len
   823 
   824 @return The  strnlen function returns strlen(s), if that is less than len, or len if there is no "\\0" character among the first len characters pointed to by s.
   825 
   826 Examples:
   827 @code
   828 #include <string.h>
   829 #include <stdio.h>
   830 int main()
   831 {
   832     char one[50];
   833     int ret;
   834     strcpy(one,"abcdef");
   835     ret = strnlen(one,5);
   836     printf("Length obtained using strnlen = %d\n",ret);
   837     ret = strnlen(one,10);
   838     printf("Length obtained using strnlen = %d\n",ret);
   839 }
   840 
   841 @endcode
   842  Output
   843 @code
   844 Length obtained using strnlen = 5
   845 Length obtained using strnlen = 6
   846 
   847 @endcode
   848 Feedback For additional information or queries on this page send feedback
   849  
   850 
   851 @publishedAll
   852 @externallyDefinedApi
   853 */
   854 
   855 
   856 /** @fn  strerror(int num)
   857 @param num
   858 
   859 Refer to  perror() for the documentation
   860 @see intro()
   861 
   862 
   863  
   864 
   865 @publishedAll
   866 @externallyDefinedApi
   867 */
   868 
   869 /** @fn  strerror_r(int errnum, char *strerrbuf, size_t buflen)
   870 @param errnum
   871 @param strerrbuf
   872 @param buflen
   873 
   874 Refer to  perror() for the documentation
   875 @see intro()
   876 
   877 
   878  
   879 
   880 @publishedAll
   881 @externallyDefinedApi
   882 */
   883 
   884 /** @fn  strlcat(char *dst, const char *src, size_t size)
   885 @param dst
   886 @param src
   887 @param size
   888 
   889 Refer to  strlcpy() for the documentation
   890 @see snprintf()
   891 @see strncat()
   892 @see strncpy()
   893 
   894 
   895  
   896 
   897 @publishedAll
   898 @externallyDefinedApi
   899 */
   900 
   901 /** @fn  strlcpy(char *dst, const char *src, size_t size)
   902 @param dst
   903 @param src
   904 @param size
   905 
   906 Note: This description also covers the following functions -
   907  strlcat() 
   908 
   909 @return   The strlcpy and strlcat functions return the total length of the string they tried to
   910 create.
   911 For strlcpy that means the length of src .
   912 For strlcat that means the initial length of dst plus
   913 the length of src .
   914 While this may seem somewhat confusing it was done to make
   915 truncation detection simple. Note however, that if strlcat traverses size characters without finding a NULL, the length of the string is 
   916   considered to be size and the destination string will not be NULL-terminated (since there 
   917   was no space for the NULL). This prevents strlcat from running off the end of a string. In practice this should 
   918   not happen (as it means that either size is incorrect or that dst is not a proper "C" string). The check exists to prevent potential security problems in incorrect 
   919   code.
   920 
   921   The strlcpy and strlcat functions copy and concatenate strings respectively. They are 
   922 designed to be safer, more consistent, and less error prone replacements for strncpy and strncat. Unlike those functions, strlcpy and strlcat take the full size of the buffer (not just the length) and guarantee 
   923 to NULL-terminate the result (as long as size is larger than 0 or, in the case of strlcat , as long as there is at least one byte free in dst ). Note that you should include a byte for the NULL in size . Also note that strlcpy and strlcat only operate on true "C" strings. This means that for strlcpy src must be NUL-terminated and for strlcat both src and dst must be NULL-terminated.
   924 
   925  The strlcpy function copies up to size - 1 characters from the NULL-terminated string src to dst , NULL-terminating the result.
   926 
   927  The strlcat function appends the NULL-terminated string src to the end of dst . It will append at most size - strlen(dst) - 1 bytes, NULL-terminating the result.
   928 
   929 
   930 
   931 Examples:
   932  The following code fragment illustrates the simple case:
   933 @code
   934 char *s, *p, buf[BUFSIZ];
   935 ...
   936 (void)strlcpy(buf, s, sizeof(buf));
   937 (void)strlcat(buf, p, sizeof(buf));
   938 
   939 @endcode
   940  To detect truncation, perhaps while building a pathname, something
   941 like the following might be used:
   942 @code
   943 char *dir, *file, pname[MAXPATHLEN];
   944 ...
   945 if (strlcpy(pname, dir, sizeof(pname)) >= sizeof(pname))
   946         goto toolong;
   947 if (strlcat(pname, file, sizeof(pname)) >= sizeof(pname))
   948         goto toolong;
   949 
   950 @endcode
   951  Since we know how many characters we copied the first time, we can
   952 speed things up a bit by using a copy instead of an append:
   953 @code
   954 char *dir, *file, pname[MAXPATHLEN];
   955 size_t n;
   956 ...
   957 n = strlcpy(pname, dir, sizeof(pname));
   958 if (n >= sizeof(pname))
   959         goto toolong;
   960 if (strlcpy(pname + n, file, sizeof(pname) - n) >= sizeof(pname) - n)
   961         goto toolong;
   962 
   963 @endcode
   964  However, one may question the validity of such optimizations, as they
   965 defeat the whole purpose of strlcpy and strlcat .
   966 As a matter of fact, the first version of this manual page got it wrong.
   967 Examples:
   968 @code
   969 #include <string.h>
   970 #include <stdio.h>
   971 int main()
   972 {
   973     char one[50] = {"abcdefgh"};
   974     printf("String before strcpy %s
   975 ",one);
   976     strlcpy(one,"Hello");
   977     printf("String after strcpy %s
   978 ",one);
   979     strlcpy(one + 5, " ",1);
   980     strlcpy(one + 6, "World",5);
   981     printf("String after strncpy %s
   982 ",one);
   983     return 0;
   984 }
   985 
   986 @endcode
   987 @see snprintf()
   988 @see strncat()
   989 @see strncpy()
   990 
   991 
   992  
   993 
   994 @publishedAll
   995 @externallyDefinedApi
   996 */
   997 
   998 /** @fn  strlen(const char *str)
   999 @param str
  1000 @return  The strlen() function shall return the length of s; no return value shall be reserved to indicate an error.
  1001 
  1002 The strlen() function shall compute the number of bytes in the string to which s points,
  1003  not including the terminating null byte.
  1004 
  1005 Examples:
  1006 @code
  1007 #include <string.h>
  1008 #include <stdio.h>
  1009 int main()
  1010 {
  1011     char one[50];
  1012     int ret;
  1013     strcpy(one,"abcdef");
  1014     ret = strnlen(one,5);
  1015     printf("Length obtained using strnlen = %d
  1016 ",ret);
  1017     ret = strnlen(one,10);
  1018     printf("Length obtained using strnlen = %d
  1019 ",ret);
  1020 }
  1021 
  1022 @endcode
  1023  Output
  1024 @code
  1025 Length obtained using strnlen = 5
  1026 Length obtained using strnlen = 6
  1027 @endcode
  1028 
  1029  
  1030 
  1031 @publishedAll
  1032 @externallyDefinedApi
  1033 */
  1034 
  1035 /** @fn  strncat(char * dst, const char * src, size_t n)
  1036 @param dst
  1037 @param src
  1038 @param n
  1039 
  1040 Refer to  strcat() for the documentation
  1041 @see bcopy()
  1042 @see memcpy()
  1043 @see memmove()
  1044 @see strcpy()
  1045 
  1046 
  1047  
  1048 
  1049 @publishedAll
  1050 @externallyDefinedApi
  1051 */
  1052 
  1053 /** @fn  strncmp(const char *s1, const char *s2, size_t n)
  1054 @param s1
  1055 @param s2
  1056 @param n
  1057 
  1058 Refer to  strcmp() for the documentation
  1059 @see bcmp()
  1060 @see memcmp()
  1061 @see strcasecmp()
  1062 @see strcoll()
  1063 @see strxfrm()
  1064 
  1065 
  1066  
  1067 
  1068 @publishedAll
  1069 @externallyDefinedApi
  1070 */
  1071 
  1072 /** @fn  strncpy(char *  dst, const char *  src, size_t n)
  1073 @param dst
  1074 @param src
  1075 @param n
  1076 
  1077 Refer to  stpcpy() for the documentation
  1078 @see bcopy()
  1079 @see memcpy()
  1080 @see memmove()
  1081 
  1082 
  1083  
  1084 
  1085 @publishedAll
  1086 @externallyDefinedApi
  1087 */
  1088 
  1089 /** @fn  strnstr(const char *s, const char *find, size_t slen)
  1090 @param s
  1091 @param find
  1092 @param slen
  1093 
  1094 Refer to  strstr() for the documentation
  1095 @see memchr()
  1096 @see strchr()
  1097 @see strcspn()
  1098 @see strpbrk()
  1099 @see strrchr()
  1100 @see strsep()
  1101 @see strspn()
  1102 @see strtok()
  1103 
  1104 
  1105  
  1106 
  1107 @publishedAll
  1108 @externallyDefinedApi
  1109 */
  1110 
  1111 /** @fn  strpbrk(const char *s1, const char *s2)
  1112 @param s1
  1113 @param s2
  1114 
  1115   The strpbrk function
  1116 locates in the null-terminated string s1 the first occurrence of any character in the string s2 and returns a pointer to this character.
  1117 If no characters from s2 occur anywhere in s1 strpbrk returns NULL.
  1118 
  1119 Examples:
  1120 @code
  1121 #include <string.h>
  1122 #include <stdio.h>
  1123 int main()
  1124 {
  1125     char one[50];
  1126     char *res;
  1127     strcpy(one,"acdb");
  1128     res = strpbrk(one, "bc");
  1129     if(res != NULL)
  1130        printf("%s
  1131 ",res);
  1132     return 0;
  1133 }
  1134 
  1135 @endcode
  1136  Output
  1137 @code
  1138 cdb
  1139 
  1140 @endcode
  1141 @return   The strpbrk() function returns a pointer to the  character  in  s1  that
  1142 matches  one  of the characters in accept, or NULL if no such character
  1143 is found.
  1144 
  1145 @see memchr()
  1146 @see strchr()
  1147 @see strcspn()
  1148 @see strsep()
  1149 @see strspn()
  1150 @see strstr()
  1151 @see strtok()
  1152 
  1153 
  1154  
  1155 
  1156 @publishedAll
  1157 @externallyDefinedApi
  1158 */
  1159 
  1160 /** @fn  strrchr(const char *s, int c)
  1161 @param s
  1162 @param c
  1163 
  1164 Refer to  strchr() for the documentation
  1165 @see memchr()
  1166 @see strcspn()
  1167 @see strpbrk()
  1168 @see strsep()
  1169 @see strspn()
  1170 @see strstr()
  1171 @see strtok()
  1172 
  1173 
  1174  
  1175 
  1176 @publishedAll
  1177 @externallyDefinedApi
  1178 */
  1179 
  1180 /** @fn  strsep(char **stringp, const char *delim)
  1181 @param stringp
  1182 @param delim
  1183 @return   strsep function returns a pointer to the token, i.e it returns the original value of *stringp
  1184 
  1185   The strsep function locates, in the string referenced by *stringp ,
  1186 the first occurrence of any character in the string delim (or the terminating ‘\\0’
  1187 character) and replaces it with a ‘\\0’.
  1188 The location of the next character after the delimiter character
  1189 (or NULL, if the end of the string was reached) is stored in *stringp .
  1190 The original value of *stringp is returned.
  1191 
  1192  An "empty"
  1193 field (i.e., a character in the string delim occurs as the first character of *stringp )
  1194 can be detected by comparing the location referenced by the returned pointer
  1195 to ‘\\0’.
  1196 
  1197  If *stringp is initially NULL , strsep returns NULL .
  1198 
  1199 Examples:
  1200 @code
  1201 #include <string.h>
  1202 #include <stdio.h>
  1203 int main()
  1204 {
  1205     char *one=(char *)malloc(12);
  1206     char *res;
  1207     char **two=&one;
  1208     strcpy(one,"Hello,World");
  1209     res=strsep(two,",");
  1210     if(strcmp(res,"hello"))
  1211     printf("%s
  1212 ",res);      
  1213     return 0;
  1214 }
  1215 
  1216 @endcode
  1217  Output
  1218 @code
  1219 Hello
  1220 
  1221 @endcode
  1222 @see memchr()
  1223 @see strchr()
  1224 @see strcspn()
  1225 @see strpbrk()
  1226 @see strspn()
  1227 @see strstr()
  1228 @see strtok()
  1229 
  1230 
  1231  
  1232 
  1233 @publishedAll
  1234 @externallyDefinedApi
  1235 */
  1236 
  1237 /** @fn  strspn(const char *s, const char *charset)
  1238 @param s
  1239 @param charset
  1240 @return   strspn function returns the number of characters in the initial segment of s which consists only of characters from accept
  1241 
  1242   The strspn function
  1243 spans the initial part of the null-terminated string s as long as the characters from s occur in the null-terminated string charset .
  1244 In other words, it computes the string array index in s of the first character of s which is not in charset ,
  1245 else the index of the first null character.
  1246 
  1247 Examples:
  1248 @code
  1249 #include <string.h>
  1250 #include <stdio.h>
  1251 int main()
  1252 {
  1253     char one[50];
  1254     int res;
  1255     strcpy(one,"abcba");
  1256     res = strspn(one, "abc");
  1257     printf(" %d times characters found in the string 
  1258 ",res);
  1259     return 0;
  1260 }
  1261 
  1262 @endcode
  1263  Output
  1264 @code
  1265 5 times characters found in the string
  1266 
  1267 @endcode
  1268 @return   The strspn function
  1269 returns the number of characters spanned.
  1270 
  1271 @see memchr()
  1272 @see strchr()
  1273 @see strpbrk()
  1274 @see strsep()
  1275 @see strstr()
  1276 @see strtok()
  1277 
  1278 
  1279  
  1280 
  1281 @publishedAll
  1282 @externallyDefinedApi
  1283 */
  1284 
  1285 /** @fn  strstr(const char *s, const char *find)
  1286 @param s
  1287 @param find
  1288 
  1289 Note: This description also covers the following functions -
  1290  strcasestr()  strnstr() 
  1291 
  1292 @return   The strstr function returns a pointer to the beginning of the substring, or NULL if the substring is not found.If find is an empty string, s is returned;
  1293 if find occurs nowhere in s , NULL is returned;
  1294 otherwise a pointer to the first character of the first occurrence of find is returned.
  1295 
  1296 
  1297   The strstr function
  1298 locates the first occurrence of the null-terminated string find in the null-terminated string s .
  1299 
  1300  The strcasestr function is similar to strstr ,
  1301 but ignores the case of both strings.
  1302 
  1303  The strnstr function
  1304 locates the first occurrence of the null-terminated string find in the string s ,
  1305 where not more than slen characters are searched.
  1306 Characters that appear after a ‘\\0’
  1307 character are not searched.
  1308 Since the strnstr function is a specific API, it should only be used when portability is not a concern.
  1309 
  1310 Examples:
  1311 @code
  1312 #include <string.h>
  1313 #include <stdio.h>
  1314 int main()
  1315 {
  1316     char *ptr;
  1317     ptr = strstr("abcd", "z");
  1318     if(ptr == NULL)
  1319        printf("strstr: \"z\" not found in \"abcd\"
  1320 ");
  1321     else
  1322        printf("strstr: \"z\" found in \"abcd\"
  1323 ");
  1324     ptr = strstr("abcd", "ab");
  1325     if(ptr == NULL)
  1326        printf("strstr: \"ab\" not found in \"abcd\"
  1327 ");
  1328     else
  1329        printf("strstr: \"ab\" found in \"abcd\"
  1330 ");
  1331     ptr = strstr("abcd", "abcde");
  1332     if(ptr == NULL)
  1333        printf("strstr: \"abcde\" found in \"abcd\"
  1334 ");
  1335     else
  1336        printf("strstr: \"abbcde\" not found in \"abcd\"
  1337 ");
  1338     return 0;
  1339 }
  1340 
  1341 @endcode
  1342  Output
  1343 @code
  1344 strstr: "z" not found in "abcd"
  1345 strstr: "ab" found in "abcd"
  1346 strstr: "abcde" found in "abcd"
  1347 
  1348 @endcode
  1349 Examples:
  1350  The following sets the pointer ptr to the "Bar Baz"
  1351 portion of largestring :
  1352 @code
  1353 const char *largestring = "Foo Bar Baz";
  1354 const char *smallstring = "Bar";
  1355 char *ptr;
  1356 ptr = strstr(largestring, smallstring);
  1357 
  1358 @endcode
  1359  The following sets the pointer ptr to NULL ,
  1360 because only the first 4 characters of largestring are searched:
  1361 @code
  1362 const char *largestring = "Foo Bar Baz";
  1363 const char *smallstring = "Bar";
  1364 char *ptr;
  1365 ptr = strnstr(largestring, smallstring, 4);
  1366 
  1367 @endcode
  1368 @see memchr()
  1369 @see strchr()
  1370 @see strcspn()
  1371 @see strpbrk()
  1372 @see strrchr()
  1373 @see strsep()
  1374 @see strspn()
  1375 @see strtok()
  1376 
  1377 
  1378  
  1379 
  1380 @publishedAll
  1381 @externallyDefinedApi
  1382 */
  1383 
  1384 /** @fn  strtok(char *s, const char *delim)
  1385 @param s
  1386 @param delim
  1387 
  1388 Note: This description also covers the following functions -
  1389  strtok_r() 
  1390 
  1391 @return   strtok function returns a pointer to the next token, or NULL if there are no more tokens.
  1392 
  1393   This interface is superceded by strsep .
  1394 
  1395  The strtok function
  1396 is used to isolate sequential tokens in a null-terminated string, s .
  1397 These tokens are separated in the string by at least one of the
  1398 characters in delim .
  1399 The first time that strtok is called, s should be specified; subsequent calls, wishing to obtain further tokens
  1400 from the same string, should pass a null pointer instead.
  1401 The separator string, delim ,
  1402 must be supplied each time, and may change between calls.
  1403 
  1404  The implementation will behave as if no library function calls strtok .
  1405 
  1406  The strtok_r function is a reentrant version of strtok .
  1407 The context pointer last must be provided on each call.
  1408 The strtok_r function
  1409 may also be used to nest two parsing loops within one another, as
  1410 long as separate context pointers are used.
  1411 
  1412  The strtok and strtok_r functions
  1413 return a pointer to the beginning of each subsequent token in the string,
  1414 after replacing the token itself with a NUL character.
  1415 When no more tokens remain, a null pointer is returned.
  1416 
  1417 Examples:
  1418 @code
  1419 #include <string.h>
  1420 #include <stdio.h>
  1421 int main()
  1422 {
  1423     char one[50];
  1424     char *res;
  1425     strcpy(one,"Hello,World,Hi");
  1426     res=strtok(one,",");
  1427     if(!strcmp(res,"Hello"))
  1428     printf("%s
  1429 ",res);
  1430     res=strtok(NULL,",");
  1431     if(!strcmp(res,"World"))
  1432     printf("%s
  1433 ",res);
  1434     return 0;
  1435 }
  1436 
  1437 @endcode
  1438  Output
  1439 @code
  1440 Hello
  1441 World
  1442 
  1443 @endcode
  1444 @see memchr()
  1445 @see strchr()
  1446 @see strcspn()
  1447 @see strpbrk()
  1448 @see strsep()
  1449 @see strspn()
  1450 @see strstr()
  1451 @see wcstok()
  1452 
  1453 
  1454 Bugs:
  1455 
  1456  The System V strtok ,
  1457 if handed a string containing only delimiter characters,
  1458 will not alter the next starting point, so that a call to strtok with a different (or empty) delimiter string
  1459 may return a non- NULL value.
  1460 Since this implementation always alters the next starting point,
  1461 such a sequence of calls would always return NULL . 
  1462  
  1463 
  1464 @publishedAll
  1465 @externallyDefinedApi
  1466 */
  1467 
  1468 /** @fn  strtok_r(char *s1, const char *s2, char **lasts)
  1469 @param s1
  1470 @param s2
  1471 @param lasts
  1472 
  1473 Refer to  strtok() for the documentation
  1474 @see memchr()
  1475 @see strchr()
  1476 @see strcspn()
  1477 @see strpbrk()
  1478 @see strsep()
  1479 @see strspn()
  1480 @see strstr()
  1481 @see wcstok()
  1482 
  1483 
  1484  
  1485 
  1486 @publishedAll
  1487 @externallyDefinedApi
  1488 */
  1489 
  1490 /** @fn  strxfrm(char *  dest, const char *  src, size_t n)
  1491 @param dest
  1492 @param src
  1493 @param n
  1494 @return   Upon successful completion, strxfrm returns the length of the transformed string not including
  1495 the terminating null character.
  1496 If this value is n or more, the contents of dst are indeterminate.
  1497 
  1498   The strxfrm function transforms a null-terminated string pointed to by src according to the current locale collation if any,
  1499 then copies the transformed string
  1500 into dst .
  1501 Not more than n characters are copied into dst ,
  1502 including the terminating null character added.
  1503 If n is set to 0
  1504 (it helps to determine an actual size needed
  1505 for transformation), dst is permitted to be a NULL pointer.
  1506 
  1507  Comparing two strings using strcmp after strxfrm is equal to comparing
  1508 two original strings with strcoll .
  1509 
  1510 Examples:
  1511 @code
  1512 #include <string.h>
  1513 #include <stdio.h>
  1514 int main()
  1515 {
  1516     char src2[20] = "abc";
  1517     char dst1[20] = {’\0’};
  1518     char src1[20] = "abc";
  1519     char dst2[20] = {’\0’};
  1520     int retx1;
  1521     int retx2;
  1522     int retc;
  1523     retx1 = strxfrm(dst1,src1,strlen(src1));
  1524     retx2 = strxfrm(dst2,src2,strlen(src2));
  1525     if((retc = strcmp(dst1,dst2))== 0)
  1526         printf("Strings are same
  1527 ");
  1528 }
  1529 
  1530 @endcode
  1531  Output
  1532 @code
  1533 Strings are same
  1534 
  1535 @endcode
  1536 @see setlocale()
  1537 @see strcmp()
  1538 @see strcoll()
  1539 @see wcsxfrm()
  1540 
  1541 
  1542  
  1543 
  1544 @publishedAll
  1545 @externallyDefinedApi
  1546 */
  1547 
  1548 /** @fn  swab(const void *from, void *to, ssize_t len)
  1549 @param from
  1550 @param to
  1551 @param len
  1552 
  1553   The function swab copies len bytes from the location referenced by from to the location referenced by to ,
  1554 swapping adjacent bytes.
  1555 
  1556  The argument len must be an even number.
  1557 
  1558 Examples:
  1559 @code
  1560 #include <string.h>
  1561 #include <stdio.h>
  1562 int main()
  1563 {
  1564     int i=0x00003366,j=0x0;
  1565     swab((void *)&i;,(void *)&j;,2);
  1566     if(j==0x6633)
  1567        printf("Ouput val = %#x
  1568 ",j);
  1569     return 0;
  1570 }
  1571 
  1572 @endcode
  1573  Output
  1574 @code
  1575 Ouput val = 0x6633
  1576 
  1577 @endcode
  1578 @see bzero()
  1579 @see memset()
  1580 
  1581 
  1582  
  1583 
  1584 @publishedAll
  1585 @externallyDefinedApi
  1586 */
  1587