genericopenlibs/openenvcore/include/wchar.dosc
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /** @file  ../include/wchar.h
       
     2 @internalComponent
       
     3 */
       
     4 
       
     5 /** @fn  btowc(int c)
       
     6 @param c
       
     7 
       
     8 Note: This description also covers the following functions -
       
     9  wctob() 
       
    10 
       
    11 @return   The btowc function returns the wide character converted from the single 
       
    12   byte c . If c is EOF or not a valid multibyte sequence of length 1 the function 
       
    13   returns WEOF.
       
    14 
       
    15   The btowc function converts a single-byte character into a corresponding 
       
    16 wide character. If the character is EOF , or not valid in the initial shift state, btowc returns WEOF.
       
    17 
       
    18  The wctob function converts a wide character into a corresponding single-byte 
       
    19   character. If the wide character is WEOF , or not able to be represented as a single byte in the initial 
       
    20   shift state, wctob returns WEOF.
       
    21 
       
    22  
       
    23 
       
    24 Examples:
       
    25 @code
       
    26 #include <wchar.h>
       
    27 // Illustrates how to use btowc API
       
    28 wint_t example_btowc(int c)
       
    29 {
       
    30  wint_t wc = L'a';
       
    31  //  converting single byte to wide-character 
       
    32  wc = btowc(c);
       
    33  // return the character that was converted 
       
    34 return (wc);
       
    35 }
       
    36 
       
    37 @endcode
       
    38 @code
       
    39 #include <wchar.h>
       
    40 /* Illustrates how to use wctob API */
       
    41 int example_wctob(void)
       
    42 {
       
    43  wint_t wc = L'a';
       
    44  int c;
       
    45   
       
    46  /* represent a wide-char in a single byte*/
       
    47  c = wctob(wc);
       
    48  /* return the single byte */
       
    49  return(c);
       
    50 }
       
    51 
       
    52 @endcode
       
    53 
       
    54 Limitations:
       
    55 
       
    56 The current implementation of btowc and wctob is not affected by the LC_CTYPE category of the current locale.
       
    57 It works only for UTF8 character set.
       
    58 
       
    59 @see mbrtowc()
       
    60 @see wcrtomb()
       
    61 
       
    62 
       
    63  
       
    64 
       
    65 @publishedAll
       
    66 @externallyDefinedApi
       
    67 */
       
    68 
       
    69 /** @fn  fgetwc(FILE *stream)
       
    70 @param stream
       
    71 
       
    72 Note: This description also covers the following functions -
       
    73  getwc()  getwchar() 
       
    74 
       
    75 @return   If successful these routines return the next wide character from the stream. If the stream is at end-of-file or a read error occurs the routines 
       
    76 return WEOF. The routines feof and ferror must be used to distinguish between end-of-file 
       
    77 and error. If an error occurs the global variable errno is set to indicate the error. The end-of-file condition is remembered, 
       
    78 even on a terminal, and all subsequent attempts to read will return WEOF until the condition is cleared with clearerr .
       
    79 
       
    80   The fgetwc function
       
    81 obtains the next input wide character (if present) from the stream pointed at by stream, or the next character pushed back on the stream via ungetwc .
       
    82 
       
    83  The getwc function
       
    84 acts essentially identical to fgetwc.
       
    85 
       
    86  The getwchar function
       
    87 is equivalent to getwc with the argument stdin.
       
    88 
       
    89 Examples:
       
    90 @code
       
    91 /* Illustrates how to use fgetwc API */
       
    92 #include <stdio.h>
       
    93 #include <wchar.h>
       
    94 wint_t example_fgetwc(void)
       
    95 {
       
    96  FILE *fp = NULL;
       
    97  wint_t retval;
       
    98  
       
    99  /* opening the input file */
       
   100  fp = fopen("input.txt","r");
       
   101  if(fp == NULL)
       
   102  {
       
   103   wprintf(L"Error: File open
       
   104 ");
       
   105   return (-1);
       
   106  }
       
   107  /* Read a character from the opened file */
       
   108  retval = fgetwc(fp);
       
   109  /* Close the file open for reading */
       
   110  fclose(fp);
       
   111  /* return the character read from the file */
       
   112  return (retval);
       
   113 }
       
   114 
       
   115 @endcode
       
   116 @code
       
   117 /* Illustrates how to use getwc API */
       
   118 #include <stdio.h>
       
   119 #include <wchar.h>
       
   120 wint_t example_getwc(void)
       
   121 {
       
   122  FILE *fp =  NULL;
       
   123  wint_t retval;
       
   124  
       
   125  /* opening the input file */
       
   126  fp = fopen("input.txt","r");
       
   127  if(fp == NULL)
       
   128  {
       
   129   wprintf(L"Error: File open
       
   130 ");
       
   131   return (-1);
       
   132  }
       
   133  /* Read a character from the opened file */
       
   134  retval = getwc(fp);
       
   135  /* Close the file open for reading */
       
   136  fclose(fp);
       
   137  /* return the character read from the file */
       
   138  return (retval);
       
   139 }
       
   140 
       
   141 @endcode
       
   142 @code
       
   143 /* Illustrates how to use getwchar API */
       
   144 #include <stdio.h>
       
   145 #include <wchar.h>
       
   146 wint_t example_getwchar(void)
       
   147 {
       
   148  wint_t retval;
       
   149  
       
   150  /* Read a character from standard input */
       
   151  retval = getwchar();
       
   152  /* return the character read */
       
   153  return (retval);
       
   154 }
       
   155 
       
   156 @endcode
       
   157 @see ferror()
       
   158 @see fopen()
       
   159 @see fread()
       
   160 @see getc()
       
   161 @see putwc()
       
   162 @see ungetwc()
       
   163 
       
   164 
       
   165  
       
   166 
       
   167 @publishedAll
       
   168 @externallyDefinedApi
       
   169 */
       
   170 
       
   171 
       
   172 /** @fn  fgetws(wchar_t *  ws, int n, FILE *  fp)
       
   173 @param ws
       
   174 @param n
       
   175 @param fp
       
   176 @return   Upon successful completion fgetws returns ws. If end-of-file occurs before any characters are read, fgetws returns NULL and the buffer contents remain unchanged. If an error occurs fgetws returns NULL and the buffer contents are indeterminate. The fgetws function does not distinguish between end-of-file and error, 
       
   177 and callers must use feof and ferror to determine which occurred.
       
   178 
       
   179   The fgetws function reads at most one less than the number of characters 
       
   180 specified by n from the given fp and stores them in the wide character string ws. Reading stops when a newline character is found, at end-of-file or 
       
   181 error. The newline, if any, is retained. If any characters are read, and there 
       
   182 is no error, a '\\0' character is appended to end the string.
       
   183 
       
   184 Examples:
       
   185 @code
       
   186 #include <stdio.h>
       
   187 #include <wchar.h>
       
   188 /* Illustrates how to use fgetws API */
       
   189 wchar_t *example_fgetws(wchar_t *buf)
       
   190 {
       
   191  FILE *fp = NULL;
       
   192  wint_t retval;
       
   193  int n;
       
   194  /* for example, 10 characters to be read */
       
   195  n = 10;
       
   196  /* opening the input file */
       
   197  fp = fopen("input.txt","r");
       
   198  if(fp == NULL)
       
   199  {
       
   200   wprintf(L"Error: File open
       
   201 ");
       
   202   return (-1);
       
   203  }
       
   204  /* Read characters from the opened file */
       
   205  retval = fgetws(buf, n, fp);
       
   206  /* Close the file open for reading */
       
   207  fclose(fp);
       
   208  /* return the character read from the file */
       
   209  return (buf);
       
   210 }
       
   211 
       
   212 @endcode
       
   213 @see feof()
       
   214 @see ferror()
       
   215 @see fgets()
       
   216 
       
   217 
       
   218  
       
   219 
       
   220 @publishedAll
       
   221 @externallyDefinedApi
       
   222 */
       
   223 
       
   224 /** @fn  fputwc(wchar_t wc, FILE *stream)
       
   225 @param wc
       
   226 @param stream
       
   227 
       
   228 Note: This description also covers the following functions -
       
   229  putwc()  putwchar() 
       
   230 
       
   231 @return   The fputwc, putwc, and putwchar functions
       
   232 return the wide character written.
       
   233 If an error occurs, the value WEOF is returned.
       
   234 
       
   235   The fputwc function
       
   236 writes the wide character wc to the output stream pointed to by stream.
       
   237 
       
   238  The putwc function
       
   239 acts essentially identically to fputwc.
       
   240 
       
   241  The putwchar function
       
   242 is identical to putwc with an output stream of stdout.
       
   243 
       
   244 Examples:
       
   245 @code
       
   246 /* Illustrates how to use putwc API */
       
   247 #include <stdio.h>
       
   248 #include <wchar.h>
       
   249 wint_t example_putwc(void)
       
   250 {
       
   251  FILE *fp = NULL;
       
   252  wchar_t wc = L'a';
       
   253  wint_t rval;
       
   254  /* opening the file to write*/
       
   255  fp = fopen("input.txt","w");
       
   256  if(fp == NULL)
       
   257  {
       
   258   wprintf(L"Error: File open
       
   259 ");
       
   260   return (-1);
       
   261  }
       
   262 /* write a character into fp */
       
   263  rval = putwc(wc, fp);
       
   264  /* Close the file opened for writing */
       
   265  fclose(fp);
       
   266  /* return the value that was written */
       
   267  return (rval);
       
   268 }
       
   269 
       
   270 @endcode
       
   271 @code
       
   272 /* Illustrates how to use fputwc API */
       
   273 #include <stdio.h>
       
   274 #include <wchar.h>
       
   275 wint_t example_fputwc(void)
       
   276 {
       
   277  FILE *fp = NULL;
       
   278  wchar_t wc = L'a';
       
   279  wint_t rval;
       
   280  /* opening the file to write*/
       
   281  fp = fopen("input.txt","w");
       
   282  if(fp == NULL)
       
   283  {
       
   284   wprintf(L"Error: File open
       
   285 ");
       
   286   return (-1);
       
   287  }
       
   288 /* write a character into fp */
       
   289  rval = fputwc(wc, fp);
       
   290  /* Close the file opened for writing */
       
   291  fclose(fp);
       
   292  /* return the value that was written */
       
   293  return (rval);
       
   294 }
       
   295 
       
   296 @endcode
       
   297 @code
       
   298 /* Illustrates how to use putwchar API */
       
   299 #include <stdio.h>
       
   300 #include <wchar.h>
       
   301 wint_t example_putwchar(void)
       
   302 {
       
   303  wint_t rval;
       
   304  wchar_t wc = L'q';
       
   305  
       
   306  /* write a character onto the standard output */
       
   307  rval = putwchar(wc);
       
   308  /* return the character that was written */
       
   309  return (rval);
       
   310 }
       
   311 
       
   312 @endcode
       
   313  Output of putwchar
       
   314 @code
       
   315 q
       
   316 
       
   317 @endcode
       
   318 @see ferror()
       
   319 @see fopen()
       
   320 @see getwc()
       
   321 @see putc()
       
   322 
       
   323 
       
   324  
       
   325 
       
   326 @publishedAll
       
   327 @externallyDefinedApi
       
   328 */
       
   329 
       
   330 
       
   331 /** @fn  fputws(const wchar_t *  ws, FILE *  fp)
       
   332 @param ws
       
   333 @param fp
       
   334 @return   The fputws function
       
   335 returns 0 on success and -1 on error.
       
   336 
       
   337   The fputws function writes the wide character string pointed to by ws to the stream pointed to by fp.
       
   338 
       
   339 Examples:
       
   340 @code
       
   341 #include <stdio.h>
       
   342 #include <wchar.h>
       
   343 /* Illustrates how to use fputws API */
       
   344 int example_fputws(wchar_t *buf)
       
   345 {
       
   346  FILE *fp = NULL;
       
   347  int retval;
       
   348  /* open the file for writing*/
       
   349  fp = fopen("write.txt","r");
       
   350  if(fp == NULL)
       
   351  {
       
   352   wprintf(L"Error: File open
       
   353 ");
       
   354   return (-1);
       
   355  }
       
   356  /* Write the characters into the file */
       
   357  retval = fputws(buf, fp);
       
   358  /* Close the file open for writing */
       
   359  fclose(fp);
       
   360  /* return the number of characters written */
       
   361  /* into the file */
       
   362  return (retval);
       
   363 }
       
   364 
       
   365 @endcode
       
   366 @see ferror()
       
   367 @see fputs()
       
   368 @see putwc()
       
   369 
       
   370 
       
   371  
       
   372 
       
   373 @publishedAll
       
   374 @externallyDefinedApi
       
   375 */
       
   376 
       
   377 
       
   378 /** @fn  fwide(FILE *stream, int mode)
       
   379 @param stream
       
   380 @param mode
       
   381 @return   The fwide function
       
   382 returns a value according to orientation after the call of fwide; a value less than zero if byte-oriented, a value greater than zero
       
   383 if wide-oriented, and zero if the stream has no orientation.
       
   384 
       
   385   The fwide function
       
   386 determines the orientation of the stream pointed at by stream.
       
   387 
       
   388  If the orientation of stream has already been determined fwide leaves it unchanged. Otherwise fwide sets the orientation of stream according to mode.
       
   389 
       
   390  If mode is less than zero stream is set to byte-oriented. If it is greater than zero stream is set to wide-oriented. Otherwise mode is zero and stream is unchanged.
       
   391 
       
   392 Examples:
       
   393 @code
       
   394 #include <stdio.h>
       
   395 #include <wchar.h>
       
   396 /* Illustrates how to use fwide API */
       
   397 int example_fwide(void)
       
   398 {
       
   399  FILE *fp = NULL;
       
   400  int retval;
       
   401  int mode;
       
   402  /* open a file */
       
   403  fp = fopen("input.txt","r");
       
   404  if(fp == NULL)
       
   405  {
       
   406   wprintf(L"Error: File open
       
   407 ");
       
   408   return (-1);
       
   409  }
       
   410  /* set the mode to wide*/
       
   411  mode = 1;
       
   412  /* set the orientation of the file */
       
   413  retval = fwide(fp, mode);
       
   414  /*     check   the     return value */
       
   415  if(retval ==   1)
       
   416  {
       
   417         wprintf(L"Mode set to WIDE
       
   418 ");
       
   419  }
       
   420  else
       
   421  {
       
   422         wprintf(L"Error setting the mode to wide!!
       
   423 ");
       
   424  }
       
   425  /* set the mode to determine the orientation */
       
   426  mode = 0;
       
   427  /* Read back the orientation that was set */
       
   428  retval = fwide(fp ,mode);
       
   429  if(retval == 1)
       
   430  {
       
   431         wprintf("Mode not changed
       
   432 ");
       
   433  }
       
   434  else
       
   435  {
       
   436         wprintf("Error, mode changed!!
       
   437 ");
       
   438  }
       
   439  /* Close the file open for writing */
       
   440  fclose(fp);
       
   441  /* return the mode of fp */
       
   442  return (retval);
       
   443 }
       
   444 
       
   445 @endcode
       
   446 @see ferror()
       
   447 @see fgetc()
       
   448 @see fgetwc()
       
   449 @see fopen()
       
   450 @see fputc()
       
   451 @see fputwc()
       
   452 @see freopen()
       
   453 
       
   454 
       
   455  
       
   456 
       
   457 @publishedAll
       
   458 @externallyDefinedApi
       
   459 */
       
   460 
       
   461 
       
   462 /** @fn  fwprintf(FILE *  stream, const wchar_t *  format, ...)
       
   463 @param stream
       
   464 @param format
       
   465 @param ...
       
   466 
       
   467 Note: This description also covers the following functions -
       
   468  swprintf()  snwprintf()  vsnwprintf()  wprintf()  vfwprintf()  vswprintf()  vwprintf() 
       
   469 
       
   470 @return   The functions return the number of wide characters written, excluding the terminating null wide character in case of the functions swprintf , snwprintf , vswprintf and vsnwprintf . They return -1 when an error occurs.
       
   471 
       
   472 The wprintf family of functions produces output according to a format as described below. The wprintf and vwprintf functions write output to stdout, the standard output stream; fwprintf and vfwprintf write output to the given output stream; swprintf , snwprintf , vswprintf and vsnwprintf write to the wide character string ws. 
       
   473 These functions write the output under the control of a format string that specifies how subsequent arguments (or arguments accessed via the variable-length argument facilities of stdarg) are converted for output. 
       
   474 
       
   475 These functions return the number of characters printed (not including the trailing ‘\\0’ used to end output to strings). 
       
   476 
       
   477 The swprintf , snwprintf , vswprintf and vsnwprintf functions will fail if n or more wide characters were requested to be written. 
       
   478 
       
   479 @code
       
   480 
       
   481 Note : 
       
   482 
       
   483 1. swprintf and snwprintf can be used interchangeably. 
       
   484 
       
   485 2. vswprintf and vsnwprintf can be used interchangeably. 
       
   486 
       
   487 
       
   488 The format string is composed of zero or more directives: ordinary characters (not %), which are copied unchanged to the output stream; and conversion specifications, each of which results in fetching zero or more subsequent arguments. Each conversion specification is introduced by the % character. The arguments must correspond properly (after type promotion) with the conversion specifier. After the %, the following appear in sequence: 
       
   489 @endcode
       
   490 
       
   491 @code
       
   492 An optional field, consisting of a decimal digit string followed by a $, specifying the next argument to access. If this field is not provided, the argument following the last argument accessed will be used. Arguments are numbered starting at 1. If unaccessed arguments in the format string are interspersed with ones that are accessed the results will be indeterminate. 
       
   493 Zero or more of the following flags:
       
   494 
       
   495  '#'  The value should be converted to an "alternate form". For c, d, i, n, p, s, and u conversions, this option has no effect. For o conversions, the precision of the number is increased to force the first character of the output string to a zero (except if a zero value is printed with an explicit precision of zero). For x and X conversions, a non-zero result has the string ‘0x’ (or ‘0X’ for X conversions) prepended to it. For a, A, e, E, f, F, g, and G conversions, the result will always contain a decimal point, even if no digits follow it (normally, a decimal point appears in the results of those conversions only if a digit follows). For g and G conversions, trailing zeros are not removed from the result as they would otherwise be.  
       
   496 
       
   497 '0(zero)'  Zero padding. For all conversions except n, the converted value is padded on the left with zeros rather than blanks. If a precision is given with a numeric conversion ( d, i, o, u, i, x, and X), the 0 flag is ignored.  
       
   498 
       
   499 '-'  A negative field width flag; the converted value is to be left adjusted on the field boundary. Except for n conversions, the converted value is padded on the right with blanks, rather than on the left with blanks or zeros. A - overrides a 0 if both are given.  
       
   500 
       
   501 ' (space)'  A blank should be left before a positive number produced by a signed conversion ( a, A, d, e, E, f, F, g, G, or i).  
       
   502 
       
   503 '+'  A sign must always be placed before a number produced by a signed conversion. A + overrides a space if both are used.  
       
   504 
       
   505 '’'  Decimal conversions ( d, u, or i) or the integral portion of a floating point conversion ( f or F) should be grouped and separated by thousands using the non-monetary separator returned by localeconv.  
       
   506 
       
   507 
       
   508 An optional decimal digit string specifying a minimum field width. If the converted value has fewer characters than the field width, it will be padded with spaces on the left (or right, if the left-adjustment flag has been given) to fill out the field width. 
       
   509 
       
   510 An optional precision, in the form of a period . followed by an optional digit string. If the digit string is omitted, the precision is taken as zero. This gives the minimum number of digits to appear for d, i, o, u, x, and X conversions, the number of digits to appear after the decimal-point for a, A, e, E, f, and F conversions, the maximum number of significant digits for g and G conversions, or the maximum number of characters to be printed from a string for s conversions. 
       
   511 
       
   512 An optional length modifier, that specifies the size of the argument. The following length modifiers are valid for the d, i, n, o, u, x, or X conversion:
       
   513 
       
   514 @endcode
       
   515 
       
   516 @code
       
   517 
       
   518  Modifier            d, i      o, u, x, X        n 
       
   519 
       
   520  hh signed char unsigned char signed char *
       
   521  h short unsigned short short *
       
   522  l (ell) long unsigned long long *
       
   523  ll (ell ell) long long unsigned long long long long *
       
   524  j intmax_t uintmax_t intmax_t *
       
   525  t ptrdiff_t (see note) ptrdiff_t *
       
   526  z (see note) size_t (see note)
       
   527  q (deprecated) quad_t u_quad_t quad_t *
       
   528 
       
   529 @endcode
       
   530 
       
   531 @code
       
   532 
       
   533 Note: the t modifier, when applied to a o, u, x, or X conversion, indicates that the argument is of an unsigned type equivalent in size to a ptrdiff_t . The z modifier, when applied to a d or i conversion, indicates that the argument is of a signed type equivalent in size to a size_t . Similarly, when applied to an n conversion, it indicates that the argument is a pointer to a signed type equivalent in size to a size_t . 
       
   534 
       
   535 The following length modifier is valid for the a, A, e, E, f, F, g, or G conversion:
       
   536 
       
   537 @endcode
       
   538 
       
   539 @code
       
   540 
       
   541  Modifier a, A, e, E, f, F, g, G
       
   542  L long double
       
   543 
       
   544 @endcode
       
   545 
       
   546 @code   
       
   547 
       
   548 The following length modifier is valid for the c or s conversion:
       
   549 
       
   550 Modifier c s
       
   551  l (ell) wint_t  wchar_t * 
       
   552 
       
   553 @endcode
       
   554 
       
   555 @code
       
   556 
       
   557 A character that specifies the type of conversion to be applied. 
       
   558 
       
   559 A field width or precision, or both, may be indicated by an asterisk ‘*’ or an asterisk followed by one or more decimal digits and a ‘$’ instead of a digit string. In this case, an int argument supplies the field width or precision. A negative field width is treated as a left adjustment flag followed by a positive field width; a negative precision is treated as though it were missing. If a single format directive mixes positional (nn$) and non-positional arguments, the results are undefined. 
       
   560 
       
   561 The conversion specifiers and their meanings are: 
       
   562 
       
   563 
       
   564 diouxX  
       
   565   The int (or appropriate variant) argument is converted to signed decimal ( d and i), unsigned octal (o), unsigned decimal (u), or unsigned hexadecimal ( x and X) notation. The letters "abcdef" are used for x conversions; the letters "ABCDEF" are used for X conversions. The precision, if any, gives the minimum number of digits that must appear; if the converted value requires fewer digits, it is padded on the left with zeros.  
       
   566 
       
   567 DOU  
       
   568   The long int argument is converted to signed decimal, unsigned octal, or unsigned decimal, as if the format had been ld, lo, or lu respectively. These conversion characters are deprecated, and will eventually disappear.  
       
   569 
       
   570 eE  
       
   571   The double argument is rounded and converted in the style [-d . ddd e \*[Pm] dd] where there is one digit before the decimal-point character and the number of digits after it is equal to the precision; if the precision is missing, it is taken as 6; if the precision is zero, no decimal-point character appears. An E conversion uses the letter ‘E’ (rather than ‘e’) to introduce the exponent. The exponent always contains at least two digits; if the value is zero, the exponent is 00. 
       
   572 For a, A, e, E, f, F, g, and G conversions, positive and negative infinity are represented as inf and -inf respectively when using the lowercase conversion character, and INF and -INF respectively when using the uppercase conversion character. Similarly, NaN is represented as nan when using the lowercase conversion, and NAN when using the uppercase conversion. 
       
   573  
       
   574 fF  
       
   575   The double argument is rounded and converted to decimal notation in the style [-ddd . ddd], where the number of digits after the decimal-point character is equal to the precision specification. If the precision is missing, it is taken as 6; if the precision is explicitly zero, no decimal-point character appears. If a decimal point appears, at least one digit appears before it.  
       
   576 
       
   577 gG  The double argument is converted in style f or e (or F or E for G conversions). The precision specifies the number of significant digits. If the precision is missing, 6 digits are given; if the precision is zero, it is treated as 1. Style e is used if the exponent from its conversion is less than -4 or greater than or equal to the precision. Trailing zeros are removed from the fractional part of the result; a decimal point appears only if it is followed by at least one digit.  
       
   578 
       
   579 aA  The double argument is converted to hexadecimal notation in the style [-0x h . hhhp[\*[Pm]d]], where the number of digits after the hexadecimal-point character is equal to the precision specification. If the precision is missing, it is taken as enough to exactly represent the floating-point number; if the precision is explicitly zero, no hexadecimal-point character appears. This is an exact conversion of the mantissa+exponent internal floating point representation; the [-0x h . hhh] portion represents exactly the mantissa; only denormalized mantissas have a zero value to the left of the hexadecimal point. The p is a literal character ‘p’; the exponent is preceded by a positive or negative sign and is represented in decimal, using only enough characters to represent the exponent. The A conversion uses the prefix "0X" (rather than "0x"), the letters "ABCDEF" (rather than "abcdef") to represent the hex digits, and the letter ‘P’ (rather than ‘p’) to separate the mantissa and exponent.  
       
   580 
       
   581 C  Treated as c with the l (ell) modifier.  
       
   582 
       
   583 c  The int argument is converted to an unsigned char , then to a wchar_t as if by btowc, and the resulting character is written. 
       
   584 
       
   585 If the l (ell) modifier is used, the wint_t argument is converted to a wchar_t and written. 
       
   586  
       
   587 S  Treated as s with the l (ell) modifier.  
       
   588 
       
   589 s  The char * argument is expected to be a pointer to an array of character type (pointer to a string) containing a multibyte sequence. Characters from the array are converted to wide characters and written up to (but not including) a terminating NUL character; if a precision is specified, no more than the number specified are written. If a precision is given, no null character need be present; if the precision is not specified, or is greater than the size of the array, the array must contain a terminating NUL character. 
       
   590 
       
   591 If the l (ell) modifier is used, the wchar_t * argument is expected to be a pointer to an array of wide characters (pointer to a wide string). Each wide character in the string is written. Wide characters from the array are written up to (but not including) a terminating wide NUL character; if a precision is specified, no more than the number specified are written (including shift sequences). If a precision is given, no null character need be present; if the precision is not specified, or is greater than the number of characters in the string, the array must contain a terminating wide NUL character. 
       
   592  
       
   593 p  The void * pointer argument is printed in hexadecimal (as if by ‘%#x’ or ‘%#lx’).  
       
   594 
       
   595 n  The number of characters written so far is stored into the integer indicated by the int * (or variant) pointer argument. No argument is converted. 
       
   596  
       
   597 %  A ‘%’ is written. No argument is converted. The complete conversion specification is ‘%%’.  
       
   598 
       
   599 @endcode
       
   600 
       
   601 The decimal point character is defined in the program’s locale (category LC_NUMERIC). 
       
   602 
       
   603 In no case does a non-existent or small field width cause truncation of a numeric field; if the result of a conversion is wider than the field width, the field is expanded to contain the conversion result. 
       
   604 
       
   605 
       
   606 Examples:
       
   607 @code
       
   608 #include <stdio.h>
       
   609 #include <wchar.h>
       
   610 /* Illustrates how to use wprintf API */
       
   611 int example_wprintf(void)
       
   612 {
       
   613  int input = 12345;
       
   614  int rval;
       
   615  /* prints the integers on the standard output */
       
   616  rval = wprintf(L"%d", input);
       
   617  /* return the number of wide characters that were written */
       
   618  return(rval);
       
   619 }
       
   620 
       
   621 @endcode
       
   622  Output
       
   623 @code
       
   624 12345
       
   625 
       
   626 @endcode
       
   627 @code
       
   628 #include <stdio.h>
       
   629 #include <wchar.h>
       
   630 /* Illustrates how to use fwprintf API */
       
   631 int example_fwprintf(void)
       
   632 {
       
   633  FILE *fp = NULL;
       
   634  int retval;
       
   635  wchar_t *wcs = L"abc";
       
   636  /* open the file for writing*/
       
   637  fp = fopen("write.txt","w");
       
   638  if(fp == NULL)
       
   639  {
       
   640   wprintf(L"Error: File open
       
   641 ");
       
   642   return (-1);
       
   643  }
       
   644  /* print the characters into the file */
       
   645  retval = fwprintf(fp, L"%s", wcs);
       
   646  /* Close the file opened for writing */
       
   647  fclose(fp);
       
   648  /* return the number of wide characters that were written */
       
   649  return (retval);
       
   650 }
       
   651 
       
   652 @endcode
       
   653 @code
       
   654 #include <stdio.h>
       
   655 #include <wchar.h>
       
   656 /* Illustrates how to use swprintf API */
       
   657 int example_swprintf(wchar_t *buf, int maxlen)
       
   658 {
       
   659  wchar_t *wcs = L"abcdef";
       
   660  int rval;
       
   661  /* prints the wide char string into the buffer buf */
       
   662  rval = swprintf(buf, maxlen, L"%s", wcs);
       
   663  /* return the number of wide characters that were written */
       
   664  return(rval);
       
   665 }
       
   666 
       
   667 @endcode
       
   668 @code
       
   669 #include <stdio.h>
       
   670 #include <wchar.h>
       
   671 /* Illustrates how to use vwprintf API */
       
   672 int example_vwprintf(va_list input)
       
   673 {
       
   674  int rval;
       
   675  /* prints the integers on the standard output */
       
   676  rval = vwprintf(L"%d", input);
       
   677  /* return the number of wide characters that were written */
       
   678  return(rval);
       
   679 }
       
   680 
       
   681 @endcode
       
   682 @code
       
   683 #include <stdio.h>
       
   684 #include <wchar.h>
       
   685 /* Illustrates how to use vfwprintf API */
       
   686 int example_vfwprintf(va_list input)
       
   687 {
       
   688   FILE *fp = NULL;
       
   689   int retval;
       
   690  
       
   691   /* open the file for writing*/
       
   692   fp = fopen("write.txt","w");
       
   693   if(fp == NULL)
       
   694   {
       
   695     wprintf(L"Error: File open
       
   696 ");
       
   697     return (-1);
       
   698   }
       
   699   /* print the characters into the file */
       
   700   retval = vfwprintf(fp, L"%s", input);
       
   701   /* Close the file opened for writing */
       
   702   fclose(fp);
       
   703   /* return the number of wide characters that were written */
       
   704   return (retval);
       
   705 }
       
   706 
       
   707 @endcode
       
   708 @code
       
   709 #include <stdio.h>
       
   710 #include <wchar.h>
       
   711 /* Illustrates how to use vswprintf API */
       
   712 int example_vswprintf(wchar_t *buf, int maxlen, va_list input)
       
   713 {
       
   714  int rval;
       
   715  /* prints the wide char string into the buffer buf */
       
   716  rval = vswprintf(buf, maxlen, L"%s", input);
       
   717  /* return the number of wide characters that were written */
       
   718  return(rval);
       
   719 }
       
   720 
       
   721 @endcode
       
   722 
       
   723 Security considerations:
       
   724 
       
   725 Refer to printf() .
       
   726  
       
   727 Limitations:
       
   728 
       
   729 Long double length modifiers are not supported. The maximum floating point 
       
   730 precision is 15 digits.
       
   731 
       
   732 @see btowc()
       
   733 @see fputws()
       
   734 @see printf()
       
   735 @see putwc()
       
   736 @see setlocale()
       
   737 @see wcsrtombs()
       
   738 @see wscanf()
       
   739 
       
   740 
       
   741  
       
   742 
       
   743 @publishedAll
       
   744 @externallyDefinedApi
       
   745 */
       
   746 
       
   747 /** @fn  fwscanf(FILE *  stream, const wchar_t *  format, ...)
       
   748 @param stream
       
   749 @param format
       
   750 @param ...
       
   751 
       
   752 Refer to wscanf() for the documentation
       
   753 
       
   754 @see fgetwc()
       
   755 @see scanf()
       
   756 @see wcrtomb()
       
   757 @see wcstod()
       
   758 @see wcstol()
       
   759 @see wcstoul()
       
   760 @see wprintf()
       
   761 
       
   762 
       
   763  
       
   764 
       
   765 @publishedAll
       
   766 @externallyDefinedApi
       
   767 */
       
   768 
       
   769 /** @fn  getwc(FILE *stream)
       
   770 @param stream
       
   771 
       
   772 Refer to  fgetwc() for the documentation
       
   773 
       
   774 @see ferror()
       
   775 @see fopen()
       
   776 @see fread()
       
   777 @see getc()
       
   778 @see putwc()
       
   779 @see ungetwc()
       
   780 
       
   781 
       
   782  
       
   783 
       
   784 @publishedAll
       
   785 @externallyDefinedApi
       
   786 */
       
   787 
       
   788 
       
   789 /** @fn  getwchar(void)
       
   790 
       
   791 Refer to fgetwc() for the documentation
       
   792 
       
   793 @see ferror()
       
   794 @see fopen()
       
   795 @see fread()
       
   796 @see getc()
       
   797 @see putwc()
       
   798 @see ungetwc()
       
   799 
       
   800 
       
   801  
       
   802 
       
   803 @publishedAll
       
   804 @externallyDefinedApi
       
   805 */
       
   806 
       
   807 /** @fn  mbrlen(const char *  s, size_t n, mbstate_t *  ps)
       
   808 @param s
       
   809 @param n
       
   810 @param ps
       
   811 
       
   812 @return   The mbrlen functions returns: 0 The next n or fewer bytes
       
   813 represent the null wide character (L'\\0') \>0 The next n or fewer bytes
       
   814 represent a valid character, mbrlen returns the number of bytes used to complete the multibyte character. ( size_t-2)   The next n contribute to, but do not complete, a valid multibyte character sequence,
       
   815 and all n bytes have been processed. ( size_t-1)   An encoding error has occurred.
       
   816 The next n or fewer bytes do not contribute to a valid multibyte character.
       
   817 
       
   818   The mbrlen function inspects at most n bytes pointed to by s to determine the number of bytes needed to complete the next
       
   819 multibyte character.
       
   820 
       
   821  The mbstate_t
       
   822 argument, ps, is used to keep track of the shift state.
       
   823 If it is NULL, mbrlen uses an internal, static mbstate_t
       
   824 object, which is initialized to the initial conversion state
       
   825 at program startup.
       
   826 
       
   827  It is equivalent to:
       
   828 
       
   829 @code
       
   830 
       
   831 mbrtowc(NULL, s, n, ps); 
       
   832 
       
   833 @endcode
       
   834 
       
   835 Except that when ps is a NULL pointer, mbrlen uses its own static, internal mbstate_t
       
   836 object to keep track of the shift state. The behavior of the mbrlen is affected by LC_CTYPE category of the current locale.
       
   837 
       
   838 Examples:
       
   839  A function that calculates the number of characters in a multibyte
       
   840 character string:
       
   841 @code
       
   842 size_t
       
   843 nchars(const char *s)
       
   844 {
       
   845         size_t charlen, chars;
       
   846         mbstate_t mbs;
       
   847         chars = 0;
       
   848         memset(&mbs;, 0, sizeof(mbs));
       
   849         while ((charlen = mbrlen(s, MB_CUR_MAX, &mbs;)) != 0 &&
       
   850             charlen != (size_t)-1 && charlen != (size_t)-2) {
       
   851                 s += charlen;
       
   852                 chars++;
       
   853         }
       
   854         return (chars);
       
   855 }
       
   856 
       
   857 @endcode
       
   858 
       
   859 Errors:
       
   860 
       
   861 The mbrlen function will fail if: 
       
   862 [EILSEQ] An invalid multibyte sequence was detected.  
       
   863 [EINVAL] The conversion state is invalid.
       
   864 
       
   865 Limitations:
       
   866 
       
   867 The current implementation of mbrlen is not affected by the LC_CTYPE category of the current locale.
       
   868 It works only for UTF8 character set.
       
   869 
       
   870 @see mblen()
       
   871 @see mbrtowc()
       
   872 
       
   873 
       
   874  
       
   875 
       
   876 @publishedAll
       
   877 @externallyDefinedApi
       
   878 */
       
   879 
       
   880 /** @fn  mbrtowc(wchar_t *  pwc, const char *  s, size_t n, mbstate_t *  ps)
       
   881 @param pwc
       
   882 @param s
       
   883 @param n
       
   884 @param ps
       
   885 
       
   886 @return   The mbrtowc functions returns: 0 The next n or fewer bytes
       
   887 represent the null wide character (L'\\0') \>0 The next n or fewer bytes
       
   888 represent a valid character, mbrtowc returns the number of bytes used to complete the multibyte character. ( size_t-2)   The next n contribute to, but do not complete, a valid multibyte character sequence,
       
   889 and all n bytes have been processed. ( size_t-1)   An encoding error has occurred.
       
   890 The next n or fewer bytes do not contribute to a valid multibyte character.
       
   891 
       
   892 
       
   893   The mbrtowc function inspects at most n bytes pointed to by s to determine the number of bytes needed to complete the next multibyte
       
   894 character.
       
   895 If a character can be completed, and pwc is not NULL, the wide character which is represented by s is stored in the wchar_t
       
   896 it points to.
       
   897 
       
   898  If s is NULL, mbrtowc behaves as if pwc was NULL, s was an empty string ("")
       
   899 and n was 1.
       
   900 
       
   901  The mbstate_t
       
   902 argument, ps, is used to keep track of the shift state.
       
   903 If it is NULL, mbrtowc uses an internal, static mbstate_t
       
   904 object, which is initialized to the initial conversion state
       
   905 at program startup.
       
   906 
       
   907  The behavior of the mbrtowc is affected by LC_CTYPE category of the current locale.
       
   908 
       
   909 Examples:
       
   910 @code
       
   911 #include <stdio.h>
       
   912 #include <stdlib.h>
       
   913 #include <wchar.h>
       
   914 /* Illustrates how to use mbrtowc API */
       
   915 size_t example_mbrtowc()
       
   916 {
       
   917  size_t len;
       
   918  wchar_t wc[100];
       
   919  char *s = 'a';
       
   920  size_t n = 1;
       
   921  mbstate_t ps;
       
   922  /* converting multibyte sequence to a wide-char sequence */
       
   923  len = mbrtowc(wc,(const char *) s, n, &ps;);
       
   924  /* checking for error value */
       
   925  if(len < 0)
       
   926  {
       
   927         wprintf(L"mbrtowc returned error!!
       
   928 ");
       
   929  }
       
   930  /* returning no of bytes consumed */
       
   931  return (len);
       
   932 }
       
   933 
       
   934 @endcode
       
   935 
       
   936 Errors:
       
   937 
       
   938 The mbrtowc function will fail if: 
       
   939 [EILSEQ] An invalid multibyte sequence was detected.  
       
   940 [EINVAL]The conversion state is invalid. 
       
   941 
       
   942  
       
   943 Limitations:
       
   944 
       
   945 The current implementation of mbrtowc is not affected by the LC_CTYPE category of the current locale.
       
   946 It works only for UTF8 character set.
       
   947 
       
   948 @see mbtowc()
       
   949 @see setlocale()
       
   950 @see wcrtomb()
       
   951 
       
   952 
       
   953  
       
   954 
       
   955 @publishedAll
       
   956 @externallyDefinedApi
       
   957 */
       
   958 
       
   959 /** @fn  mbsinit(const mbstate_t *ps)
       
   960 @param ps
       
   961 
       
   962 @return   The mbsinit function returns non-zero if ps is NULL or describes an initial conversion state,
       
   963 otherwise it returns zero.
       
   964 
       
   965   The mbsinit function determines whether the mbstate_t
       
   966 object pointed to by ps describes an initial conversion state.
       
   967 
       
   968  The behavior of the mbsinit is affected by LC_CTYPE category of the current locale.
       
   969 
       
   970 Examples:
       
   971 @code
       
   972 #include <stdlib.h>
       
   973 #include <wchar.h>
       
   974 /* Illustrates how to use mbsinit API */
       
   975 int example_mbsinit(void)
       
   976 {
       
   977  mbstate_t mbs;
       
   978  int state;
       
   979  
       
   980  /* testing for the initial state */
       
   981  state = mbsinit(&mbs;);
       
   982  /* return the state */
       
   983  return(state);
       
   984 }
       
   985 
       
   986 @endcode
       
   987 
       
   988 Limitations:
       
   989 
       
   990 The current implementation of mbsinit is not affected by the LC_CTYPE category of the current locale.
       
   991 It works only for UTF8 character set.
       
   992 
       
   993 @see mbrlen()
       
   994 @see mbrtowc()
       
   995 @see mbsrtowcs()
       
   996 @see wcrtomb()
       
   997 @see wcsrtombs()
       
   998 
       
   999 
       
  1000  
       
  1001 
       
  1002 @publishedAll
       
  1003 @externallyDefinedApi
       
  1004 */
       
  1005 
       
  1006 /** @fn  mbsrtowcs(wchar_t *  dst, const char **  src, size_t len, mbstate_t *  ps)
       
  1007 @param dst
       
  1008 @param src
       
  1009 @param len
       
  1010 @param ps
       
  1011 
       
  1012 Note: This description also covers the following functions -
       
  1013  mbsnrtowcs() 
       
  1014 
       
  1015 @return   The mbsrtowcs and mbsnrtowcs functions return the number of wide characters stored in 
       
  1016 the array pointed to by dst if successful, otherwise it returns ( size_t)(-1).
       
  1017 
       
  1018   The mbsrtowcs function converts a sequence of multibyte characters pointed to indirectly by src into a sequence of corresponding wide characters and stores at most len of them in the wchar_t
       
  1019 array pointed to by dst, until it encounters a terminating null character ('\\0'.)
       
  1020 
       
  1021  If dst is NULL no characters are stored.
       
  1022 
       
  1023  If dst is not NULL, the pointer pointed to by src is updated to point to the character after the one that conversion stopped at.
       
  1024 If conversion stops because a null character is encountered, *src is set to NULL.
       
  1025 
       
  1026  The mbstate_t
       
  1027 argument, ps, is used to keep track of the shift state.
       
  1028 If it is NULL, mbsrtowcs uses an internal, static mbstate_t
       
  1029 object, which is initialized to the initial conversion state
       
  1030 at program startup.
       
  1031 
       
  1032  The mbsnrtowcs function behaves identically to mbsrtowcs, except that conversion stops after reading at most nms bytes from the buffer pointed to by src.
       
  1033 
       
  1034  The behavior of the mbsrtowcs and mbsnrtowcs is affected by LC_CTYPE category of the current locale.
       
  1035 
       
  1036 Examples:
       
  1037 @code
       
  1038 /* Illustrates how to use mbsrtowcs API */
       
  1039 #include <stdio.h>
       
  1040 #include <stdlib.h>
       
  1041 #include <wchar.h>
       
  1042 size_t example_mbsrtowcs(wchar_t *wc, char *s, size_t n)
       
  1043 {
       
  1044  size_t len;
       
  1045  mbstate_t mbs;
       
  1046  /* converting multibyte string to a wide-char string */
       
  1047  len = mbsrtowcs(wc, &s;, n, &mbs;);
       
  1048  /* checking for error */
       
  1049  if(len < 0)
       
  1050  {
       
  1051         wprintf(L"mbsrtowcs returned error!!
       
  1052 ");
       
  1053  }
       
  1054  /* returning no of bytes consumed */
       
  1055  return (len);
       
  1056 }
       
  1057 
       
  1058 @endcode
       
  1059 @code
       
  1060 /* Illustrates how to use mbsrntowcs API */
       
  1061 #include <stdio.h>
       
  1062 #include <stdlib.h>
       
  1063 #include <wchar.h>
       
  1064 size_t example_mbsnrtowcs(wchar_t *wc, char *s, size_t n, size_t nms)
       
  1065 {
       
  1066   size_t len;
       
  1067   mbstate_t mbs;
       
  1068  /* converting multibyte string to a wide-char string */
       
  1069   len = mbsnrtowcs(wc, &s;, nms, n, &mbs;);
       
  1070  /* checking for error */
       
  1071  if(len < 0)
       
  1072  {
       
  1073         wprintf(L"mbsnrtowcs returned error!!
       
  1074 ");
       
  1075  }
       
  1076   /* returning no of bytes consumed */
       
  1077   return (len);
       
  1078 }
       
  1079 
       
  1080 @endcode
       
  1081 
       
  1082 Errors:
       
  1083 
       
  1084 The mbsrtowcs and mbsnrtowcs functions will fail if: 
       
  1085 [EILSEQ]An invalid multibyte character sequence was encountered.  
       
  1086 [EINVAL] The conversion state is invalid.
       
  1087 
       
  1088 
       
  1089 Limitations:
       
  1090 
       
  1091 The current implementation of mbsrtowcs and mbsnrtowcs is not affected by the LC_CTYPE category of the current locale.
       
  1092 It works only for UTF8 character set.
       
  1093 
       
  1094 @see mbrtowc()
       
  1095 @see mbstowcs()
       
  1096 @see wcsrtombs()
       
  1097 
       
  1098 
       
  1099  
       
  1100 
       
  1101 @publishedAll
       
  1102 @externallyDefinedApi
       
  1103 */
       
  1104 
       
  1105 
       
  1106 /** @fn  putwc(wchar_t wc, FILE *stream)
       
  1107 @param wc
       
  1108 @param stream
       
  1109 
       
  1110 Refer to fputwc() for the documentation
       
  1111 
       
  1112 @see ferror()
       
  1113 @see fopen()
       
  1114 @see getwc()
       
  1115 @see putc()
       
  1116 
       
  1117 
       
  1118  
       
  1119 
       
  1120 @publishedAll
       
  1121 @externallyDefinedApi
       
  1122 */
       
  1123 
       
  1124 /** @fn  putwchar(wchar_t wc)
       
  1125 @param wc
       
  1126 
       
  1127 Refer to  fputwc() for the documentation
       
  1128 
       
  1129 @see ferror()
       
  1130 @see fopen()
       
  1131 @see getwc()
       
  1132 @see putc()
       
  1133 
       
  1134 
       
  1135  
       
  1136 
       
  1137 @publishedAll
       
  1138 @externallyDefinedApi
       
  1139 */
       
  1140 
       
  1141 /** @fn  swprintf(wchar_t *  s, size_t n, const wchar_t *  fmt, ...)
       
  1142 @param s
       
  1143 @param n
       
  1144 @param fmt
       
  1145 @param ...
       
  1146 
       
  1147 Refer to fwprintf() for the documentation
       
  1148 
       
  1149 @see btowc()
       
  1150 @see fputws()
       
  1151 @see printf()
       
  1152 @see putwc()
       
  1153 @see setlocale()
       
  1154 @see wcsrtombs()
       
  1155 @see wscanf()
       
  1156 
       
  1157 
       
  1158  
       
  1159 
       
  1160 @publishedAll
       
  1161 @externallyDefinedApi
       
  1162 */
       
  1163 
       
  1164 /** @fn  swscanf(const wchar_t *  str, const wchar_t *fmt, ...)
       
  1165 @param str
       
  1166 @param fmt
       
  1167 @param ...
       
  1168 
       
  1169 Refer to  wscanf() for the documentation
       
  1170 
       
  1171 @see fgetwc()
       
  1172 @see scanf()
       
  1173 @see wcrtomb()
       
  1174 @see wcstod()
       
  1175 @see wcstol()
       
  1176 @see wcstoul()
       
  1177 @see wprintf()
       
  1178 
       
  1179 
       
  1180  
       
  1181 
       
  1182 @publishedAll
       
  1183 @externallyDefinedApi
       
  1184 */
       
  1185 
       
  1186 /** @fn  ungetwc(wint_t wc, FILE *stream)
       
  1187 @param wc
       
  1188 @param stream
       
  1189 @return   The ungetwc function
       
  1190 returns
       
  1191 the wide character pushed-back after the conversion, or WEOF if the operation fails.
       
  1192 If the value of the argument c character equals WEOF ,
       
  1193 the operation will fail and the stream will remain unchanged.
       
  1194 
       
  1195   The ungetwc function pushes the wide character wc (converted to an wchar_t )
       
  1196 back onto the input stream pointed to by stream .
       
  1197 The pushed-backed wide characters will be returned by subsequent reads on the
       
  1198 stream (in reverse order).
       
  1199 A successful intervening call, using the same stream, to one of the file
       
  1200 positioning functions fseek , fsetpos ,
       
  1201 or rewind will discard the pushed back wide characters.
       
  1202 
       
  1203  One wide character of push-back is guaranteed,
       
  1204 but as long as there is
       
  1205 sufficient memory, an effectively infinite amount of pushback is allowed.
       
  1206 
       
  1207  If a character is successfully pushed-back,
       
  1208 the end-of-file indicator for the stream is cleared.
       
  1209 
       
  1210 Examples:
       
  1211 @code
       
  1212 #include <stdio.h>
       
  1213 #include <wchar.h>
       
  1214 /* Illustrates how to use ungetwc API */
       
  1215 wint_t example_ungetwc(void)
       
  1216 {
       
  1217  FILE *fp = NULL;
       
  1218  wint_t wc1;
       
  1219  wint_t rval;
       
  1220  wint_t wc2;
       
  1221  /* opening the file to write*/
       
  1222  fp = fopen("input.txt","w");
       
  1223  if(fp == NULL)
       
  1224  {
       
  1225   wprintf(L"Error: File open
       
  1226 ");
       
  1227   return (-1);
       
  1228  }
       
  1229  /* character to written back to the fp */
       
  1230  wc = (wint_t) L'e';
       
  1231  /* write the character into the fp */
       
  1232  rval = ungetwc(wc, fp);
       
  1233  /* check for error */
       
  1234  if(rval == WEOF)
       
  1235  {
       
  1236         wprintf(L"ungetwc returned error!!
       
  1237 ");
       
  1238  }
       
  1239  /* Read the character from fp */
       
  1240  /* this char should be the same as the char */
       
  1241  /* that was written by ungetwc */
       
  1242  wc2 = getwc(fp);
       
  1243  /* Close the file opened for writing */
       
  1244  fclose(fp);
       
  1245  /* return the value that was written */
       
  1246  return (rval);
       
  1247 }
       
  1248 
       
  1249 @endcode
       
  1250 @see fseek()
       
  1251 @see getwc()
       
  1252 
       
  1253 
       
  1254  
       
  1255 
       
  1256 @publishedAll
       
  1257 @externallyDefinedApi
       
  1258 */
       
  1259 
       
  1260 /** @fn  vfwprintf(FILE *  stream, const wchar_t * , va_list ap)
       
  1261 @param stream
       
  1262 @param fmt0
       
  1263 @param ap
       
  1264 
       
  1265 Refer to fwprintf() for the documentation
       
  1266 
       
  1267 @see btowc()
       
  1268 @see fputws()
       
  1269 @see printf()
       
  1270 @see putwc()
       
  1271 @see setlocale()
       
  1272 @see wcsrtombs()
       
  1273 @see wscanf()
       
  1274 
       
  1275 
       
  1276  
       
  1277 
       
  1278 @publishedAll
       
  1279 @externallyDefinedApi
       
  1280 */
       
  1281 
       
  1282 /** @fn  vswprintf(wchar_t *s, size_t n, const wchar_t *fmt, va_list ap)
       
  1283 @param s
       
  1284 @param n
       
  1285 @param fmt
       
  1286 @param ap
       
  1287 
       
  1288 Refer to fwprintf() for the documentation
       
  1289 
       
  1290 @see btowc()
       
  1291 @see fputws()
       
  1292 @see printf()
       
  1293 @see putwc()
       
  1294 @see setlocale()
       
  1295 @see wcsrtombs()
       
  1296 @see wscanf()
       
  1297 
       
  1298 
       
  1299  
       
  1300 
       
  1301 @publishedAll
       
  1302 @externallyDefinedApi
       
  1303 */
       
  1304 
       
  1305 /** @fn  vwprintf(const wchar_t *  fmt, va_list ap)
       
  1306 @param fmt
       
  1307 @param ap
       
  1308 
       
  1309 Refer to fwprintf() for the documentation
       
  1310 
       
  1311 @see btowc()
       
  1312 @see fputws()
       
  1313 @see printf()
       
  1314 @see putwc()
       
  1315 @see setlocale()
       
  1316 @see wcsrtombs()
       
  1317 @see wscanf()
       
  1318 
       
  1319 
       
  1320  
       
  1321 
       
  1322 @publishedAll
       
  1323 @externallyDefinedApi
       
  1324 */
       
  1325 
       
  1326 /** @fn  wcrtomb(char *  mbchar, wchar_t wc, mbstate_t *  ps)
       
  1327 @param mbchar
       
  1328 @param wc
       
  1329 @param ps
       
  1330 @return   The wcrtomb functions returns the length (in bytes) of the multibyte sequence
       
  1331 needed to represent wc ,
       
  1332 or ( size_t-1) if wc is not a valid wide character code.
       
  1333 
       
  1334   The wcrtomb function stores a multibyte sequence representing the
       
  1335 wide character wc ,
       
  1336 including any necessary shift sequences, to the
       
  1337 character array s ,
       
  1338 storing a maximum of MB_CUR_MAX bytes.
       
  1339 
       
  1340  If s is NULL , wcrtomb behaves as if s pointed to an internal buffer and wc was a null wide character (L'\\0').
       
  1341 
       
  1342  The mbstate_t argument, ps ,
       
  1343 is used to keep track of the shift state.
       
  1344 If it is NULL , wcrtomb uses an internal, static mbstate_t
       
  1345 object, which is initialized to the initial conversion state
       
  1346 at program startup.
       
  1347 
       
  1348  The behavior of the wcrtomb is affected by LC_CTYPE category of the current locale.
       
  1349 
       
  1350 Examples:
       
  1351 @code
       
  1352 #include <stdio.h>
       
  1353 #include <stdlib.h>
       
  1354 #include <wchar.h>
       
  1355 /* Illustrates how to use wcrtomb API */
       
  1356 int example_wcrtomb(wchar_t wc)
       
  1357 {
       
  1358   char s[MAX_CUR_MAX];
       
  1359   size_t len;
       
  1360   mbstate_t mbs;
       
  1361   
       
  1362   /* represent a wide-char in a single byte*/
       
  1363   len = wcrtomb(s, wc, &mbs;);
       
  1364   /* return the number of bytes */
       
  1365   return(len);
       
  1366 }
       
  1367 
       
  1368 @endcode
       
  1369 
       
  1370 Errors:
       
  1371 
       
  1372 The wcrtomb function will fail if: 
       
  1373 [EILSEQ] An invalid wide character code was specified.  
       
  1374 [EINVAL]  The conversion state is invalid.
       
  1375 
       
  1376 
       
  1377 Limitations:
       
  1378 
       
  1379 The current implementation of wcrtomb is not affected by the LC_CTYPE category of the current locale.
       
  1380 It works only for UTF8 character set.
       
  1381 
       
  1382 @see mbrtowc()
       
  1383 @see setlocale()
       
  1384 @see wctomb()
       
  1385 
       
  1386 
       
  1387  
       
  1388 
       
  1389 @publishedAll
       
  1390 @externallyDefinedApi
       
  1391 */
       
  1392 
       
  1393 /** @fn  wcscat(wchar_t *  s1, const wchar_t *  s2)
       
  1394 @param s1
       
  1395 @param s2
       
  1396 
       
  1397 Refer to wmemchr() for the documentation
       
  1398 
       
  1399 @see memchr()
       
  1400 @see memcmp()
       
  1401 @see memcpy()
       
  1402 @see memmove()
       
  1403 @see memset()
       
  1404 @see strcat()
       
  1405 @see strchr()
       
  1406 @see strcmp()
       
  1407 @see strcpy()
       
  1408 @see strcspn()
       
  1409 @see strlen()
       
  1410 @see strncat()
       
  1411 @see strncmp()
       
  1412 @see strncpy()
       
  1413 @see strpbrk()
       
  1414 @see strrchr()
       
  1415 @see strspn()
       
  1416 @see strstr()
       
  1417 
       
  1418 
       
  1419  
       
  1420 
       
  1421 @publishedAll
       
  1422 @externallyDefinedApi
       
  1423 */
       
  1424 
       
  1425 /** @fn  wcschr(const wchar_t *s, wchar_t c)
       
  1426 @param s
       
  1427 @param c
       
  1428 
       
  1429 Refer to wmemchr() for the documentation
       
  1430 
       
  1431 @see memchr()
       
  1432 @see memcmp()
       
  1433 @see memcpy()
       
  1434 @see memmove()
       
  1435 @see memset()
       
  1436 @see strcat()
       
  1437 @see strchr()
       
  1438 @see strcmp()
       
  1439 @see strcpy()
       
  1440 @see strcspn()
       
  1441 @see strlen()
       
  1442 @see strncat()
       
  1443 @see strncmp()
       
  1444 @see strncpy()
       
  1445 @see strpbrk()
       
  1446 @see strrchr()
       
  1447 @see strspn()
       
  1448 @see strstr()
       
  1449 
       
  1450 
       
  1451  
       
  1452 
       
  1453 @publishedAll
       
  1454 @externallyDefinedApi
       
  1455 */
       
  1456 
       
  1457 /** @fn  wcscmp(const wchar_t *s1, const wchar_t *s2)
       
  1458 @param s1
       
  1459 @param s2
       
  1460 
       
  1461 Refer to wmemchr() for the documentation
       
  1462 
       
  1463 @see memchr()
       
  1464 @see memcmp()
       
  1465 @see memcpy()
       
  1466 @see memmove()
       
  1467 @see memset()
       
  1468 @see strcat()
       
  1469 @see strchr()
       
  1470 @see strcmp()
       
  1471 @see strcpy()
       
  1472 @see strcspn()
       
  1473 @see strlen()
       
  1474 @see strncat()
       
  1475 @see strncmp()
       
  1476 @see strncpy()
       
  1477 @see strpbrk()
       
  1478 @see strrchr()
       
  1479 @see strspn()
       
  1480 @see strstr()
       
  1481 
       
  1482 
       
  1483  
       
  1484 
       
  1485 @publishedAll
       
  1486 @externallyDefinedApi
       
  1487 */
       
  1488 
       
  1489 /** @fn  wcscoll(const wchar_t *ws1, const wchar_t *ws2)
       
  1490 @param ws1
       
  1491 @param ws2
       
  1492 @return   The wcscoll function
       
  1493 returns an integer greater than, equal to, or less than 0,
       
  1494 if ws1 is greater than, equal to, or less than ws2 . No return value is reserved to indicate errors;
       
  1495 callers should set errno to 0 before calling wcscoll .
       
  1496 If it is non-zero upon return from wcscoll ,
       
  1497 an error has occurred.
       
  1498 
       
  1499   The wcscoll function compares the null-terminated strings ws1 and ws2 according to the current locale collation order.
       
  1500 In the "C"
       
  1501 locale, wcscoll is equivalent to wcscmp .
       
  1502 
       
  1503 Examples:
       
  1504 @code
       
  1505 #include <wchar.h>
       
  1506 /* Illustrates how to use wcscoll API */
       
  1507 int example_wcscoll (void)
       
  1508 {  
       
  1509         /* compares the two strings */
       
  1510   if( wcscoll(L"abcdef",L"abcdeg") != L'f'-L'g')  
       
  1511    return -1;
       
  1512  return 0;
       
  1513 }
       
  1514 
       
  1515 @endcode
       
  1516 
       
  1517 Errors:
       
  1518 
       
  1519 The wcscoll function will fail if: 
       
  1520 [EILSEQ] An invalid wide character code was specified.  
       
  1521 [ENOMEM]  Cannot allocate enough memory for temporary buffers.
       
  1522 
       
  1523 
       
  1524 Limitations:
       
  1525 
       
  1526 The current implementation of wcscoll is not affected by the LC_CTYPE category of the current locale. It is equivalent to wcscmp in this implementation.
       
  1527 
       
  1528 @see setlocale()
       
  1529 @see strcoll()
       
  1530 @see wcscmp()
       
  1531 @see wcsxfrm()
       
  1532 
       
  1533 
       
  1534 Bugs:
       
  1535 
       
  1536  The current implementation of wcscoll only works in single-byte LC_CTYPE locales, and falls back to using wcscmp in locales with extended character sets. 
       
  1537 
       
  1538  
       
  1539 
       
  1540 @publishedAll
       
  1541 @externallyDefinedApi
       
  1542 */
       
  1543 
       
  1544 /** @fn  wcscpy(wchar_t *  s1, const wchar_t *  s2)
       
  1545 @param s1
       
  1546 @param s2
       
  1547 
       
  1548 Refer to wmemchr() for the documentation
       
  1549 
       
  1550 @see memchr()
       
  1551 @see memcmp()
       
  1552 @see memcpy()
       
  1553 @see memmove()
       
  1554 @see memset()
       
  1555 @see strcat()
       
  1556 @see strchr()
       
  1557 @see strcmp()
       
  1558 @see strcpy()
       
  1559 @see strcspn()
       
  1560 @see strlen()
       
  1561 @see strncat()
       
  1562 @see strncmp()
       
  1563 @see strncpy()
       
  1564 @see strpbrk()
       
  1565 @see strrchr()
       
  1566 @see strspn()
       
  1567 @see strstr()
       
  1568 
       
  1569 
       
  1570  
       
  1571 
       
  1572 @publishedAll
       
  1573 @externallyDefinedApi
       
  1574 */
       
  1575 
       
  1576 
       
  1577 /** @fn  wcscspn(const wchar_t *s1, const wchar_t *s2)
       
  1578 @param s1
       
  1579 @param s2
       
  1580 
       
  1581 Refer to wmemchr() for the documentation
       
  1582 
       
  1583 @see memchr()
       
  1584 @see memcmp()
       
  1585 @see memcpy()
       
  1586 @see memmove()
       
  1587 @see memset()
       
  1588 @see strcat()
       
  1589 @see strchr()
       
  1590 @see strcmp()
       
  1591 @see strcpy()
       
  1592 @see strcspn()
       
  1593 @see strlen()
       
  1594 @see strncat()
       
  1595 @see strncmp()
       
  1596 @see strncpy()
       
  1597 @see strpbrk()
       
  1598 @see strrchr()
       
  1599 @see strspn()
       
  1600 @see strstr()
       
  1601 
       
  1602 
       
  1603  
       
  1604 
       
  1605 @publishedAll
       
  1606 @externallyDefinedApi
       
  1607 */
       
  1608 
       
  1609 
       
  1610 /** @fn  wcsftime(wchar_t *  wcs, size_t maxsize, const wchar_t *  format, const struct tm *  timeptr)
       
  1611 @param wcs
       
  1612 @param maxsize
       
  1613 @param format
       
  1614 @param timeptr
       
  1615 @return   wcsftime shall return the number of wide-character codes placed into the array pointed to by wcs , not including the terminating null wide-character code. Otherwise, zero is returned and the contents of the array are unspecified.
       
  1616 
       
  1617   The wcsftime function is equivalent to the strftime function except for the types of its arguments.
       
  1618 Refer to  strftime() for a detailed description.
       
  1619 
       
  1620 Examples:
       
  1621 @code
       
  1622 #include <wchar.h>
       
  1623 #include <time.h>
       
  1624 /* Illustatrates how to use wcsftime API */
       
  1625 int example_wcsftime()
       
  1626 {  
       
  1627   wchar_t datestring[50];
       
  1628   int retval;
       
  1629   struct tm *tm;
       
  1630  
       
  1631   /* get the current time */
       
  1632   time_t t = time(NULL);
       
  1633  
       
  1634   /* get the local time from the current time */
       
  1635   tm = localtime(&t;);
       
  1636   /* convert date and time to a wide-character string */
       
  1637   retval = wcsftime(datestring,15,L"%A",tm);
       
  1638  
       
  1639   /* If the total number of resulting wide-character codes */
       
  1640   /* including the terminating null wide-character code is */
       
  1641   /* no more than maxsize, wcsftime() shall return the number */
       
  1642   /* of wide-character codes placed into the array pointed to */
       
  1643   /* by wcs, not including the terminating null wide-character */
       
  1644   /* code. Otherwise, zero is returned and the contents of the */
       
  1645   /* array are unspecified.*/
       
  1646   return retval;
       
  1647 }
       
  1648 
       
  1649 @endcode
       
  1650  
       
  1651  
       
  1652 
       
  1653 @publishedAll
       
  1654 @externallyDefinedApi
       
  1655 */
       
  1656 
       
  1657 
       
  1658 /** @fn  wcslen(const wchar_t *s)
       
  1659 @param s
       
  1660 
       
  1661 Refer to wmemchr() for the documentation
       
  1662 
       
  1663 @see memchr()
       
  1664 @see memcmp()
       
  1665 @see memcpy()
       
  1666 @see memmove()
       
  1667 @see memset()
       
  1668 @see strcat()
       
  1669 @see strchr()
       
  1670 @see strcmp()
       
  1671 @see strcpy()
       
  1672 @see strcspn()
       
  1673 @see strlen()
       
  1674 @see strncat()
       
  1675 @see strncmp()
       
  1676 @see strncpy()
       
  1677 @see strpbrk()
       
  1678 @see strrchr()
       
  1679 @see strspn()
       
  1680 @see strstr()
       
  1681 
       
  1682 
       
  1683  
       
  1684 
       
  1685 @publishedAll
       
  1686 @externallyDefinedApi
       
  1687 */
       
  1688 
       
  1689 
       
  1690 
       
  1691 /** @fn  wcsncat(wchar_t *  s1, const wchar_t *  s2, size_t n)
       
  1692 @param s1
       
  1693 @param s2
       
  1694 @param n
       
  1695 
       
  1696 Refer to wmemchr() for the documentation
       
  1697 
       
  1698 @see memchr()
       
  1699 @see memcmp()
       
  1700 @see memcpy()
       
  1701 @see memmove()
       
  1702 @see memset()
       
  1703 @see strcat()
       
  1704 @see strchr()
       
  1705 @see strcmp()
       
  1706 @see strcpy()
       
  1707 @see strcspn()
       
  1708 @see strlen()
       
  1709 @see strncat()
       
  1710 @see strncmp()
       
  1711 @see strncpy()
       
  1712 @see strpbrk()
       
  1713 @see strrchr()
       
  1714 @see strspn()
       
  1715 @see strstr()
       
  1716 
       
  1717 
       
  1718  
       
  1719 
       
  1720 @publishedAll
       
  1721 @externallyDefinedApi
       
  1722 */
       
  1723 
       
  1724 
       
  1725 
       
  1726 /** @fn  wcsncmp(const wchar_t *s1, const wchar_t * s2, size_t n)
       
  1727 @param s1
       
  1728 @param s2
       
  1729 @param n
       
  1730 
       
  1731 Refer to wmemchr() for the documentation
       
  1732 
       
  1733 @see memchr()
       
  1734 @see memcmp()
       
  1735 @see memcpy()
       
  1736 @see memmove()
       
  1737 @see memset()
       
  1738 @see strcat()
       
  1739 @see strchr()
       
  1740 @see strcmp()
       
  1741 @see strcpy()
       
  1742 @see strcspn()
       
  1743 @see strlen()
       
  1744 @see strncat()
       
  1745 @see strncmp()
       
  1746 @see strncpy()
       
  1747 @see strpbrk()
       
  1748 @see strrchr()
       
  1749 @see strspn()
       
  1750 @see strstr()
       
  1751 
       
  1752 
       
  1753  
       
  1754 
       
  1755 @publishedAll
       
  1756 @externallyDefinedApi
       
  1757 */
       
  1758 
       
  1759 
       
  1760 /** @fn  wcsncpy(wchar_t *  dst, const wchar_t *  src, size_t n)
       
  1761 @param dst
       
  1762 @param src
       
  1763 @param n
       
  1764 
       
  1765 Refer to wmemchr() for the documentation
       
  1766 
       
  1767 @see memchr()
       
  1768 @see memcmp()
       
  1769 @see memcpy()
       
  1770 @see memmove()
       
  1771 @see memset()
       
  1772 @see strcat()
       
  1773 @see strchr()
       
  1774 @see strcmp()
       
  1775 @see strcpy()
       
  1776 @see strcspn()
       
  1777 @see strlen()
       
  1778 @see strncat()
       
  1779 @see strncmp()
       
  1780 @see strncpy()
       
  1781 @see strpbrk()
       
  1782 @see strrchr()
       
  1783 @see strspn()
       
  1784 @see strstr()
       
  1785 
       
  1786 
       
  1787  
       
  1788 
       
  1789 @publishedAll
       
  1790 @externallyDefinedApi
       
  1791 */
       
  1792 
       
  1793 
       
  1794 /** @fn  wcspbrk(const wchar_t *s1, const wchar_t *s2)
       
  1795 @param s1
       
  1796 @param s2
       
  1797 
       
  1798 Refer to wmemchr() for the documentation
       
  1799 
       
  1800 @see memchr()
       
  1801 @see memcmp()
       
  1802 @see memcpy()
       
  1803 @see memmove()
       
  1804 @see memset()
       
  1805 @see strcat()
       
  1806 @see strchr()
       
  1807 @see strcmp()
       
  1808 @see strcpy()
       
  1809 @see strcspn()
       
  1810 @see strlen()
       
  1811 @see strncat()
       
  1812 @see strncmp()
       
  1813 @see strncpy()
       
  1814 @see strpbrk()
       
  1815 @see strrchr()
       
  1816 @see strspn()
       
  1817 @see strstr()
       
  1818 
       
  1819 
       
  1820  
       
  1821 
       
  1822 @publishedAll
       
  1823 @externallyDefinedApi
       
  1824 */
       
  1825 
       
  1826 
       
  1827 /** @fn  wcsrchr(const wchar_t *s, wchar_t c)
       
  1828 @param s
       
  1829 @param c
       
  1830 
       
  1831 Refer to wmemchr() for the documentation
       
  1832 
       
  1833 @see memchr()
       
  1834 @see memcmp()
       
  1835 @see memcpy()
       
  1836 @see memmove()
       
  1837 @see memset()
       
  1838 @see strcat()
       
  1839 @see strchr()
       
  1840 @see strcmp()
       
  1841 @see strcpy()
       
  1842 @see strcspn()
       
  1843 @see strlen()
       
  1844 @see strncat()
       
  1845 @see strncmp()
       
  1846 @see strncpy()
       
  1847 @see strpbrk()
       
  1848 @see strrchr()
       
  1849 @see strspn()
       
  1850 @see strstr()
       
  1851 
       
  1852 
       
  1853  
       
  1854 
       
  1855 @publishedAll
       
  1856 @externallyDefinedApi
       
  1857 */
       
  1858 
       
  1859 
       
  1860 /** @fn  wcsrtombs(char *  dst, const wchar_t **  src, size_t len, mbstate_t *  ps)
       
  1861 @param dst
       
  1862 @param src
       
  1863 @param len
       
  1864 @param ps
       
  1865 
       
  1866 Note: This description also covers the following functions -
       
  1867  wcsnrtombs() 
       
  1868 
       
  1869 @return   The wcsrtombs and wcsnrtombs functions return the number of bytes stored in
       
  1870 the array pointed to by dst (not including any terminating null), if successful, otherwise it returns ( size_t-1) .
       
  1871 
       
  1872   The wcsrtombs function converts a string of wide characters indirectly pointed to by src to a corresponding multibyte character string stored in the array
       
  1873 pointed to by dst .
       
  1874 No more than len bytes are written to dst .
       
  1875 
       
  1876  If dst is NULL ,
       
  1877 no characters are stored.
       
  1878 
       
  1879  If dst is not NULL ,
       
  1880 the pointer pointed to by src is updated to point to the character after the one that conversion stopped at.
       
  1881 If conversion stops because a null character is encountered, *src is set to NULL .
       
  1882 
       
  1883  The mbstate_t
       
  1884 argument, ps ,
       
  1885 is used to keep track of the shift state.
       
  1886 If it is NULL , wcsrtombs uses an internal, static mbstate_t
       
  1887 object, which is initialized to the initial conversion state
       
  1888 at program startup.
       
  1889 
       
  1890  The wcsnrtombs function behaves identically to wcsrtombs ,
       
  1891 except that conversion stops after reading at most nwc characters from the buffer pointed to by src .
       
  1892 The behavior of the wcsrtombs and wcsrntombs is affected by LC_CTYPE category of the current locale.
       
  1893 
       
  1894 Examples:
       
  1895 @code
       
  1896 #include <stdlib.h>
       
  1897 #include <wchar.h>
       
  1898 /* Illustrates how to use wcsrtombs API */
       
  1899 size_t example_wcsrtombs(wchar_t *wcs, char *s, size_t n)
       
  1900 {
       
  1901  size_t len;
       
  1902  mstate_t mbs;
       
  1903  /* converting multibyte string to a wide-char string */
       
  1904  len = wcsrtombs(s, &wcs;, n, &mbs;);
       
  1905  /* returning no of bytes that make up the multibyte sequence */
       
  1906  return (len;);
       
  1907 }
       
  1908 
       
  1909 @endcode
       
  1910 @code
       
  1911 #include <stdlib.h>
       
  1912 #include <wchar.h>
       
  1913 /* Illustrates how to use wcsnrtombs API */
       
  1914 size_t example_wcsnrtombs(wchar_t *wcs, char *s, size_t n, szie_t nmwc)
       
  1915 {
       
  1916  size_t len;
       
  1917  mstate_t mbs;
       
  1918  /* converting multibyte string to a wide-char string */
       
  1919  len = wcsrtombs(s, &wcs;, nwc, n, &mbs;);
       
  1920  /* returning no of bytes that make up the multibyte sequence */
       
  1921  return (len;);
       
  1922 }
       
  1923 
       
  1924 @endcode
       
  1925 
       
  1926 Limitations:
       
  1927 
       
  1928 The current implementation of wcsrtombs and wcsnrtombs is not affected by the LC_CTYPE category of the current locale.
       
  1929 It works only for UTF8 character set.
       
  1930 
       
  1931 @see mbsrtowcs()
       
  1932 @see wcrtomb()
       
  1933 @see wcstombs()
       
  1934 
       
  1935 
       
  1936  
       
  1937 
       
  1938 @publishedAll
       
  1939 @externallyDefinedApi
       
  1940 */
       
  1941 
       
  1942 
       
  1943 /** @fn  wcsspn(const wchar_t *s1, const wchar_t *s2)
       
  1944 @param s1
       
  1945 @param s2
       
  1946 
       
  1947 Refer to wmemchr() for the documentation
       
  1948 
       
  1949 @see memchr()
       
  1950 @see memcmp()
       
  1951 @see memcpy()
       
  1952 @see memmove()
       
  1953 @see memset()
       
  1954 @see strcat()
       
  1955 @see strchr()
       
  1956 @see strcmp()
       
  1957 @see strcpy()
       
  1958 @see strcspn()
       
  1959 @see strlen()
       
  1960 @see strncat()
       
  1961 @see strncmp()
       
  1962 @see strncpy()
       
  1963 @see strpbrk()
       
  1964 @see strrchr()
       
  1965 @see strspn()
       
  1966 @see strstr()
       
  1967 
       
  1968 
       
  1969  
       
  1970 
       
  1971 @publishedAll
       
  1972 @externallyDefinedApi
       
  1973 */
       
  1974 
       
  1975 
       
  1976 
       
  1977 /** @fn  wcsstr(const wchar_t *  s, const wchar_t *  find)
       
  1978 @param s
       
  1979 @param find
       
  1980 
       
  1981 Refer to wmemchr() for the documentation
       
  1982 
       
  1983 @see memchr()
       
  1984 @see memcmp()
       
  1985 @see memcpy()
       
  1986 @see memmove()
       
  1987 @see memset()
       
  1988 @see strcat()
       
  1989 @see strchr()
       
  1990 @see strcmp()
       
  1991 @see strcpy()
       
  1992 @see strcspn()
       
  1993 @see strlen()
       
  1994 @see strncat()
       
  1995 @see strncmp()
       
  1996 @see strncpy()
       
  1997 @see strpbrk()
       
  1998 @see strrchr()
       
  1999 @see strspn()
       
  2000 @see strstr()
       
  2001 
       
  2002 
       
  2003  
       
  2004 
       
  2005 @publishedAll
       
  2006 @externallyDefinedApi
       
  2007 */
       
  2008 
       
  2009 
       
  2010 
       
  2011 /** @fn  wcsxfrm(wchar_t *  dest, const wchar_t *  src, size_t len)
       
  2012 @param dest
       
  2013 @param src
       
  2014 @param len
       
  2015 @return   Upon successful completion, wcsxfrm returns the length of the transformed string not including
       
  2016 the terminating null character.
       
  2017 If this value is len or more, the contents of dest are indeterminate.
       
  2018 
       
  2019   The wcsxfrm function transforms a null-terminated wide character string pointed to by src according to the current locale collation order
       
  2020 then copies the transformed string
       
  2021 into dest .
       
  2022 No more than len wide characters are copied into dest ,
       
  2023 including the terminating null character added.
       
  2024 If len is set to 0
       
  2025 (it helps to determine an actual size needed
       
  2026 for transformation), dest is permitted to be a NULL pointer.
       
  2027 
       
  2028  Comparing two strings using wcscmp after wcsxfrm is equivalent to comparing
       
  2029 two original strings with wcscoll .
       
  2030 
       
  2031 Examples:
       
  2032 @code
       
  2033 #include <stdlib.h>
       
  2034 #include <wchar.h>
       
  2035 /* Illustrates how to use wcpcpy API */
       
  2036 int example_wcpcpy()
       
  2037 { 
       
  2038   /* input string for which length to be found */
       
  2039  wchar_t *src = L"testcase";
       
  2040   wchar_t *dest = NULL;
       
  2041   int      length; 
       
  2042     
       
  2043   /* allocate memory for the destination string */
       
  2044   dest = (wchar_t *)malloc((wcslen(src)+1)*sizeof(wchar_t));
       
  2045     
       
  2046   /*  perform the operation */
       
  2047   if(dest != NULL)
       
  2048    length = wcsxfrm(dest,src,9);
       
  2049   else
       
  2050   { 
       
  2051    wprintf(L"ERROR : Cannot allocate memory");
       
  2052   return -1;
       
  2053   } 
       
  2054   return length;
       
  2055 }
       
  2056 
       
  2057 @endcode
       
  2058 
       
  2059 Limitations:
       
  2060 
       
  2061 The current implementation of wcsxfrm works only for "C" locale.
       
  2062 
       
  2063 @see setlocale()
       
  2064 @see strxfrm()
       
  2065 @see wcscmp()
       
  2066 @see wcscoll()
       
  2067 
       
  2068 
       
  2069 Bugs:
       
  2070 
       
  2071  The current implementation of wcsxfrm only works in single-byte LC_CTYPE locales, and falls back to using wcsncpy in locales with extended character sets. Comparing two strings using wcscmp after wcsxfrm is not always equivalent to comparison with wcscoll ; wcsxfrm only stores information about primary collation weights into dst ,
       
  2072 whereas wcscoll compares characters using both primary and secondary weights. 
       
  2073 
       
  2074  
       
  2075 
       
  2076 @publishedAll
       
  2077 @externallyDefinedApi
       
  2078 */
       
  2079 
       
  2080 
       
  2081 
       
  2082 /** @fn  wctob(wint_t c)
       
  2083 @param c
       
  2084 
       
  2085 Refer to btowc() for the documentation
       
  2086 
       
  2087 @see mbrtowc()
       
  2088 @see wcrtomb()
       
  2089 
       
  2090 
       
  2091  
       
  2092 
       
  2093 @publishedAll
       
  2094 @externallyDefinedApi
       
  2095 */
       
  2096 
       
  2097 
       
  2098 
       
  2099 /** @fn  wcstod(const wchar_t *  nptr, wchar_t **  endptr)
       
  2100 @param nptr
       
  2101 @param endptr
       
  2102 
       
  2103 Refer to wcstof() for the documentation
       
  2104 
       
  2105 @see strtod()
       
  2106 @see wcstol()
       
  2107 
       
  2108 
       
  2109  
       
  2110 
       
  2111 @publishedAll
       
  2112 @externallyDefinedApi
       
  2113 */
       
  2114 
       
  2115 
       
  2116 
       
  2117 /** @fn  wcstok(wchar_t *  s, const wchar_t *  delim, wchar_t **  last)
       
  2118 @param s
       
  2119 @param delim
       
  2120 @param last
       
  2121 @return   The wcstok function
       
  2122 returns a pointer to the beginning of each subsequent token in the string,
       
  2123 after replacing the token itself with a null wide character (L'//0').
       
  2124 When no more tokens remain, a null pointer is returned.
       
  2125 
       
  2126   The wcstok function
       
  2127 is used to isolate sequential tokens in a null-terminated wide character
       
  2128 string, s.
       
  2129 These tokens are separated in the string by at least one of the
       
  2130 characters in delim .
       
  2131 The first time that wcstok is called, s should be specified; subsequent calls, wishing to obtain further tokens
       
  2132 from the same string, should pass a null pointer instead.
       
  2133 The separator string, delim ,
       
  2134 must be supplied each time, and may change between calls.
       
  2135 The context pointer last must be provided on each call.
       
  2136 
       
  2137  The wcstok function is the wide character counterpart of the strtok_r function.
       
  2138 
       
  2139 
       
  2140 Examples:
       
  2141 
       
  2142 @code
       
  2143 #include <wchar.h>
       
  2144 /* Illustrates how to use wcstok API */
       
  2145 int example_wcstok()
       
  2146 {  
       
  2147   /* source wide character string */
       
  2148  const wchar_t *seps = L"onetwhr";
       
  2149  wchar_t *last, *tok, text[] = L"onetwothree";
       
  2150               
       
  2151  tok = wcstok(text, seps, &last;);
       
  2152  if(tok == NULL)
       
  2153    return 0;
       
  2154  else
       
  2155     return 1;
       
  2156 }
       
  2157 
       
  2158 @endcode
       
  2159 
       
  2160 Examples:
       
  2161 
       
  2162  The following code fragment splits a wide character string on ASCII space, tab and newline characters and writes the tokens to
       
  2163 standard output:
       
  2164 
       
  2165 @code
       
  2166 const wchar_t *seps = L" 	
       
  2167 ";
       
  2168 wchar_t *last, *tok, text[] = L" 
       
  2169 one	two		three  
       
  2170 ";
       
  2171 for (tok = wcstok(text, seps, &last;); tok != NULL;
       
  2172     tok = wcstok(NULL, seps, &last;))
       
  2173         wprintf(L"%ls
       
  2174 ", tok);
       
  2175 
       
  2176 @endcode
       
  2177 @see strtok()
       
  2178 @see wcschr()
       
  2179 @see wcscspn()
       
  2180 @see wcspbrk()
       
  2181 @see wcsrchr()
       
  2182 @see wcsspn()
       
  2183 
       
  2184 
       
  2185 Some early implementations of wcstok omit the context pointer argument, last, and maintain state across calls in a static variable like strtok does.
       
  2186 
       
  2187 
       
  2188 @publishedAll
       
  2189 @externallyDefinedApi
       
  2190 */
       
  2191 
       
  2192 
       
  2193 
       
  2194 /** @fn  wcstol(const wchar_t *  nptr, wchar_t **  endptr, int base)
       
  2195 @param nptr
       
  2196 @param endptr
       
  2197 @param base
       
  2198 
       
  2199 Note: This description also covers the following functions -
       
  2200  wcstoul()  wcstoll()  wcstoull()  wcstoq()  wcstouq()  wcstoimax()  wcstoumax() 
       
  2201 
       
  2202 @return   errno may be set to indicate the error. If the correct value is outside 
       
  2203   the range of representable values {LONG_MIN}, {LONG_MAX}, {LLONG_MIN}, or {LLONG_MAX} 
       
  2204   is returned (according to the sign of the value) and errno set to [ERANGE].
       
  2205 
       
  2206   The wcstol , wcstoul , wcstoll , wcstoull , wcstoimax and wcstoumax functions are wide-character versions of the strtol , strtoul , strtoll , strtoull , strtoimax and strtoumax functions, respectively.
       
  2207 Refer to their manual pages (for example strtol )
       
  2208 for details.
       
  2209 The wcstoq and wcstouq are respectively equivalent to wcstoll and wcstoull.
       
  2210 
       
  2211 Examples:
       
  2212 @code
       
  2213 #include <wchar.h>
       
  2214 /* Illustrates how to use wcstoumax API */
       
  2215 uintmax_t example_wcstoumax()
       
  2216 {  
       
  2217   /* src string */
       
  2218  wchar_t *src = L"478";
       
  2219   uintmax_t longVal;
       
  2220     
       
  2221   /* convert the wide character string to uintmax_t */
       
  2222   longVal = wcstoumax(src,NULL,10);
       
  2223   /* return the converted long value */
       
  2224  return longVal;
       
  2225 }
       
  2226 
       
  2227 @endcode
       
  2228 @code
       
  2229 #include <wchar.h>
       
  2230 /* Illustrates how to use wcstoimax API */
       
  2231 intmax_t example_wcstoimax()
       
  2232 {  
       
  2233   /* src string */
       
  2234  wchar_t *src = L"478";
       
  2235   intmax_t longVal;
       
  2236     
       
  2237   /* convert the wide character string to intmax_t */
       
  2238   longVal = wcstoimax(src,NULL,10);
       
  2239   /* return the converted long value */
       
  2240  return longVal;
       
  2241 }
       
  2242 
       
  2243 @endcode
       
  2244 @code
       
  2245 #include <wchar.h>
       
  2246 /* Illustrates how to use wcstol API */
       
  2247 long example_wcstol()
       
  2248 {  
       
  2249   /* src string */
       
  2250  wchar_t *src = L"478";
       
  2251   long  longVal;
       
  2252     
       
  2253   /* call the API to convert src string to long value */
       
  2254   longVal = wcstol(src,NULL,10);
       
  2255   /* return the converted long value */
       
  2256  return longVal;
       
  2257 }
       
  2258 
       
  2259 @endcode
       
  2260 @code
       
  2261 #include <wchar.h>
       
  2262 /* Illustrates how to use wcstoul API */
       
  2263 unsigned long example_wcstoul()
       
  2264 {  
       
  2265   /* src string */
       
  2266   wchar_t *src = L"478";
       
  2267   unsigned long  longVal;
       
  2268     
       
  2269   /* call the API to convert src string to unsigned */
       
  2270   /* long value */
       
  2271   longVal = wcstoul(src,NULL,10);
       
  2272   /* return the converted long value */
       
  2273  return longVal;
       
  2274 }
       
  2275 
       
  2276 @endcode
       
  2277 @code
       
  2278 #include <wchar.h>
       
  2279 /* Illustatrates how to use wcstoll API */
       
  2280 long long example_wcstoll()
       
  2281 { 
       
  2282   /* input string for which length to be found */
       
  2283  wchar_t *src = L"478";
       
  2284  long long  longVal;
       
  2285     
       
  2286   /* perform the conversion operation from wide */
       
  2287   /* char string to long long value */
       
  2288   longVal = wcstoll(src,NULL,10);
       
  2289      
       
  2290   return longVal;
       
  2291 }
       
  2292 
       
  2293 @endcode
       
  2294 @code
       
  2295 #include <wchar.h>
       
  2296 /* Illustatrates how to use wcstoull API */
       
  2297 unsigned long long example_wcstoull()
       
  2298 { 
       
  2299   /* input string for which length to be found */
       
  2300  wchar_t *src = L"478";
       
  2301   unsigned long long  longVal;
       
  2302     
       
  2303   /* perform the conversion operation from wide */
       
  2304   /*char string to unsigned long long value */
       
  2305   longVal = wcstoull(src,NULL,10);
       
  2306      
       
  2307   return longVal;
       
  2308 }
       
  2309 
       
  2310 @endcode
       
  2311 @code
       
  2312 #include <wchar.h>
       
  2313 /* Illustrates how to use wcstoq API */
       
  2314 long long int example_wcstoq()
       
  2315 { 
       
  2316  /* src string that contains decimal digits */
       
  2317  wchar_t *src = L"478";
       
  2318  long long int  longVal;
       
  2319  /* convert the decimal wide char string to long long int value */
       
  2320  longVal = wcstoq(src,NULL,10);
       
  2321  /* return longVal and its value should be 478 */
       
  2322  return longVal;
       
  2323 }
       
  2324 
       
  2325 @endcode
       
  2326 @code
       
  2327 #include <wchar.h>
       
  2328 /* Illustrates how to use wcstouq API */
       
  2329 unsigned long long int example_wcstouq()
       
  2330 { 
       
  2331  /* src string that contains decimal digits */
       
  2332  wchar_t *src = L"478";
       
  2333  unsigned long long int  longVal;
       
  2334  /* convert the decimal wide char string  to unsigned long long int value */
       
  2335  longVal = wcstouq(src,NULL,10);
       
  2336  /* return longVal, which should be 478 */   
       
  2337  return longVal;
       
  2338 }
       
  2339 
       
  2340 @endcode
       
  2341 @see strtol()
       
  2342 @see strtoul()
       
  2343 
       
  2344 
       
  2345  
       
  2346 
       
  2347 @publishedAll
       
  2348 @externallyDefinedApi
       
  2349 */
       
  2350 
       
  2351 
       
  2352 
       
  2353 /** @fn  wcstoul(const wchar_t *  nptr, wchar_t **  endptr, int base)
       
  2354 @param nptr
       
  2355 @param endptr
       
  2356 @param base
       
  2357 
       
  2358 Refer to wcstol() for the documentation
       
  2359 
       
  2360 @see strtol()
       
  2361 @see strtoul()
       
  2362 
       
  2363 
       
  2364  
       
  2365 
       
  2366 @publishedAll
       
  2367 @externallyDefinedApi
       
  2368 */
       
  2369 
       
  2370 
       
  2371 
       
  2372 /** @fn  wmemchr(const wchar_t *s, wchar_t c, size_t n)
       
  2373 @param s
       
  2374 @param c
       
  2375 @param n
       
  2376 
       
  2377 Note: This description also covers the following functions -
       
  2378  wmemcmp()  wmemcpy()  wmemmove()  wmemset()  wcscat()  wcschr()  wcscmp()  wcscpy()  wcscspn()  wcslcat()  wcslcpy()  wcslen()  wcsncat()  wcsncmp()  wcsncpy()  wcspbrk()  wcsrchr()  wcsspn()  wcsstr() 
       
  2379 
       
  2380 @return   wmemchr function returns a pointer to the first occurrence of c among the n wide characters starting at s , or NULL if c does not occur among these. wcslcpy function returns wcslen(src); if retval \>= siz, truncation occurred wcslcat function returns wcslen(initial dst) + wcslen(src); if retval \>= sizet,
       
  2381 
       
  2382  
       
  2383 
       
  2384 
       
  2385 
       
  2386  The function wcslcat() appends a copy of the wide-character string
       
  2387 pointed to by s2 (including the terminating null wide-character code) to the end
       
  2388 of the wide-character string pointed to by s1. The initial wide-character code
       
  2389 of string pointed to by s2 overwrites the null wide-character code at the end of s1. wcslcat() concatenates at most n-1 characters.
       
  2390 
       
  2391 
       
  2392 
       
  2393  The function wcslcpy() copies the wide-character string pointed to by s2 (including the terminating null wide-character code) into the array pointed to by s1.
       
  2394 It will copy at most n-1 characters.
       
  2395 
       
  2396 
       
  2397 
       
  2398  The functions implement string manipulation operations over wide character
       
  2399 strings.
       
  2400 For a detailed description, refer to documents for the respective single-byte
       
  2401 counterpart, such as memchr .
       
  2402 
       
  2403 Examples:
       
  2404 @code
       
  2405 #include <wchar.h>
       
  2406 /* Illustrates how to use wmemcmp API */
       
  2407 int example_wmemcmp()
       
  2408 {  
       
  2409   /* source wide character string */
       
  2410   wchar_t *ws1 = L"test case",*ws2 = L"test case";
       
  2411   int retval;
       
  2412  /* comparing the 2 wide-char strings */
       
  2413  retval = wmemcmp(ws1,ws2,500);
       
  2414   /* checking for the return value */
       
  2415   if(retval != 0)
       
  2416    return 1;
       
  2417   else
       
  2418    return 0;
       
  2419 }
       
  2420 
       
  2421 @endcode
       
  2422 @code
       
  2423 #include <wchar.h>
       
  2424 /* Illustrates how to use wmemcpy API */
       
  2425 int example_wmemcpy()
       
  2426 {  
       
  2427   /* source wide character string */
       
  2428   wchar_t ws1[50]=L"abcdefghij",*retval,ws2[50]=L"test";
       
  2429   /* compare the strings */
       
  2430   retval = wmemcpy(ws1,ws2,6);
       
  2431   for(int i=0;i<6;i++)
       
  2432   {
       
  2433    if(retval[i] != ws2[i] || ws1[i] != ws2[i])
       
  2434     return 1;
       
  2435   }
       
  2436   return 0;
       
  2437 }
       
  2438 
       
  2439 @endcode
       
  2440 @code
       
  2441 #include <wchar.h>
       
  2442 /* Illustrates how to use wmemmove API */
       
  2443 int example_wmemmove()
       
  2444 {  
       
  2445   /* source wide character string */
       
  2446   wchar_t ws1[50]=L"abcdefghij",*retval,ws2[5] = L"abc";
       
  2447   int i;
       
  2448  
       
  2449   /* move the contents of ws2 to ws1 */
       
  2450   retval = wmemmove(ws1,ws2,3);
       
  2451  /* compare the contents */
       
  2452   for(i=0;i<3;i++)
       
  2453   {
       
  2454    if(ws1[i] != ws2[i])
       
  2455      return 1;
       
  2456   }
       
  2457   return 0;
       
  2458 }
       
  2459 
       
  2460 @endcode
       
  2461 @code
       
  2462 #include <wchar.h>
       
  2463 /* Illustrates how to use wmemset API */
       
  2464 int example_wmemset()
       
  2465 {  
       
  2466   /* source wide character string */
       
  2467   wchar_t ws1[50]=L"abcdefghij", *retval;
       
  2468   int i;
       
  2469   /* setting the wide-string ws1 */
       
  2470   retval = wmemset(ws1,L'a',7);
       
  2471  /* comparing the contents */
       
  2472   for(i=0;i<7;i++)
       
  2473   {
       
  2474    if(ws1[i] != L'a')
       
  2475      return 1;
       
  2476   }
       
  2477   return 0;
       
  2478 }
       
  2479 
       
  2480 @endcode
       
  2481 @code
       
  2482 #include <wchar.h>
       
  2483 /* Illustrates how to use wmemchr API */
       
  2484 wchar_t *example_wmemchr(void)
       
  2485 {
       
  2486  wchar_t *wcs = L"lmnopqr";
       
  2487  size_t n;
       
  2488  wchar_t wc = L'p';
       
  2489  wchar_t *res;
       
  2490  /* number of wide characters to be searched */
       
  2491  n = wcslen(wcs);
       
  2492  /* search for the occurence of wchar wc in wide-char string wcs */
       
  2493  res = wmemchr(wcs, wc, n);
       
  2494  /* return the pointer */
       
  2495  return(res);
       
  2496 }
       
  2497 
       
  2498 @endcode
       
  2499 @code
       
  2500 #include <wchar.h>
       
  2501 /* Illustrates how to use wcslen API */
       
  2502 size_t example_wcslen(void)
       
  2503 {
       
  2504  wchar_t *wcs = L"defqwert";
       
  2505  size_t len;
       
  2506  /* compute the length of the wide-char string */
       
  2507  len = wcslen(wcs);
       
  2508  /* return the length of the wide-char string */
       
  2509  return (len);
       
  2510 }
       
  2511 
       
  2512 @endcode
       
  2513 @code
       
  2514 #include <wchar.h>
       
  2515 /* Illustrates how to use wcscat API */
       
  2516 void example_wcscat(void)
       
  2517 {
       
  2518  wchar_t wcs[100] = L"abc";
       
  2519  wchar_t *wcs1 = L"def";
       
  2520  wchar *res;
       
  2521  /* concatenate the two strings */
       
  2522  res = wcscat(wcs, wcs1);
       
  2523  /* print the string that resulted from concatenation */
       
  2524  wprintf(L"Output wide-char string is : %ls
       
  2525 ",res);
       
  2526 }
       
  2527 
       
  2528 @endcode
       
  2529  Output
       
  2530 @code
       
  2531 abcdef
       
  2532 
       
  2533 @endcode
       
  2534 @code
       
  2535 #include <wchar.h>
       
  2536 /* Illustrates how to use wcschr API */
       
  2537 int example_ wcschr ()
       
  2538 {  
       
  2539   /* source wide character string */
       
  2540  wchar_t search_char[15] = L"&&&&$%%%%%TTU";
       
  2541  wchar_t *wstr;
       
  2542  int i ;
       
  2543  for(i = 0 ; search_char[i]; i++)
       
  2544  {
       
  2545    wstr = wcschr(L"", search_char[i]);
       
  2546    if(wstr != NULL)
       
  2547    {
       
  2548     return -1;
       
  2549    }
       
  2550  }
       
  2551  return 0;
       
  2552 }
       
  2553 
       
  2554 @endcode
       
  2555 @code
       
  2556 int example_wcscmp()
       
  2557 {  
       
  2558   /* source wide character string */
       
  2559  wchar_t *wcs1 = "string1";
       
  2560  wchar_t *wcs2 = "string2";
       
  2561  int i ;
       
  2562  i = wcscmp(wcs1, wcs2);
       
  2563  if( i == 0)
       
  2564   return -1;
       
  2565  
       
  2566  i = wcscmp(wcs1, L"string1");
       
  2567  if(i != 0)
       
  2568   return -1;
       
  2569  
       
  2570  return 0;
       
  2571 }
       
  2572 
       
  2573 @endcode
       
  2574 @code
       
  2575 #include <wchar.h>
       
  2576 /* Illustrates how to use wcscpy API */
       
  2577 int example_wcscpy ()
       
  2578 {  
       
  2579   /* source wide character string */
       
  2580   wchar_t wcs1[15];
       
  2581   wchar_t *res;
       
  2582  
       
  2583   /* copy the wide-char string into wcs1*/
       
  2584   res = wcscpy(wcs1, L"Hello world");
       
  2585  
       
  2586   if(wcscmp(res, L"Hello world") != 0)
       
  2587    return -1;
       
  2588  
       
  2589   return 0;
       
  2590 }
       
  2591 
       
  2592 @endcode
       
  2593 @code
       
  2594 #include <wchar.h>
       
  2595 /* Illustrates how to use wcslcpy API */
       
  2596 int example_wcslcpy ()
       
  2597 {  
       
  2598   /* source wide character string */
       
  2599   wchar_t src[25] = L"Source";
       
  2600   wchar_t dest[20]= L"Destination";
       
  2601  
       
  2602   /* copy the wide-char string into dest*/
       
  2603  
       
  2604         size_t t = wcslcpy(dest,src,4);
       
  2605                 
       
  2606                 if(wcscmp(dest,L"Sou")!=0)
       
  2607     return -1;
       
  2608  
       
  2609   return 0;
       
  2610 }
       
  2611 
       
  2612 @endcode
       
  2613 @code
       
  2614 #include <wchar.h>
       
  2615 /* Illustrates how to use wcslcat API */
       
  2616 int example_wcslcat ()
       
  2617 {  
       
  2618   /* source wide character string */
       
  2619   wchar_t src[25] = L"Source";
       
  2620   wchar_t dest[20]= L"Destination";
       
  2621  
       
  2622   /* concate the wide-char string into dest*/
       
  2623  
       
  2624         size_t t = wcslcat(dest,src,14);
       
  2625                 
       
  2626                 if(wcscmp(dest,"DestinationSo")!=0)
       
  2627     return -1;
       
  2628  
       
  2629   return 0;
       
  2630 }
       
  2631 
       
  2632 @endcode
       
  2633 @code
       
  2634 #include <wchar.h>
       
  2635 /* Illustrates how to use wcscspnAPI */
       
  2636 int example_wcscspn ()
       
  2637 {  
       
  2638   /* source wide character string */
       
  2639   wchar_t wcs1[30] = L"1234567890ABCDE!@#$$";
       
  2640   wchar_t *wcs2[20] = { L"abcdefghijkl",
       
  2641      L":::?>_)+(|{>",
       
  2642      L"~*(&IUIJJJ;",
       
  2643      L"1234567",
       
  2644      L":::?>",
       
  2645      L"1",
       
  2646      L"as1sd2ds3ds48f5fd"
       
  2647    };
       
  2648   int i;
       
  2649  
       
  2650   for( i = 0; i < 3 ; i ++)
       
  2651   {
       
  2652    if( wcslen(wcs1) != wcscspn(wcs1,wcs2[i]))
       
  2653      return -1;
       
  2654   }
       
  2655  
       
  2656   return 0;
       
  2657 }
       
  2658 
       
  2659 @endcode
       
  2660 @code
       
  2661 #include <wchar.h>
       
  2662 /* Illustrates how to use wcsncat API */
       
  2663 int example_wcsncat ()
       
  2664 {  
       
  2665   /* source wide character string */
       
  2666   wchar_t *res;
       
  2667   wchar_t str[50];
       
  2668  
       
  2669   wcscpy(str, L"Hello");
       
  2670   res = wcsncat(str,L" world",12);
       
  2671  if(wcscmp(str, L"Hello world") != 0)
       
  2672   return -1;
       
  2673  else
       
  2674   return 0;
       
  2675 }
       
  2676 
       
  2677 @endcode
       
  2678 @code
       
  2679 #include <wchar.h>
       
  2680 /* Illustrates how to use wcsncmp API */
       
  2681 int example_wcsncmp()
       
  2682 {  
       
  2683   /* source wide character string */
       
  2684   wchar_t *wcs1 = L"Hello world";
       
  2685   if(wcsncmp(wcs1,wcs1,wcslen(wcs1))) 
       
  2686    return -1;
       
  2687   else
       
  2688    return 0;
       
  2689 }
       
  2690 
       
  2691 @endcode
       
  2692 @code
       
  2693 #include <wchar.h>
       
  2694 /* Illustrates how to use wcsncpy API */
       
  2695 int example_wcsncpy ()
       
  2696 {  
       
  2697   /* source wide character string */
       
  2698   wchar_t wcs1[15] = L"Hello world";
       
  2699   wchar_t *res;
       
  2700   res = wcsncpy(wcs1,wcs1,wcslen(wcs1));
       
  2701   if(wcscmp(res,wcs1))
       
  2702   return -1;
       
  2703   return 0;
       
  2704 }
       
  2705 
       
  2706 @endcode
       
  2707 @code
       
  2708 #include <wchar.h>
       
  2709 /* Illustrates how to use wcspbrk API */
       
  2710 int example_wcspbrk ()
       
  2711 {  
       
  2712   /* source wide character string */
       
  2713  wchar_t *wcs = L"abcdefghijkl";
       
  2714   wchar_t *res1 = wcspbrk(wcs, L"");
       
  2715   if(res1 != NULL)
       
  2716    return -1;
       
  2717  
       
  2718   return 0;
       
  2719 }
       
  2720 
       
  2721 @endcode
       
  2722 @code
       
  2723 #include <wchar.h>
       
  2724 /* Illustrates how to use wcsrchr API */
       
  2725 int example_wcsrchr ()
       
  2726 {  
       
  2727   /* source wide character string */
       
  2728  wchar_t search_char[15] = L"&&&&$%%%%%TTU";
       
  2729   wchar_t *wstr;
       
  2730   int i ;
       
  2731  
       
  2732   for(i = 0 ; search_char[i]; i++)
       
  2733   {
       
  2734    wstr = wcsrchr(L"", search_char[i]);
       
  2735    if(wstr != NULL)
       
  2736    {
       
  2737      return -1;
       
  2738    }
       
  2739   }
       
  2740   return 0;
       
  2741 }
       
  2742 
       
  2743 @endcode
       
  2744 @code
       
  2745 #include <wchar.h>
       
  2746 /* Illustrates how to use wcsspn API */
       
  2747 int example_wcsspn()
       
  2748 {  
       
  2749   /* source wide character string */
       
  2750  wchar_t wcs1[30] = L"1234567890ABCDE!@#$$";
       
  2751  if(wcslen(wcs1) != wcsspn(wcs1,wcs1)) 
       
  2752   return -1;
       
  2753  return 0;
       
  2754 }
       
  2755 
       
  2756 @endcode
       
  2757 @code
       
  2758 #include <wchar.h>
       
  2759 /* Illustrates how to use wcsstr API */
       
  2760 int example_wcsstr()
       
  2761 {  
       
  2762   /* source wide character string */
       
  2763  wchar_t *buf[20] = { L"fkhsdf%%38",L"rtti123123", };
       
  2764  wchar_t *str  = wcsstr(buf[0],L"\0");
       
  2765  wchar_t *str1 = wcsstr(buf[1],L"\0");
       
  2766  if(wcscmp(str,buf[0]))
       
  2767    return 1;
       
  2768  if(wcscmp(str1,buf[1]))
       
  2769    return 1
       
  2770  return 0;
       
  2771 }
       
  2772 
       
  2773 @endcode
       
  2774 @see memchr()
       
  2775 @see memcmp()
       
  2776 @see memcpy()
       
  2777 @see memmove()
       
  2778 @see memset()
       
  2779 @see strcat()
       
  2780 @see strchr()
       
  2781 @see strcmp()
       
  2782 @see strcpy()
       
  2783 @see strcspn()
       
  2784 @see strlen()
       
  2785 @see strncat()
       
  2786 @see strncmp()
       
  2787 @see strncpy()
       
  2788 @see strpbrk()
       
  2789 @see strrchr()
       
  2790 @see strspn()
       
  2791 @see strstr()
       
  2792 
       
  2793 
       
  2794  
       
  2795 
       
  2796 @publishedAll
       
  2797 @externallyDefinedApi
       
  2798 */
       
  2799 
       
  2800 
       
  2801 
       
  2802 /** @fn  wmemcmp(const wchar_t *s1, const wchar_t *s2, size_t n)
       
  2803 @param s1
       
  2804 @param s2
       
  2805 @param n
       
  2806 
       
  2807 Refer to wmemchr() for the documentation
       
  2808 
       
  2809 @see memchr()
       
  2810 @see memcmp()
       
  2811 @see memcpy()
       
  2812 @see memmove()
       
  2813 @see memset()
       
  2814 @see strcat()
       
  2815 @see strchr()
       
  2816 @see strcmp()
       
  2817 @see strcpy()
       
  2818 @see strcspn()
       
  2819 @see strlen()
       
  2820 @see strncat()
       
  2821 @see strncmp()
       
  2822 @see strncpy()
       
  2823 @see strpbrk()
       
  2824 @see strrchr()
       
  2825 @see strspn()
       
  2826 @see strstr()
       
  2827 
       
  2828 
       
  2829  
       
  2830 
       
  2831 @publishedAll
       
  2832 @externallyDefinedApi
       
  2833 */
       
  2834 
       
  2835 
       
  2836 
       
  2837 /** @fn  wmemcpy(wchar_t *  s1, const wchar_t *  s2, size_t n)
       
  2838 @param s1
       
  2839 @param s2
       
  2840 @param n
       
  2841 
       
  2842 Refer to wmemchr() for the documentation
       
  2843 
       
  2844 @see memchr()
       
  2845 @see memcmp()
       
  2846 @see memcpy()
       
  2847 @see memmove()
       
  2848 @see memset()
       
  2849 @see strcat()
       
  2850 @see strchr()
       
  2851 @see strcmp()
       
  2852 @see strcpy()
       
  2853 @see strcspn()
       
  2854 @see strlen()
       
  2855 @see strncat()
       
  2856 @see strncmp()
       
  2857 @see strncpy()
       
  2858 @see strpbrk()
       
  2859 @see strrchr()
       
  2860 @see strspn()
       
  2861 @see strstr()
       
  2862 
       
  2863 
       
  2864  
       
  2865 
       
  2866 @publishedAll
       
  2867 @externallyDefinedApi
       
  2868 */
       
  2869 
       
  2870 
       
  2871 
       
  2872 /** @fn  wmemmove(wchar_t *s1, const wchar_t *s2, size_t n)
       
  2873 @param s1
       
  2874 @param s2
       
  2875 @param n
       
  2876 
       
  2877 Refer to wmemchr() for the documentation
       
  2878 
       
  2879 @see memchr()
       
  2880 @see memcmp()
       
  2881 @see memcpy()
       
  2882 @see memmove()
       
  2883 @see memset()
       
  2884 @see strcat()
       
  2885 @see strchr()
       
  2886 @see strcmp()
       
  2887 @see strcpy()
       
  2888 @see strcspn()
       
  2889 @see strlen()
       
  2890 @see strncat()
       
  2891 @see strncmp()
       
  2892 @see strncpy()
       
  2893 @see strpbrk()
       
  2894 @see strrchr()
       
  2895 @see strspn()
       
  2896 @see strstr()
       
  2897 
       
  2898 
       
  2899  
       
  2900 
       
  2901 @publishedAll
       
  2902 @externallyDefinedApi
       
  2903 */
       
  2904 
       
  2905 
       
  2906 
       
  2907 /** @fn  wmemset(wchar_t *s, wchar_t c, size_t n)
       
  2908 @param s
       
  2909 @param c
       
  2910 @param n
       
  2911 
       
  2912 Refer to wmemchr() for the documentation
       
  2913 
       
  2914 @see memchr()
       
  2915 @see memcmp()
       
  2916 @see memcpy()
       
  2917 @see memmove()
       
  2918 @see memset()
       
  2919 @see strcat()
       
  2920 @see strchr()
       
  2921 @see strcmp()
       
  2922 @see strcpy()
       
  2923 @see strcspn()
       
  2924 @see strlen()
       
  2925 @see strncat()
       
  2926 @see strncmp()
       
  2927 @see strncpy()
       
  2928 @see strpbrk()
       
  2929 @see strrchr()
       
  2930 @see strspn()
       
  2931 @see strstr()
       
  2932 
       
  2933 
       
  2934  
       
  2935 
       
  2936 @publishedAll
       
  2937 @externallyDefinedApi
       
  2938 */
       
  2939 
       
  2940 
       
  2941 
       
  2942 /** @fn  wprintf(const wchar_t *fmt, ...)
       
  2943 @param fmt
       
  2944 @param ...
       
  2945 
       
  2946 Refer to fwprintf() for the documentation
       
  2947 
       
  2948 @see btowc()
       
  2949 @see fputws()
       
  2950 @see printf()
       
  2951 @see putwc()
       
  2952 @see setlocale()
       
  2953 @see wcsrtombs()
       
  2954 @see wscanf()
       
  2955 
       
  2956 
       
  2957  
       
  2958 
       
  2959 @publishedAll
       
  2960 @externallyDefinedApi
       
  2961 */
       
  2962 
       
  2963 
       
  2964 
       
  2965 /** @fn  wscanf(const wchar_t *fmt, ...)
       
  2966 @param fmt
       
  2967 @param ...
       
  2968 
       
  2969 Note: This description also covers the following functions -
       
  2970  fwscanf()  swscanf()  vwscanf()  vswscanf()  vfwscanf() 
       
  2971 
       
  2972 @return   These
       
  2973 functions
       
  2974 return
       
  2975 the number of input items assigned, which can be fewer than provided
       
  2976 for, or even zero, in the event of a matching failure.
       
  2977 Zero
       
  2978 indicates that, while there was input available,
       
  2979 no conversions were assigned;
       
  2980 typically this is due to an invalid input character,
       
  2981 such as an alphabetic character for a '\%d'
       
  2982 conversion.
       
  2983 The value EOF is returned if an input failure occurs before any conversion such as an
       
  2984 end-of-file occurs.
       
  2985 If an error or end-of-file occurs after conversion
       
  2986 has begun,
       
  2987 the number of conversions which were successfully completed is returned.
       
  2988 
       
  2989   The wscanf family of functions scans input according to a format as described below.
       
  2990 This format may contain conversion specifiers ;
       
  2991 the results from such conversions, if any,
       
  2992 are stored through the pointer arguments.
       
  2993 The wscanf function
       
  2994 reads input from the standard input stream stdin , fwscanf reads input from the stream pointer stream ,
       
  2995 and swscanf reads its input from the wide character string pointed to by str .
       
  2996 The vfwscanf function
       
  2997 is analogous to vfwprintf and reads input from the stream pointer stream using a variable argument list of pointers.
       
  2998 The vwscanf function scans a variable argument list from the standard input and
       
  2999 the vswscanf function scans it from a wide character string;
       
  3000 these are analogous to
       
  3001 the vwprintf and vswprintf functions respectively.
       
  3002 Each successive pointer argument must correspond properly with
       
  3003 each successive conversion specifier
       
  3004 (but see the * conversion below).
       
  3005 All conversions are introduced by the \% (percent sign) character.
       
  3006 The format string
       
  3007 may also contain other characters.
       
  3008 White space (such as blanks, tabs, or newlines) in the format string match any amount of white space, including none, in the input.
       
  3009 Everything else
       
  3010 matches only itself.
       
  3011 Scanning stops
       
  3012 when an input character does not match such a format character.
       
  3013 Scanning also stops
       
  3014 when an input conversion cannot be made (see below).
       
  3015 
       
  3016 
       
  3017 Conversions:
       
  3018 
       
  3019 @code
       
  3020 
       
  3021 Following the % character introducing a conversion there may be a number of flag characters, as follows: *  Suppresses assignment. The conversion that follows occurs as usual, but no pointer is used; the result of the conversion is simply discarded.  
       
  3022 hh  Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a char (rather than int ) .  
       
  3023 h  Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a short int (rather than int ) .  
       
  3024 l (ell)  Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a long int (rather than int ) , that the conversion will be one of a, e, f, or g and the next pointer is a pointer to double (rather than float ) , or that the conversion will be one of c or s and the next pointer is a pointer to an array of wchar_t (rather than char ) .  
       
  3025 ll (ell ell)  
       
  3026   Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a long long int (rather than int ) .  
       
  3027 L  Indicates that the conversion will be one of a, e, f, or g and the next pointer is a pointer to long double .  
       
  3028 j  Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a intmax_t (rather than int ) .  
       
  3029 t  Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a ptrdiff_t (rather than int ) .  
       
  3030 z  Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a size_t (rather than int ) .  
       
  3031 q  (deprecated.) Indicates that the conversion will be one of dioux or n and the next pointer is a pointer to a long long int (rather than int ) .  
       
  3032 
       
  3033 
       
  3034 In addition to these flags, there may be an optional maximum field width, expressed as a decimal integer, between the % and the conversion. If no width is given, a default of "infinity" is used (with one exception, below); otherwise at most this many characters are scanned in processing the conversion. Before conversion begins, most conversions skip white space; this white space is not counted against the field width. 
       
  3035 
       
  3036 The following conversions are available: %  Matches a literal ‘%’. That is, "%%" in the format string matches a single input ‘%’ character. No conversion is done, and assignment does not occur.  
       
  3037 d  Matches an optionally signed decimal integer; the next pointer must be a pointer to int .  
       
  3038 i  Matches an optionally signed integer; the next pointer must be a pointer to int . The integer is read in base 16 if it begins with ‘0x’ or ‘0X’, in base 8 if it begins with ‘0’, and in base 10 otherwise. Only characters that correspond to the base are used.  
       
  3039 o  Matches an octal integer; the next pointer must be a pointer to unsigned int .  
       
  3040 u  Matches an optionally signed decimal integer; the next pointer must be a pointer to unsigned int .  
       
  3041 x, X  Matches an optionally signed hexadecimal integer; the next pointer must be a pointer to unsigned int .  
       
  3042 a, A, e, E, f, F, g, G  
       
  3043   Matches a floating-point number in the style of wcstod. The next pointer must be a pointer to float (unless l or L is specified.)  
       
  3044 s  Matches a sequence of non-white-space wide characters; the next pointer must be a pointer to char , and the array must be large enough to accept the multibyte representation of all the sequence and the terminating NUL character. The input string stops at white space or at the maximum field width, whichever occurs first. 
       
  3045 If an l qualifier is present, the next pointer must be a pointer to wchar_t , into which the input will be placed. 
       
  3046  
       
  3047 S  The same as ls.  
       
  3048 c  Matches a sequence of width count wide characters (default 1); the next pointer must be a pointer to char , and there must be enough room for the multibyte representation of all the characters (no terminating NUL is added). The usual skip of leading white space is suppressed. To skip white space first, use an explicit space in the format. 
       
  3049 If an l qualifier is present, the next pointer must be a pointer to wchar_t , into which the input will be placed. 
       
  3050  
       
  3051 C  The same as lc.  
       
  3052 [  Matches a nonempty sequence of characters from the specified set of accepted characters; the next pointer must be a pointer to char , and there must be enough room for the multibyte representation of all the characters in the string, plus a terminating NUL character. The usual skip of leading white space is suppressed. The string is to be made up of characters in (or not in) a particular set; the set is defined by the characters between the open bracket [ character and a close bracket ] character. The set excludes those characters if the first character after the open bracket is a circumflex ^. To include a close bracket in the set, make it the first character after the open bracket or the circumflex; any other position will end the set. To include a hyphen in the set, make it the last character before the final close bracket; some implementations of wscanf use "A-Z" to represent the range of characters between ‘A’ and ‘Z’. The string ends with the appearance of a character not in the (or, with a circumflex, in) set or when the field width runs out. 
       
  3053 If an l qualifier is present, the next pointer must be a pointer to wchar_t , into which the input will be placed. 
       
  3054  
       
  3055 p  Matches a pointer value (as printed by ‘%p’ in wprintf); the next pointer must be a pointer to void .  
       
  3056 n  Nothing is expected; instead, the number of characters consumed thus far from the input is stored through the next pointer, which must be a pointer to int . This is not a conversion, although it can be suppressed with the * flag.  
       
  3057 
       
  3058 
       
  3059 
       
  3060 The decimal point character is defined in the program’s locale (category LC_NUMERIC). 
       
  3061 
       
  3062 For backwards compatibility, a "conversion" of ‘%\0’ causes an immediate return of EOF. 
       
  3063 
       
  3064 @endcode
       
  3065 
       
  3066 Examples:
       
  3067 @code
       
  3068 #include <stdio.h>
       
  3069 #include <wchar.h>
       
  3070 /* Illustrates how to use wscanf API */
       
  3071 int example_wscanf(void)
       
  3072 {
       
  3073   int rval;
       
  3074   int input;
       
  3075  /* Display a message to the user to input an integer */
       
  3076  wprintf(L"Enter an integer : ");
       
  3077   /* Read an integer from the standard input */
       
  3078   rval = wscanf(L"%d", &input;);
       
  3079  
       
  3080   /* return the number of inputs that were read */
       
  3081   return(rval);
       
  3082 }
       
  3083 
       
  3084 @endcode
       
  3085 @code
       
  3086 #include <stdio.h>
       
  3087 #include <wchar.h>
       
  3088 /* Illustrates how to use swscanf API */
       
  3089 int example_swscanf(void)
       
  3090 {
       
  3091   int rval;
       
  3092   wchar_t wcs[100];
       
  3093   wchar_t *bufptr = L"abcdefg";
       
  3094  /* Read a string from the buffer bufptr*/
       
  3095   rval = swscanf(bufptr, L"%s", wcs);
       
  3096  
       
  3097   /* The string that was read into wcs is printed */
       
  3098   wprintf(L"%s",wcs);
       
  3099  
       
  3100   /* return the number of inputs that were read */
       
  3101   return(rval);
       
  3102 }
       
  3103 
       
  3104 @endcode
       
  3105 @code
       
  3106 #include <stdio.h>
       
  3107 #include <wchar.h>
       
  3108 /* Illustrates how to use fwscanf API */
       
  3109 int example_fwscanf(void)
       
  3110 {
       
  3111   FILE *fp = NULL;
       
  3112   int retval;
       
  3113   wchar_t wcs[100];
       
  3114    
       
  3115   /* open the file for writing*/
       
  3116   fp = fopen("write.txt","w");
       
  3117   if(fp == NULL)
       
  3118   {
       
  3119     wprintf(L"Error: File open
       
  3120 ");
       
  3121     return (-1);
       
  3122   }
       
  3123  /* Read a string from fp*/
       
  3124   rval = fwscanf(fp, L"%s", wcs);
       
  3125  
       
  3126  /* Close the file that was opened */
       
  3127   fclose(fp);
       
  3128  
       
  3129   /* return the number of inputs that were read */
       
  3130   return(rval);
       
  3131 }
       
  3132 
       
  3133 @endcode
       
  3134 @code
       
  3135 #include <stdio.h>
       
  3136 #include <wchar.h>
       
  3137 /* Illustrates how to use vwscanf API */
       
  3138 int example_vwscanf(va_list arg)
       
  3139 {
       
  3140   int retval;
       
  3141     
       
  3142  /* Read a string from standard input */
       
  3143   rval = vwscanf(L"%s", arg);
       
  3144  
       
  3145   /* return the number of inputs that were read */
       
  3146   return(rval);
       
  3147 }
       
  3148 
       
  3149 @endcode
       
  3150 @code
       
  3151 #include <stdio.h>
       
  3152 #include <wchar.h>
       
  3153 /* Illustrates how to use vswscanf API */
       
  3154 int example_vswscanf(va_list arg)
       
  3155 {
       
  3156   int retval;
       
  3157   wchar_t bufptr = L"abc";
       
  3158     
       
  3159  /* Read a string from bufptr */
       
  3160   rval = vswscanf(bufptr, L"%s", arg);
       
  3161  
       
  3162   /* return the number of inputs that were read */
       
  3163   return(rval);
       
  3164 }
       
  3165 
       
  3166 @endcode
       
  3167 @code
       
  3168 #include <stdio.h>
       
  3169 #include <wchar.h>
       
  3170 /* Illustrates how to use vfwscanf API */
       
  3171 int example_vfwscanf(va_list arg)
       
  3172 {
       
  3173   FILE *fp = NULL;
       
  3174   int retval;
       
  3175     
       
  3176   /* open the file for writing*/
       
  3177   fp = fopen("write.txt","w");
       
  3178   if(fp == NULL)
       
  3179   {
       
  3180     wprintf(L"Error: File open
       
  3181 ");
       
  3182     return (-1);
       
  3183   }
       
  3184  /* Read a string */
       
  3185   rval = vfwscanf(fp, L"%s", arg);
       
  3186  
       
  3187   /* Close the file that was opened */
       
  3188   fclose(fp);
       
  3189  
       
  3190   /* return the number of inputs that were read */
       
  3191   return(rval);
       
  3192 }
       
  3193 
       
  3194 @endcode
       
  3195 Examples:
       
  3196 @code
       
  3197 #include <stdio.h>
       
  3198 #include <wchar.h>
       
  3199 /* Illustrates how to use wscanf API */
       
  3200 int example_wscanf(void)
       
  3201 {
       
  3202   int rval;
       
  3203   int input;
       
  3204  /* Display a message to the user to input an integer */
       
  3205  wprintf(L"Enter an integer : ");
       
  3206   /* Read an integer from the standard input */
       
  3207   rval = wscanf(L"%d", &input;);
       
  3208  
       
  3209   /* return the number of inputs that were read */
       
  3210   return(rval);
       
  3211 }
       
  3212 
       
  3213 @endcode
       
  3214 @code
       
  3215 #include <stdio.h>
       
  3216 #include <wchar.h>
       
  3217 /* Illustrates how to use swscanf API */
       
  3218 int example_swscanf(void)
       
  3219 {
       
  3220   int rval;
       
  3221   wchar_t wcs[100];
       
  3222   wchar_t *bufptr = L"abcdefg";
       
  3223  /* Read a string from the buffer bufptr*/
       
  3224   rval = swscanf(bufptr, L"%s", wcs);
       
  3225  
       
  3226   /* The string that was read into wcs is printed */
       
  3227   wprintf(L"%s",wcs);
       
  3228  
       
  3229   /* return the number of inputs that were read */
       
  3230   return(rval);
       
  3231 }
       
  3232 
       
  3233 @endcode
       
  3234 @code
       
  3235 #include <stdio.h>
       
  3236 #include <wchar.h>
       
  3237 /* Illustrates how to use fwscanf API */
       
  3238 int example_fwscanf(void)
       
  3239 {
       
  3240   FILE *fp = NULL;
       
  3241   int retval;
       
  3242   wchar_t wcs[100];
       
  3243    
       
  3244   /* open the file for writing*/
       
  3245   fp = fopen("write.txt","w");
       
  3246   if(fp == NULL)
       
  3247   {
       
  3248     wprintf(L"Error: File open
       
  3249 ");
       
  3250     return (-1);
       
  3251   }
       
  3252  /* Read a string from fp*/
       
  3253   rval = fwscanf(fp, L"%s", wcs);
       
  3254  
       
  3255  /* Close the file that was opened */
       
  3256   fclose(fp);
       
  3257  
       
  3258   /* return the number of inputs that were read */
       
  3259   return(rval);
       
  3260 }
       
  3261 
       
  3262 @endcode
       
  3263 @code
       
  3264 #include <stdio.h>
       
  3265 #include <wchar.h>
       
  3266 /* Illustrates how to use vwscanf API */
       
  3267 int example_vwscanf(va_list arg)
       
  3268 {
       
  3269   int retval;
       
  3270     
       
  3271  /* Read a string from standard input */
       
  3272   rval = vwscanf(L"%s", arg);
       
  3273  
       
  3274   /* return the number of inputs that were read */
       
  3275   return(rval);
       
  3276 }
       
  3277 
       
  3278 @endcode
       
  3279 @code
       
  3280 #include <stdio.h>
       
  3281 #include <wchar.h>
       
  3282 /* Illustrates how to use vswscanf API */
       
  3283 int example_vswscanf(va_list arg)
       
  3284 {
       
  3285   int retval;
       
  3286   wchar_t bufptr = L"abc";
       
  3287     
       
  3288  /* Read a string from bufptr */
       
  3289   rval = vswscanf(bufptr, L"%s", arg);
       
  3290  
       
  3291   /* return the number of inputs that were read */
       
  3292   return(rval);
       
  3293 }
       
  3294 
       
  3295 @endcode
       
  3296 @code
       
  3297 #include <stdio.h>
       
  3298 #include <wchar.h>
       
  3299 /* Illustrates how to use vfwscanf API */
       
  3300 int example_vfwscanf(va_list arg)
       
  3301 {
       
  3302   FILE *fp = NULL;
       
  3303   int retval;
       
  3304     
       
  3305   /* open the file for writing*/
       
  3306   fp = fopen("write.txt","w");
       
  3307   if(fp == NULL)
       
  3308   {
       
  3309     wprintf(L"Error: File open
       
  3310 ");
       
  3311     return (-1);
       
  3312   }
       
  3313  /* Read a string */
       
  3314   rval = vfwscanf(fp, L"%s", arg);
       
  3315  
       
  3316   /* Close the file that was opened */
       
  3317   fclose(fp);
       
  3318  
       
  3319   /* return the number of inputs that were read */
       
  3320   return(rval);
       
  3321 }
       
  3322 
       
  3323 @endcode
       
  3324 
       
  3325 Limitations:
       
  3326 
       
  3327 Long double length modifiers are not supported.
       
  3328 
       
  3329 @see fgetwc()
       
  3330 @see scanf()
       
  3331 @see wcrtomb()
       
  3332 @see wcstod()
       
  3333 @see wcstol()
       
  3334 @see wcstoul()
       
  3335 @see wprintf()
       
  3336 
       
  3337 
       
  3338 Bugs:
       
  3339 
       
  3340  In addition to the bugs documented in scanf , wscanf does not support the "A-Z"
       
  3341 notation for specifying character ranges with the character
       
  3342 class conversion (' \%[ ').
       
  3343 
       
  3344  
       
  3345 
       
  3346 @publishedAll
       
  3347 @externallyDefinedApi
       
  3348 */
       
  3349 
       
  3350 
       
  3351 
       
  3352 /** @fn  wcstoq(const wchar_t *  nptr, wchar_t **  endptr, int base)
       
  3353 @param nptr
       
  3354 @param endptr
       
  3355 @param base
       
  3356 
       
  3357 Refer to wcstol() for the documentation
       
  3358 
       
  3359 @see strtol()
       
  3360 @see strtoul()
       
  3361 
       
  3362 
       
  3363  
       
  3364 
       
  3365 @publishedAll
       
  3366 @externallyDefinedApi
       
  3367 */
       
  3368 
       
  3369 
       
  3370 
       
  3371 /** @fn  wcstouq(const wchar_t *  nptr, wchar_t **  endptr, int base)
       
  3372 @param nptr
       
  3373 @param endptr
       
  3374 @param base
       
  3375 
       
  3376 Refer to wcstol() for the documentation
       
  3377 
       
  3378 @see strtol()
       
  3379 @see strtoul()
       
  3380 
       
  3381 
       
  3382  
       
  3383 
       
  3384 @publishedAll
       
  3385 @externallyDefinedApi
       
  3386 */
       
  3387 
       
  3388 
       
  3389 
       
  3390 /** @fn  wcswcs(const wchar_t *s, const wchar_t *find)
       
  3391 @param s
       
  3392 @param find
       
  3393 
       
  3394   The wcswcs() function locates the first occurrence of the wide-character 
       
  3395 string pointed by s (excluding the terminating '\\0' character) in the wide-character 
       
  3396 string pointed by find.
       
  3397 
       
  3398 Examples:
       
  3399 @code
       
  3400 #include <wchar.h>
       
  3401 /* Illustrates how to use wcswcs API */
       
  3402 int example_wcswcs()
       
  3403 {  
       
  3404   /* source wide character string */
       
  3405  wchar_t *buf[20] = { L"fkhsdf%%38",L"rtti123123", };
       
  3406  wchar_t *str  = wcswcs(buf[0],L"\0");
       
  3407  wchar_t *str1 = wcswcs(buf[1],L"\0");
       
  3408  if(wcscmp(str,buf[0]))
       
  3409    return 1;
       
  3410  if(wcscmp(str1,buf[1]))
       
  3411    return 1
       
  3412  return 0;
       
  3413 }
       
  3414 
       
  3415 @endcode
       
  3416 @return   The wcswcs() on success returns a pointer to the located wide-character string and returns
       
  3417 a NULL pointer if the wide-charcter string was not found. If find is a wide-character string with length as zero, the function returns s.
       
  3418 
       
  3419 @see strstr()
       
  3420 
       
  3421 
       
  3422  
       
  3423 
       
  3424 @publishedAll
       
  3425 @externallyDefinedApi
       
  3426 */
       
  3427 
       
  3428 
       
  3429 
       
  3430 /** @fn  getwc(FILE *stream)
       
  3431 @param stream
       
  3432 
       
  3433 Refer to fgetwc() for the documentation
       
  3434 
       
  3435 @see ferror()
       
  3436 @see fopen()
       
  3437 @see fread()
       
  3438 @see getc()
       
  3439 @see putwc()
       
  3440 @see ungetwc()
       
  3441 
       
  3442 
       
  3443  
       
  3444 
       
  3445 @publishedAll
       
  3446 @externallyDefinedApi
       
  3447 */
       
  3448 
       
  3449 
       
  3450 
       
  3451 /** @fn  getwchar(void); 
       
  3452 
       
  3453 
       
  3454 Refer to fgetwc() for the documentation
       
  3455 
       
  3456 @see ferror()
       
  3457 @see fopen()
       
  3458 @see fread()
       
  3459 @see getc()
       
  3460 @see putwc()
       
  3461 @see ungetwc()
       
  3462 
       
  3463 
       
  3464  
       
  3465 
       
  3466 @publishedAll
       
  3467 @externallyDefinedApi
       
  3468 */
       
  3469 
       
  3470 
       
  3471 
       
  3472 /** @fn  putwc(wchar_t wc, FILE *stream)
       
  3473 @param wc
       
  3474 @param stream
       
  3475 
       
  3476 Refer to fputwc() for the documentation
       
  3477 
       
  3478 @see ferror()
       
  3479 @see fopen()
       
  3480 @see getwc()
       
  3481 @see putc()
       
  3482 
       
  3483 
       
  3484  
       
  3485 
       
  3486 @publishedAll
       
  3487 @externallyDefinedApi
       
  3488 */
       
  3489 
       
  3490 
       
  3491 
       
  3492 /** @fn  putwchar(wchar_t wc)
       
  3493 @param wc
       
  3494 
       
  3495 Refer to fputwc() for the documentation
       
  3496 
       
  3497 @see ferror()
       
  3498 @see fopen()
       
  3499 @see getwc()
       
  3500 @see putc()
       
  3501 
       
  3502 
       
  3503  
       
  3504 
       
  3505 @publishedAll
       
  3506 @externallyDefinedApi
       
  3507 */
       
  3508 
       
  3509 
       
  3510 
       
  3511 /** @fn  vfwscanf(FILE *  stream, const wchar_t *  format, va_list ap)
       
  3512 @param stream
       
  3513 @param format
       
  3514 @param ap
       
  3515 
       
  3516 Refer to wscanf() for the documentation
       
  3517 
       
  3518 @see fgetwc()
       
  3519 @see scanf()
       
  3520 @see wcrtomb()
       
  3521 @see wcstod()
       
  3522 @see wcstol()
       
  3523 @see wcstoul()
       
  3524 @see wprintf()
       
  3525 
       
  3526 
       
  3527  
       
  3528 
       
  3529 @publishedAll
       
  3530 @externallyDefinedApi
       
  3531 */
       
  3532 
       
  3533 
       
  3534 
       
  3535 /** @fn  vswscanf(const wchar_t *  str, const wchar_t *fmt, va_list ap)
       
  3536 @param str
       
  3537 @param fmt
       
  3538 @param ap
       
  3539 
       
  3540 Refer to wscanf() for the documentation
       
  3541 
       
  3542 @see fgetwc()
       
  3543 @see scanf()
       
  3544 @see wcrtomb()
       
  3545 @see wcstod()
       
  3546 @see wcstol()
       
  3547 @see wcstoul()
       
  3548 @see wprintf()
       
  3549 
       
  3550 
       
  3551  
       
  3552 
       
  3553 @publishedAll
       
  3554 @externallyDefinedApi
       
  3555 */
       
  3556 
       
  3557 
       
  3558 
       
  3559 /** @fn  vwscanf(const wchar_t *fmt, va_list ap)
       
  3560 @param fmt
       
  3561 @param ap
       
  3562 
       
  3563 Refer to wscanf() for the documentation
       
  3564 
       
  3565 @see fgetwc()
       
  3566 @see scanf()
       
  3567 @see wcrtomb()
       
  3568 @see wcstod()
       
  3569 @see wcstol()
       
  3570 @see wcstoul()
       
  3571 @see wprintf()
       
  3572 
       
  3573 
       
  3574  
       
  3575 
       
  3576 @publishedAll
       
  3577 @externallyDefinedApi
       
  3578 */
       
  3579 
       
  3580 
       
  3581 
       
  3582 /** @fn  wcstof(const wchar_t *  nptr, wchar_t **  endptr)
       
  3583 @param nptr
       
  3584 @param endptr
       
  3585 
       
  3586 Note: This description also covers the following functions -
       
  3587  wcstold()  wcstod() 
       
  3588 
       
  3589 @return  
       
  3590 
       
  3591   The wcstof , wcstod and wcstold functions are the wide-character versions of the strtof , strtod and strtold functions.
       
  3592 Refer to  strtod() for details.
       
  3593 
       
  3594 Examples:
       
  3595 @code
       
  3596 #include <wchar.h>
       
  3597 /* Illustrates how to use wcstof API */
       
  3598 int example_wcstof()
       
  3599 {  
       
  3600   /* src string */
       
  3601   wchar_t wcs1[21] = L"  1.23abcd";
       
  3602   wchar_t wcs2[5]=L"abcd";
       
  3603   wchar_t *eptr;
       
  3604   float d;
       
  3605   
       
  3606  /* convert wide-char string to float */  
       
  3607   d = wcstof(wcs1, &eptr;);
       
  3608  
       
  3609   /* compare the result */
       
  3610   if((d == 1.23F) && !(wcscmp (eptr, wcs2)))
       
  3611    return 0;
       
  3612   else
       
  3613    return 1;
       
  3614 }
       
  3615 
       
  3616 @endcode
       
  3617 @code
       
  3618 #include <wchar.h>
       
  3619 /* Illustrates how to use wcstold API */
       
  3620 int example_wcstold()
       
  3621 {  
       
  3622   /* src string */
       
  3623   wchar_t wcs1[21] = L"  1.23abcd";
       
  3624   wchar_t wcs2[5]=L"abcd";
       
  3625   wchar_t *eptr;
       
  3626   double d;
       
  3627  
       
  3628   /* convert wide-char string to double */
       
  3629   d = wcstod(wcs1, &eptr;);
       
  3630  
       
  3631   /* compare the result */
       
  3632   if((d == 1.23) && !(wcscmp (eptr, wcs2)))
       
  3633    return 0;
       
  3634   else
       
  3635    return 1;
       
  3636 }
       
  3637 
       
  3638 @endcode
       
  3639 @code
       
  3640 #include <wchar.h>
       
  3641 /* Illustrates how to use wcstold API */
       
  3642 int example_wcstold()
       
  3643 {  
       
  3644   /* src string */
       
  3645   wchar_t wcs1[21] = L"  1.23abcd";
       
  3646   wchar_t wcs2[5]=L"abcd";
       
  3647   wchar_t *eptr;
       
  3648   long double d;
       
  3649   
       
  3650   /* convert wide-char string to long double */
       
  3651   d = wcstold(wcs1, &eptr;);
       
  3652  
       
  3653   /* compare the result *
       
  3654   if((d == 1.23) && !(wcscmp (eptr, wcs2)))
       
  3655    return 0;
       
  3656   else
       
  3657   return 1;
       
  3658 }
       
  3659 
       
  3660 @endcode
       
  3661 @see strtod()
       
  3662 @see wcstol()
       
  3663 
       
  3664 
       
  3665  
       
  3666 
       
  3667 @publishedAll
       
  3668 @externallyDefinedApi
       
  3669 */
       
  3670 
       
  3671 
       
  3672 
       
  3673 /** @fn  wcstold(const wchar_t *  nptr, wchar_t **  endptr)
       
  3674 @param nptr
       
  3675 @param endptr
       
  3676 
       
  3677 Refer to wcstof() for the documentation
       
  3678 
       
  3679 @see strtod()
       
  3680 @see wcstol()
       
  3681 
       
  3682 
       
  3683  
       
  3684 
       
  3685 @publishedAll
       
  3686 @externallyDefinedApi
       
  3687 */
       
  3688 
       
  3689 
       
  3690 
       
  3691 /** @fn  wcstoll(const wchar_t *  nptr, wchar_t **  endptr, int base)
       
  3692 @param nptr
       
  3693 @param endptr
       
  3694 @param base
       
  3695 
       
  3696 Refer to wcstol() for the documentation
       
  3697 
       
  3698 @see strtol()
       
  3699 @see strtoul()
       
  3700 
       
  3701 
       
  3702  
       
  3703 
       
  3704 @publishedAll
       
  3705 @externallyDefinedApi
       
  3706 */
       
  3707 
       
  3708 
       
  3709 
       
  3710 /** @fn  wcstoull(const wchar_t *  nptr, wchar_t **  endptr, int base)
       
  3711 @param nptr
       
  3712 @param endptr
       
  3713 @param base
       
  3714 
       
  3715 Refer to wcstol() for the documentation
       
  3716 
       
  3717 @see strtol()
       
  3718 @see strtoul()
       
  3719 
       
  3720 
       
  3721  
       
  3722 
       
  3723 @publishedAll
       
  3724 @externallyDefinedApi
       
  3725 */
       
  3726 
       
  3727 
       
  3728 
       
  3729 /** @fn  wcswidth(const wchar_t *pwcs, size_t n)
       
  3730 @param pwcs
       
  3731 @param n
       
  3732 @return   The wcswidth function returns 0 if pwcs is an empty string (L""), -1 if a non-printing wide character is 
       
  3733 encountered or the number of column positions occupied otherwise.
       
  3734 
       
  3735   The wcswidth function determines the number of column positions required for the first n characters of pwcs ,
       
  3736 or until a null wide character (L'\\0') is encountered.
       
  3737 
       
  3738  The behavior of the wcswdith is affected by LC_CTYPE category of the current locale.
       
  3739 
       
  3740 Examples:
       
  3741 @code
       
  3742 #include <wchar.h>
       
  3743 /* Illustrates how to use wcswidth API */
       
  3744 int example_wcswidth()
       
  3745 {  
       
  3746   /* wide character string for which width has to */
       
  3747   /* determined */
       
  3748   wchar_t *ws1 = L"test case";
       
  3749   int retval;
       
  3750   /* compute the width of the ws1 */
       
  3751   retval = wcswidth(ws1,50);
       
  3752  /* return the result */
       
  3753   return retval;
       
  3754 }
       
  3755 
       
  3756 @endcode
       
  3757 
       
  3758 Limitations:
       
  3759 
       
  3760 The current implementation of wcswidth is dependent upon locale support in Symbian OS.
       
  3761 
       
  3762 @see iswprint()
       
  3763 @see wcwidth()
       
  3764 
       
  3765 
       
  3766  
       
  3767 
       
  3768 @publishedAll
       
  3769 @externallyDefinedApi
       
  3770 */
       
  3771 
       
  3772 
       
  3773 
       
  3774 /** @fn  wcwidth(wchar_t wc)
       
  3775 @param wc
       
  3776 @return   The wcwidth function returns 0 if the wc argument is a null wide character (L'\\0'), -1 if wc is not printable or the number of column positions the character occupies 
       
  3777 otherwise.
       
  3778 
       
  3779   The wcwidth function determines the number of column positions required to
       
  3780 display the wide character wc .
       
  3781 
       
  3782  The behavior of the wcwdith is affected by LC_CTYPE category of the current locale.
       
  3783 
       
  3784 Examples:
       
  3785 @code
       
  3786 #include <wchar.h>
       
  3787 /* Illustrates how to use wcwidth API */
       
  3788 int example_wcwidth()
       
  3789 {  
       
  3790  /* wide character for which width has to be determined */
       
  3791  wchar_t wc = L'a';
       
  3792  int retval;
       
  3793  /* determine the width of wc */
       
  3794  retval = wcwidth(wc);
       
  3795  /* return the determined width */
       
  3796  return retval;
       
  3797 }
       
  3798 
       
  3799 @endcode
       
  3800 
       
  3801 Examples:
       
  3802 
       
  3803  This code fragment reads text from standard input and
       
  3804 breaks lines that are more than 20 column positions wide,
       
  3805 similar to the fold utility:
       
  3806 @code
       
  3807 wint_t ch;
       
  3808 int column, w;
       
  3809 column = 0;
       
  3810 while ((ch = getwchar()) != WEOF) {
       
  3811         w = wcwidth(ch);
       
  3812         if (w > 0 && column + w >= 20) {
       
  3813                 putwchar(L' \en');
       
  3814                 column = 0;
       
  3815         }
       
  3816         putwchar(ch);
       
  3817         if (ch == L' \en')
       
  3818                 column = 0;
       
  3819         else if (w > 0)
       
  3820                 column += w;
       
  3821 }
       
  3822 
       
  3823 @endcode
       
  3824 
       
  3825 Limitations:
       
  3826 
       
  3827 The current implementation of wcwidth is dependent upon the locale support of Symbian OS.
       
  3828 
       
  3829 @see iswprint()
       
  3830 @see wcswidth()
       
  3831 
       
  3832 
       
  3833  
       
  3834 
       
  3835 @publishedAll
       
  3836 @externallyDefinedApi
       
  3837 */
       
  3838 
       
  3839 
       
  3840 
       
  3841 /** @fn  mbsnrtowcs(wchar_t *  dst, const char **  src, size_t nms, size_t len, mbstate_t *  ps)
       
  3842 @param dst
       
  3843 @param src
       
  3844 @param nms
       
  3845 @param len
       
  3846 @param ps
       
  3847 
       
  3848 Refer to mbsrtowcs() for the documentation
       
  3849 
       
  3850 @see mbrtowc()
       
  3851 @see mbstowcs()
       
  3852 @see wcsrtombs()
       
  3853 
       
  3854 
       
  3855  
       
  3856 
       
  3857 @publishedAll
       
  3858 @externallyDefinedApi
       
  3859 */
       
  3860 
       
  3861 
       
  3862 
       
  3863 /** @fn  wcsnrtombs(char *  dst, const wchar_t **  src, size_t nwc, size_t len, mbstate_t * ps)
       
  3864 @param dst
       
  3865 @param src
       
  3866 @param nwc
       
  3867 @param len
       
  3868 @param ps
       
  3869 
       
  3870 Refer to wcsrtombs() for the documentation
       
  3871 
       
  3872 @see mbsrtowcs()
       
  3873 @see wcrtomb()
       
  3874 @see wcstombs()
       
  3875 
       
  3876 
       
  3877  
       
  3878 
       
  3879 @publishedAll
       
  3880 @externallyDefinedApi
       
  3881 */
       
  3882 
       
  3883 
       
  3884 
       
  3885 /** @fn  wcpcpy(wchar_t *dst , const wchar_t *src)
       
  3886 @param dst
       
  3887 @param src
       
  3888 @return   The wcpcpy() function returns a pointer to the end of the wide-character 
       
  3889 string dest , that is the return pointer points to the terminating '\\0'.
       
  3890 
       
  3891 
       
  3892 
       
  3893   The wcpcpy() function
       
  3894 copies the wide-character string src to dst (including the terminating '\\0'
       
  3895 character.)
       
  3896 
       
  3897 
       
  3898 
       
  3899 Examples:
       
  3900 @code
       
  3901 #include <stdlib.h>
       
  3902 #include <wchar.h>
       
  3903 /* Illustrates how to use wcpcpy API */
       
  3904 int example_wcpcpy()
       
  3905 { 
       
  3906   /* input string for which length to be found */
       
  3907  wchar_t *src = L"testcase";
       
  3908   wchar_t *dest = NULL;
       
  3909   wchar_t *destEndPtr = NULL; 
       
  3910     
       
  3911   /* allocate memory for the destination string */
       
  3912   dest = (wchar_t *)malloc((wcslen(src)+1)*sizeof(wchar_t));
       
  3913     
       
  3914   /*  perform the operation */
       
  3915   if(dest != NULL)
       
  3916    destEndPtr = (wchar_t *)wcpcpy(dest,src);
       
  3917   else
       
  3918    return 1;
       
  3919   if(!wcscmp(dest,src))
       
  3920   {
       
  3921    free(dest);
       
  3922    return 0;
       
  3923   }
       
  3924   else
       
  3925   {
       
  3926    free(dest);
       
  3927    return 1;
       
  3928   }
       
  3929 }
       
  3930 
       
  3931 @endcode
       
  3932  
       
  3933  
       
  3934 
       
  3935 @publishedAll
       
  3936 @externallyDefinedApi
       
  3937 */
       
  3938 
       
  3939 
       
  3940 
       
  3941 /** @fn  wcpncpy(wchar_t *dst , const wchar_t *src, size_t n)
       
  3942 @param dst
       
  3943 @param src
       
  3944 @param n
       
  3945 @return   The wcpncpy() function returns a pointer to the wide character one past
       
  3946 the last non-null wide character written.
       
  3947 
       
  3948   The wcpncpy() function copies at most n wide characters from the wide-character string src , including the terminating L'\\0' character, to dst . Exactly n wide characters are written at dst . If the length wcslen(src) is less than n , the remaining wide characters in the array dst are filled with L'\\0' 
       
  3949 characters. If the length wcslen(src) is greater than or equal to n , the string dst will not be L'\\0' terminated.
       
  3950 
       
  3951 Examples:
       
  3952 @code
       
  3953 #include <stdlib.h>
       
  3954 #include <wchar.h>
       
  3955 /* Illustrates how to use wcpncpy API */
       
  3956 int example_wcpncpy(void)
       
  3957 { 
       
  3958   /* input string for which length to be found */
       
  3959  wchar_t *src = L"testcase";
       
  3960   wchar_t *dest = NULL;
       
  3961   wchar_t *destEndPtr = NULL; 
       
  3962     
       
  3963   /* allocate memory for the destination string */
       
  3964   dest = (wchar_t *)malloc((wcslen(src)+1)*sizeof(wchar_t));
       
  3965     
       
  3966   /*  perform the operation */
       
  3967   if(dest != NULL)
       
  3968    destEndPtr = (wchar_t *)wcpncpy(dest,src,wcslen(src)+1);
       
  3969   else
       
  3970    return -1;
       
  3971   /* checking for error */
       
  3972   if(!wcscmp(dest,src))
       
  3973   {
       
  3974    wprintf(L"wcpncpy succeeded
       
  3975 ");
       
  3976    free(dest);
       
  3977    return 0;
       
  3978   }
       
  3979   else
       
  3980   {
       
  3981    wprintf(L"wcpncpy failed!!
       
  3982 ");
       
  3983    free(dest);
       
  3984    return -1;
       
  3985   }
       
  3986 }
       
  3987 
       
  3988 @endcode
       
  3989 @see wcpcpy()
       
  3990 
       
  3991 
       
  3992  
       
  3993 
       
  3994 @publishedAll
       
  3995 @externallyDefinedApi
       
  3996 */
       
  3997 
       
  3998 
       
  3999 
       
  4000 /** @fn  wcscasecmp(const wchar_t *s1, const wchar_t *s2)
       
  4001 @param s1
       
  4002 @param s2
       
  4003 @return   The wcscasecmp() returns an integer greater than, equal to, or less than 
       
  4004 0, according as s1 is lexicographically greater than, equal to, or less than s2 after translation of each corresponding character to lower-case. The 
       
  4005 strings themselves are not modified.
       
  4006 
       
  4007   The wcscasecmp() function
       
  4008 compares the null-terminated wide-character strings s1 and s2 .
       
  4009 
       
  4010 Examples:
       
  4011 @code
       
  4012 #include <wchar.h>
       
  4013 /* Illustrates how to use wcscasecmp API */
       
  4014 int example_wcscasecmp(void)
       
  4015 { 
       
  4016   /* input strings which needs to be compared */
       
  4017  wchar_t *ws1=L"testcasecmp";
       
  4018   wchar_t *ws2=L"TESTCASECMP";
       
  4019     
       
  4020   /* function call to compare the two strings which */
       
  4021   /* differ in case */
       
  4022   int retval = wcscasecmp(ws1,ws2);
       
  4023   /* returns 0 if they are equal or > 1 */
       
  4024   /* if first string is greater than second string else -1 */
       
  4025   return retval;
       
  4026 }
       
  4027 
       
  4028 @endcode
       
  4029 @see strcasecmp()
       
  4030 
       
  4031 
       
  4032  
       
  4033 
       
  4034 @publishedAll
       
  4035 @externallyDefinedApi
       
  4036 */
       
  4037 
       
  4038 
       
  4039 
       
  4040 /** @fn  wcsdup(const wchar_t *srcwcs)
       
  4041 @param srcwcs
       
  4042 @return   The wcsdup function returns a pointer to the new wide-character string, or NULL if sufficient memory was not available.
       
  4043 
       
  4044   The wcsdup() function allocates sufficient memory for a
       
  4045 copy of the wide-string srcwcs, does the copy,
       
  4046 and returns a pointer to it.  The pointer may
       
  4047 subsequently be used as an argument to the function free .
       
  4048 
       
  4049  If insufficient memory is available, NULL is returned and errno is set to
       
  4050 ENOMEM.
       
  4051 
       
  4052 Examples:
       
  4053 @code
       
  4054 #include <wchar.h>
       
  4055 /* Illustrates how to use wcsdup API */
       
  4056 int example_wcsdup(void)
       
  4057 { 
       
  4058   /* input string for which length has to be found */
       
  4059  wchar_t *srcws=L"testwcsdup";
       
  4060   wchar_t *destws = NULL;
       
  4061     
       
  4062  /* invoke the API wcsdup to duplicate the string */
       
  4063   destws = wcsdup(srcws);
       
  4064   /* return no error if src str and dest str are equal else return an error */   
       
  4065   if(!(wcscmp(srcws,destws)))
       
  4066   {
       
  4067     free(destws);
       
  4068    return 1;
       
  4069   }
       
  4070   else
       
  4071   {
       
  4072     free(destws);
       
  4073    return -1;
       
  4074   }
       
  4075 }
       
  4076 
       
  4077 @endcode
       
  4078 @see strdup()
       
  4079 
       
  4080 
       
  4081  
       
  4082 
       
  4083 @publishedAll
       
  4084 @externallyDefinedApi
       
  4085 */
       
  4086 
       
  4087 
       
  4088 
       
  4089 /** @fn  wcsncasecmp(const wchar_t *s1, const wchar_t *s2, size_t n)
       
  4090 @param s1
       
  4091 @param s2
       
  4092 @param n
       
  4093 @return   The wcsncasecmp() returns an integer greater than, equal to, or less than 0,
       
  4094 according as s1 is lexicographically greater than, equal to, or less than s2 after translation of each corresponding character to lower-case.
       
  4095 The strings themselves are not modified.
       
  4096 
       
  4097   The wcsncasecmp() function compares atmost n wide-characters from the null-terminated wide-character strings s1 and s2 .
       
  4098 
       
  4099 Examples:
       
  4100 @code
       
  4101 #include <wchar.h>
       
  4102 /* Illustrates how to use wcsncasecmp API */
       
  4103 int example_wcsncasecmp()
       
  4104 { 
       
  4105   /* input strings which need to be compared */
       
  4106  wchar_t *ws1=L"testcasecmp";
       
  4107   wchar_t *ws2=L"TESTCASECMP";
       
  4108     
       
  4109   /* function call to compare the two strings which */
       
  4110   /* differ in case */
       
  4111   int retval = wcsncasecmp(ws1,ws2,11);
       
  4112   /* returns 0 if they are equal except the case or >1 */
       
  4113   /* if first string is greater than second string else -1 */
       
  4114   return retval;
       
  4115 }
       
  4116 
       
  4117 @endcode
       
  4118 @see strncasecmp()
       
  4119 
       
  4120 
       
  4121  
       
  4122 
       
  4123 @publishedAll
       
  4124 @externallyDefinedApi
       
  4125 */
       
  4126 
       
  4127 
       
  4128 
       
  4129 /** @fn  wcsnlen(const wchar_t *s, size_t maxlen)
       
  4130 @param s
       
  4131 @param maxlen
       
  4132 
       
  4133   The wcsnlen() function computes the length of the wide-character string s not including the terminating NUL character. It looks at only
       
  4134 first maxlen wide-characters in s and never beyond s+maxlen.
       
  4135 
       
  4136 Examples:
       
  4137 @code
       
  4138 #include <wchar.h>
       
  4139 /* Illustrates how to use wcsnlen API */
       
  4140 size_t example_wcsnlen()
       
  4141 { 
       
  4142   /* input string for which length to be found */
       
  4143  wchar_t *ws=L"testwcsnlen";
       
  4144     
       
  4145   /* find the length of the wide char string by */
       
  4146   /* calling wcsnlen */
       
  4147   size_t retval = wcsnlen(ws,14);
       
  4148  /* return the number of wide chars in the string */
       
  4149  /* if retval is less than 14 Else return 14 as the */
       
  4150  /* length of the string */
       
  4151  return retval;
       
  4152 }
       
  4153 
       
  4154 @endcode
       
  4155 @return   The wcsnlen() returns the number of wide-characters that precede the terminating
       
  4156 NUL character if it is less than maxlen or maxlen if there is a terminating NUL character among maxlen characters pointed by s.
       
  4157 
       
  4158 @see strnlen()
       
  4159 
       
  4160 
       
  4161  
       
  4162 
       
  4163 @publishedAll
       
  4164 @externallyDefinedApi
       
  4165 */
       
  4166 
       
  4167 
       
  4168 
       
  4169 /** @fn  wrealpath(const wchar_t *path, wchar_t *resolved)
       
  4170 @param path
       
  4171 @param resolved
       
  4172 @return   The wrealpath function returns resolved path on success.
       
  4173 If an error occurs, wrealpath returns NULL, and resolved path contains the path which caused the problem.
       
  4174 
       
  4175 @code
       
  4176   The wrealpath function resolves all extra "/"
       
  4177 characters and references to /./ and /../ in path, and copies the resulting absolute path into
       
  4178 the memory referenced by resolved path. The resolved path argument must refer to a buffer capable of storing at least PATH_MAX characters.
       
  4179 
       
  4180  The wrealpath function will resolve both absolute and relative paths
       
  4181 and return the absolute path corresponding to path. All but the last component of path must exist when wrealpath is called.
       
  4182 @endcode
       
  4183 
       
  4184 
       
  4185 
       
  4186 Examples:
       
  4187 @code
       
  4188 #include<stdlib.h>
       
  4189 #include<stdio.h> //printf
       
  4190 #include<sys/stat.h> //S_IWUSR
       
  4191 #include<sys/syslimits.h> //PATH_MAX
       
  4192 #include<unistd.h> //chdir
       
  4193 #inlclude<wchar.h>
       
  4194  
       
  4195 int main()
       
  4196 {
       
  4197  wchar_t resolvepath[PATH_MAX];
       
  4198  FILE *fp = NULL;
       
  4199  wchar_t *rpath = NULL;
       
  4200   
       
  4201  fp = wfopen(L"c:\xyz.txt", L"w");
       
  4202  if(!fp)
       
  4203  {
       
  4204      printf("wfopen failed!!");
       
  4205      return -1;
       
  4206  }
       
  4207     
       
  4208  wmkdir(L"c:\tmdir", S_IWUSR);
       
  4209   
       
  4210  int c = wchdir(L"c:\");
       
  4211  if(c == -1)
       
  4212  {
       
  4213      printf("wchdir failed!!");
       
  4214      return -1;
       
  4215  }
       
  4216   
       
  4217  rpath = wrealpath(L".\tmdir\..\xyz.txt", resolvepath);
       
  4218  printf("resolvepath: L%s
       
  4219 ", resolvepath);
       
  4220  if(rpath != NULL)
       
  4221     printf("rpath: L%s
       
  4222 
       
  4223 ", rpath);
       
  4224   
       
  4225  fclose(fp);
       
  4226  wrmdir(L"c:\tmdir");
       
  4227  wunlink(L"c:\xyz.txt");
       
  4228  return 0;
       
  4229 }
       
  4230 
       
  4231 @endcode
       
  4232  Output
       
  4233 @code
       
  4234 resolvepath: C:\xyz.txt
       
  4235 rpath: C:\xyz.txt
       
  4236 
       
  4237 @endcode
       
  4238  
       
  4239 
       
  4240 @publishedAll
       
  4241 @released
       
  4242 */
       
  4243 
       
  4244 
       
  4245 
       
  4246 /** @fn  wrmdir(const wchar_t *_path)
       
  4247 @param _path
       
  4248 @return   The wrmdir() function returns the value 0 if successful; otherwise the
       
  4249 value -1 is returned and the global variable errno is set to indicate the
       
  4250 error.
       
  4251 
       
  4252   The wrmdir system call
       
  4253 removes a directory file
       
  4254 whose name is given by _path. The directory must not have any entries other
       
  4255 than '.'
       
  4256 and '..'.
       
  4257 
       
  4258 Examples:
       
  4259 @code
       
  4260 /* Detailed description: This test code demonstrates usage of wrmdir systemcall, it removes directory
       
  4261  *  Example from the current working directory.
       
  4262  *
       
  4263  *  Preconditions: Expects empty directoy "Example" in current working directory.
       
  4264  */
       
  4265 #include  <wchar.h>
       
  4266 int main()
       
  4267 {
       
  4268   if(wrmdir(L"Example") < 0 )  
       
  4269   {
       
  4270      printf("wrmdir failed 
       
  4271 ");
       
  4272      return -1;
       
  4273   }
       
  4274   printf("Directory Example removed 
       
  4275 ");
       
  4276   return 0;
       
  4277 }
       
  4278 
       
  4279  Output
       
  4280 Directory Example removed
       
  4281 
       
  4282 @endcode
       
  4283 
       
  4284 @code
       
  4285 
       
  4286 @endcode
       
  4287 
       
  4288 @capability Deferred @ref RFs::RmDir(const TDesC16&)
       
  4289 
       
  4290 @publishedAll
       
  4291 @released
       
  4292 */
       
  4293 
       
  4294 
       
  4295 /** @fn  wstat(const wchar_t *name, struct stat *st)
       
  4296 @param name
       
  4297 @param st
       
  4298 @return   Upon successful completion, the value 0 is returned; otherwise the
       
  4299 value -1 is returned and the global variable errno is set to indicate the error.
       
  4300 
       
  4301 
       
  4302   The wstat system call obtains information about the file pointed to by name. Read, write or execute
       
  4303 permission of the named file is not required, but all directories
       
  4304 listed in the path name leading to the file must be searchable.
       
  4305 
       
  4306  The sb argument is a pointer to a stat structure as defined by \#include \<sys/stat.h\> and into which information is 
       
  4307   placed concerning the file.
       
  4308 
       
  4309  The fields of struct stat
       
  4310 related to the file system are as follows: st_dev The numeric ID of the device containing the file. st_ino The file's inode number. st_nlink  The number of hard links to the file.
       
  4311 
       
  4312  The st_dev and st_ino fields together identify the file uniquely within the system.
       
  4313 
       
  4314  The time-related fields of struct stat
       
  4315 are as follows: st_atime Time when file data last accessed.
       
  4316 Changed by the .Xr utimes 2, read and readv system calls. st_mtime Time when file data last modified. st_ctime Time when file status was last changed (inode data modification). st_birthtime  Time when the inode was created.
       
  4317 
       
  4318  If _POSIX_SOURCE is not defined, the time-related fields are defined as: 
       
  4319 @code
       
  4320 #ifndef _POSIX_SOURCE
       
  4321 #define st_atime st_atimespec.tv_sec
       
  4322 #define st_mtime st_mtimespec.tv_sec
       
  4323 #define st_ctime st_ctimespec.tv_sec
       
  4324 #endif
       
  4325 @endcode
       
  4326 
       
  4327  The size-related fields of the struct stat
       
  4328 are as follows: st_size The file size in bytes. st_blksize  The optimal I/O block size for the file. st_blocks The actual number of blocks allocated for the file in 512-byte units.
       
  4329 As short symbolic links are stored in the inode, this number may
       
  4330 be zero.
       
  4331 
       
  4332  The access-related fields of struct stat
       
  4333 are as follows: st_uid The user ID of the file's owner. st_gid The group ID of the file. st_mode  Status of the file (see below).
       
  4334 
       
  4335  The status information word st_mode has the following bits: 
       
  4336 @code
       
  4337 #define S_IFMT   0170000  // type of file 
       
  4338 #define S_IFIFO  0010000  // named pipe (fifo) 
       
  4339 #define S_IFCHR  0020000  // character special 
       
  4340 #define S_IFDIR  0040000  // directory 
       
  4341 #define S_IFBLK  0060000  // block special 
       
  4342 #define S_IFREG  0100000  // regular 
       
  4343 #define S_IFLNK  0120000  // symbolic link 
       
  4344 #define S_IFSOCK 0140000  // socket 
       
  4345 #define S_IFWHT  0160000  // whiteout 
       
  4346 #define S_ISUID  0004000  // set user id on execution 
       
  4347 #define S_ISGID  0002000  // set group id on execution 
       
  4348 #define S_ISVTX  0001000  // save swapped text even after use 
       
  4349 #define S_IRUSR  0000400  // read permission, owner 
       
  4350 #define S_IWUSR  0000200  // write permission, owner 
       
  4351 #define S_IXUSR  0000100  // execute/search permission, owner
       
  4352 @endcode
       
  4353 
       
  4354 @code
       
  4355 For a list of access modes, see #include <sys/stat.h> The following macros are available 
       
  4356   to test whether a st_mode value passed in the m argument corresponds to a file of the specified type: 
       
  4357   S_ISBLK (m); Test for a block special file. 
       
  4358   S_ISCHR (m); Test for a character special file. 
       
  4359   S_ISDIR (m); Test for a directory. 
       
  4360   S_ISFIFO (m); Test for a pipe or FIFO special file. 
       
  4361   S_ISLNK (m); Test for a symbolic link. 
       
  4362   
       
  4363   NOTE: Inode structure is not supported by Symbian OS and hence link count updation is not possible.
       
  4364 Check for symbolic link would always fail because of this reason. 
       
  4365 
       
  4366 S_ISREG (m); Test for a regular file. 
       
  4367 S_ISSOCK (m); Test for a socket. 
       
  4368 S_ISWHT (m); Test for a whiteout.
       
  4369 @endcode
       
  4370 
       
  4371  The macros evaluate to a non-zero value if the test is true or to the value 
       
  4372   0 if the test is false.
       
  4373 
       
  4374 @code
       
  4375  st_dev The numeric ID of the device containing the file.
       
  4376  st_ino The file's inode number.
       
  4377  st_nlink
       
  4378   The number of hard links to the file.
       
  4379 
       
  4380 @endcode
       
  4381 @code
       
  4382  st_atime Time when file data last accessed.
       
  4383  Changed by the .Xr utimes 2, read and readv system calls.
       
  4384  st_mtime Time when file data last modified.
       
  4385  st_ctime Time when file status was last changed (inode data modification).
       
  4386  st_birthtime
       
  4387   Time when the inode was created.
       
  4388 
       
  4389 @endcode
       
  4390 @code
       
  4391  st_size The file size in bytes.
       
  4392  st_blksize
       
  4393   The optimal I/O block size for the file.
       
  4394  st_blocks The actual number of blocks allocated for the file in 512-byte units.
       
  4395  As short symbolic links are stored in the inode, this number may
       
  4396  be zero.
       
  4397 
       
  4398 @endcode
       
  4399 @code
       
  4400  st_uid The user ID of the file's owner.
       
  4401  st_gid The group ID of the file.
       
  4402  st_mode
       
  4403   Status of the file (see below).
       
  4404 
       
  4405 @endcode
       
  4406 @code
       
  4407  Test for a block special file.
       
  4408  Test for a character special file.
       
  4409  Test for a directory.
       
  4410  Test for a pipe or FIFO special file.
       
  4411  Test for a symbolic link. NOTE: Inode structure is not supported by Symbian OS and hence link count updation is not possible.
       
  4412  Check for symbolic link would always fail because of this reason.
       
  4413  Test for a regular file.
       
  4414  Test for a socket.
       
  4415  Test for a whiteout.
       
  4416 
       
  4417 @endcode
       
  4418 
       
  4419 
       
  4420 Examples:
       
  4421 @code
       
  4422 /* Detailed description: Sample usage of wstat system call
       
  4423  * Preconditions: Example.txt file should be present in working directory
       
  4424  */
       
  4425 #include <fcntl.h>
       
  4426 #include <unistd.h>
       
  4427 #include <sys/types.h>
       
  4428 #include <sys/stat.h>
       
  4429 #include <wchar.h>
       
  4430 int main()
       
  4431 {
       
  4432   struct stat buf;
       
  4433    if(wstat(L"Example.txt"  , &buf;) < 0 )
       
  4434    {
       
  4435       printf("Failed to wstat Example.txt 
       
  4436 ");
       
  4437       return -1;
       
  4438    }
       
  4439    printf("wstat system call succeded 
       
  4440 ");
       
  4441    return 0;
       
  4442  }
       
  4443 
       
  4444 @endcode
       
  4445  Output
       
  4446 @code
       
  4447 wstat system call succeded
       
  4448 
       
  4449 @endcode
       
  4450 @see access()
       
  4451 @see wchmod()
       
  4452 @see chown()
       
  4453 
       
  4454 
       
  4455 
       
  4456 @capability Deferred @ref RFs::Entry(const TDesC16&, TEntry&)
       
  4457 
       
  4458 @publishedAll
       
  4459 @released
       
  4460 */
       
  4461 
       
  4462 
       
  4463 /** @fn  wstat64(const wchar_t *name, struct stat64 *st)
       
  4464 @param name
       
  4465 @param st
       
  4466 @return   Upon successful completion, the value 0 is returned; otherwise the
       
  4467 value -1 is returned and the global variable errno is set to indicate the error.
       
  4468 
       
  4469 The wstat64() function is a 64-bit version of wstat.
       
  4470 
       
  4471 @see wstat()
       
  4472 
       
  4473 @publishedAll
       
  4474 @released
       
  4475 */
       
  4476 
       
  4477 /** @fn  wsystem(const wchar_t *cmd)
       
  4478 @param cmd
       
  4479 @return   The wsystem function
       
  4480 returns the exit status of the child process as returned by
       
  4481 process' exit reason
       
  4482 or -1 if an error occurred when spawning a new process.
       
  4483 
       
  4484   The wsystem function
       
  4485 spawns another process with the argument cmd. The calling process waits for the child process
       
  4486 to finish executing.
       
  4487 
       
  4488  If cmd is a NULL pointer, wsystem will return non-zero to indicate that wsystem is suporrted
       
  4489 and zero if it is not supported.
       
  4490 
       
  4491 
       
  4492 
       
  4493 Examples:
       
  4494 @code
       
  4495 #include <stdlib.h>
       
  4496 #include <stdio.h> //printf
       
  4497 #include <wchar.h>
       
  4498  
       
  4499 int main( void )
       
  4500 {
       
  4501    int retVal = -1;
       
  4502   
       
  4503    printf( "Calling wsystem()...
       
  4504 " );
       
  4505   
       
  4506    /* helloworld.exe is an executable that just prints
       
  4507     * "Hello world!" and it should be created before
       
  4508     * executing this example code.
       
  4509     */
       
  4510    retVal = wsystem(L"c:\sys\bin\helloworld.exe");
       
  4511    
       
  4512    /* Print the return value of wsystem() */
       
  4513    printf( "wsystem() returned: %d", retVal );
       
  4514    
       
  4515    return 0;
       
  4516 }
       
  4517 
       
  4518 @endcode
       
  4519  Output
       
  4520 @code
       
  4521 Calling wsystem()...
       
  4522 wsystem() returned: -1
       
  4523 
       
  4524 @endcode
       
  4525 @see wpopen()
       
  4526 
       
  4527 
       
  4528  
       
  4529 
       
  4530 @publishedAll
       
  4531 @released
       
  4532 */
       
  4533 
       
  4534 
       
  4535 
       
  4536 /** @fn  wunlink(const wchar_t *_path)
       
  4537 @param _path
       
  4538 @return   Upon successful completion, 0 is returned. Otherwise, -1 is returned and errno set to indicate the error.
       
  4539 
       
  4540   The wunlink system call removes the link named by _path from its file system.
       
  4541 
       
  4542  Symbian OS simulates links so there is no reference count and files are unaware 
       
  4543   of links. Calling unlink on a file will always close the file, regardless of 
       
  4544   whether there is another link.
       
  4545 
       
  4546  The _path argument may not be a directory.
       
  4547 
       
  4548 Examples:
       
  4549 @code
       
  4550 /*
       
  4551 * Detailed description: Example to wunlink a link file
       
  4552 * Precondition: A file by name "Link" should exist in
       
  4553 *                c: drive.
       
  4554 */
       
  4555 #include <wchar.h>
       
  4556 #include <stdio.h>
       
  4557 int main(void)
       
  4558 {
       
  4559     if(wunlink(L"C:\Link"))
       
  4560     {
       
  4561          printf("wunlink on link file failed");
       
  4562     }
       
  4563     printf("wunlink on link file succeeded");
       
  4564 }
       
  4565 
       
  4566 @endcode
       
  4567  Output
       
  4568 @code
       
  4569 wunlink on link file succeeded.
       
  4570 
       
  4571 @endcode
       
  4572 @see close()
       
  4573 @see rmdir()
       
  4574 
       
  4575 
       
  4576 
       
  4577 @capability Deferred @ref RFs::Att(const TDesC16&, unsigned&)
       
  4578 @capability Deferred @ref RFs::SetAtt(const TDesC16&, unsigned, unsigned)
       
  4579 @capability Deferred @ref RFs::Delete(const TDesC16&)
       
  4580 
       
  4581 @publishedAll
       
  4582 @released
       
  4583 */
       
  4584 
       
  4585 
       
  4586 
       
  4587 /** @fn  wpopen(const wchar_t* command, const wchar_t* wmode )
       
  4588 @param command
       
  4589 @param wmode
       
  4590 @return   The wpopen function returns NULL if the fork
       
  4591 or pipe calls fail,
       
  4592 or if it cannot allocate memory. And returns stream pointer on success.
       
  4593 
       
  4594   The wpopen function opens a process by creating a pipe and invoking the shell (creating a process). Since a pipe is by definition unidirectional, The wmode argument may specify only reading or writing, not both; the resulting stream is correspondingly read-only ("r") or write-only "w". If type is anything other than this, then the behavior is undefined.
       
  4595 
       
  4596  The command argument is a pointer to a null-terminated wide character string containing a shell command line.
       
  4597 This command is passed to /bin/sh using the - c flag; interpretation, if any, is performed by the shell.
       
  4598 
       
  4599  The return value from wpopen is a normal standard I/O stream in all respects
       
  4600 save that it must be closed with pclose rather than fclose. Writing to such a stream
       
  4601 writes to the standard input of the command;
       
  4602 the command's standard output is the same as that of the process that called wpopen, unless this is altered by the command itself.
       
  4603 Conversely, reading from a "wpopened"
       
  4604 stream reads the command's standard output, and
       
  4605 the command's standard input is the same as that of the process that called wpopen.
       
  4606 
       
  4607  Note that output wpopen streams are fully buffered by default.
       
  4608 
       
  4609 
       
  4610 
       
  4611 @see popen()
       
  4612 @see pclose()
       
  4613 @see pipe()
       
  4614 @see fclose()
       
  4615 @see fflush()
       
  4616 @see fopen()
       
  4617 @see system()
       
  4618 
       
  4619 
       
  4620 Bugs:
       
  4621 
       
  4622  Since the standard input of a command opened for reading
       
  4623 shares its seek offset with the process that called wpopen, if the original process has done a buffered read,
       
  4624 the command's input position may not be as expected.
       
  4625 Similarly, the output from a command opened for writing
       
  4626 may become intermingled with that of the original process.
       
  4627 The latter can be avoided by calling fflush before wpopen. Failure to execute the shell
       
  4628 is indistinguishable from the shell's failure to execute command,
       
  4629 or an immediate exit of the command.
       
  4630 The only hint is an exit status of 127. The wpopen function always calls sh, never calls csh. 
       
  4631  
       
  4632 
       
  4633 @publishedAll
       
  4634 @released
       
  4635 */
       
  4636 
       
  4637 
       
  4638 
       
  4639 /** @fn  wopen(const wchar_t *file, int flags, ...)
       
  4640 @param file
       
  4641 @param flags
       
  4642 @param ...
       
  4643 @return   If successful, wopen returns a non-negative integer, termed a file descriptor.
       
  4644 It returns -1 on failure, and sets errno to indicate the error.
       
  4645 
       
  4646   The wide character file-name specified by the wide character string file is opened
       
  4647 for reading and/or writing as specified by the
       
  4648 argument flags and the file descriptor returned to the calling process.
       
  4649 The flags argument may indicate the file is to be
       
  4650 created if it does not exist (by specifying the O_CREAT flag).
       
  4651 In this case wopen requires a third argument mode_t mode ,
       
  4652 and the file is created with mode mode as described in chmod and modified by the process' umask value (see umask
       
  4653 
       
  4654 
       
  4655 
       
  4656  The flags specified are formed by or 'ing the following values
       
  4657 
       
  4658 @code
       
  4659  O_RDONLYopen for reading only
       
  4660 O_WRONLYopen for writing only
       
  4661 O_RDWRopen for reading and writing
       
  4662 O_APPENDappend on each write
       
  4663 O_CREATcreate file if it does not exist
       
  4664 O_TRUNCtruncate size to 0
       
  4665 O_EXCLerror if create and file exists
       
  4666 @endcode
       
  4667 
       
  4668  Opening a file with O_APPEND set causes each write on the file
       
  4669 to be appended to the end.
       
  4670 If O_TRUNC is specified and the
       
  4671 file exists, the file is truncated to zero length.
       
  4672 If O_EXCL is set with O_CREAT and the file already
       
  4673 exists, wopen returns an error.
       
  4674 This may be used to
       
  4675 implement a simple exclusive access locking mechanism.
       
  4676 If O_EXCL is set and the last component of the path is
       
  4677 a symbolic link, wopen will fail even if the symbolic
       
  4678 link points to a non-existent name.
       
  4679 
       
  4680 
       
  4681 
       
  4682  If successful, wopen returns a non-negative integer, termed a file descriptor.
       
  4683 It returns -1 on failure.
       
  4684 The file pointer used to mark the current position within the
       
  4685 file is set to the beginning of the file.
       
  4686 
       
  4687  When a new file is created it is given the group of the directory
       
  4688 which contains it.
       
  4689 
       
  4690  The new descriptor is set to remain wopen across execve system calls; see close and fcntl .
       
  4691 
       
  4692  The system imposes a limit on the number of file descriptors
       
  4693 wopen simultaneously by one process.
       
  4694 The getdtablesize system call returns the current system limit.
       
  4695 
       
  4696 
       
  4697 
       
  4698  
       
  4699 
       
  4700  Notes:
       
  4701 
       
  4702 @code
       
  4703 1) Mode values for group and others are ignored
       
  4704 
       
  4705  2) Execute bit and setuid on exec bit are ignored.
       
  4706 
       
  4707  3) The default working directory of a process is initalized to C: \p rivate \U ID 
       
  4708   (UID of the calling application) and any data written into this directory persists 
       
  4709   between phone resets.
       
  4710 
       
  4711  4) If the specified file is a symbolic link and the file it is pointing to 
       
  4712   is invalid, the symbolic link file will be automatically removed.
       
  4713 
       
  4714  5) A file in cannot be created with write-only permissions. Attempting to create 
       
  4715   a file with write-only permissions will result in a file with read-write permission.
       
  4716 
       
  4717  6) Creating a new file with the O_CREAT flag does not alter the time stamp 
       
  4718   of the parent directory.
       
  4719 
       
  4720  7) A file has only two time stamps: access and modification. Creation time 
       
  4721   stamp of the file is not supported and access time stamp is initially set equal 
       
  4722   to modification time stamp.
       
  4723 @endcode
       
  4724 
       
  4725 Examples:
       
  4726 @code
       
  4727 /*This example creates a file in the current working directory and
       
  4728  * opens it in read-write mode.
       
  4729  */
       
  4730 #include <sys/types.h>
       
  4731 #include <sys/stat.h>
       
  4732 #include <wchar.h>
       
  4733 int main()
       
  4734 {
       
  4735   int fd = 0 ;
       
  4736    fd = wopen(L"Example.txt" , O_CREAT | O_EXCL , 0666) ;
       
  4737    if(fd < 0 ) 
       
  4738    {
       
  4739       printf("Failed to create and wopen file in current working directory 
       
  4740 ") ;
       
  4741       return -1 ;
       
  4742    }
       
  4743    printf("File created and opened in current working directory 
       
  4744 "  ) ;
       
  4745    return 0 ;
       
  4746 }
       
  4747 
       
  4748 @endcode
       
  4749  Output
       
  4750 @code
       
  4751 File created and opened in current working directory
       
  4752 
       
  4753 @endcode
       
  4754 @see chmod()
       
  4755 @see close()
       
  4756 @see dup()
       
  4757 @see getdtablesize()
       
  4758 @see lseek()
       
  4759 @see read()
       
  4760 @see umask()
       
  4761 @see write()
       
  4762 @see fopen()
       
  4763 @see open()
       
  4764 
       
  4765 
       
  4766 
       
  4767 @capability Deferred @ref RFs::Entry(const TDesC16&, TEntry&)
       
  4768 
       
  4769 @publishedAll
       
  4770 @released
       
  4771 */
       
  4772 
       
  4773 /** @fn  wopen64(const wchar_t *file, int flags, ...)
       
  4774 @param file
       
  4775 @param flags
       
  4776 @param ...
       
  4777 @return   If successful, wopen returns a non-negative integer, termed a file descriptor.
       
  4778 It returns -1 on failure, and sets errno to indicate the error.
       
  4779 
       
  4780 The wopen64() function is a 64-bit version of wopen.
       
  4781 
       
  4782 @see wopen()
       
  4783 
       
  4784 @publishedAll
       
  4785 @released
       
  4786 */
       
  4787 
       
  4788 
       
  4789 /** @fn  wfopen(const wchar_t *file, const wchar_t *mode)
       
  4790 @param file
       
  4791 @param mode
       
  4792 @return   Upon successful completion wfopen returns a FILE pointer. Otherwise, NULL is returned and the global variable errno is set to indicate the error.
       
  4793 
       
  4794 @code
       
  4795  "r" Open text file for reading.
       
  4796  The stream is positioned at the beginning of the file.
       
  4797  "r+" Open for reading and writing.
       
  4798  The stream is positioned at the beginning of the file.
       
  4799  "w" Truncate to zero length or create text file for writing.
       
  4800  The stream is positioned at the beginning of the file.
       
  4801  "w+" Open for reading and writing.
       
  4802  The file is created if it does not exist, otherwise it is truncated.
       
  4803  The stream is positioned at the beginning of the file.
       
  4804  "a" Open for writing.
       
  4805  The file is created if it does not exist.
       
  4806  The stream is positioned at the end of the file.
       
  4807  Subsequent writes to the file will always end up at the then current
       
  4808  end of file, irrespective of any intervening fseek or similar.
       
  4809  "a+" Open for reading and writing.
       
  4810  The file is created if it does not exist.
       
  4811  The stream is positioned at the end of the file.
       
  4812  Subsequent writes to the file will always end up at the then current
       
  4813  end of file, irrespective of any intervening fseek or similar.
       
  4814 
       
  4815 @endcode
       
  4816   
       
  4817 
       
  4818  The mode string can also include the letter "b" either as a third character or
       
  4819 as a character between the characters in any of the two-character strings described above.
       
  4820 This is strictly for compatibility with -isoC and has no effect; the "b" is ignored.
       
  4821 
       
  4822  Reads and writes may be intermixed on read/write streams in any order,
       
  4823 and do not require an intermediate seek as in previous versions of stdio. This is not portable to other systems, however; ANSI C requires that
       
  4824 a file positioning function intervene between output and input, unless
       
  4825 an input operation encounters end-of-file.
       
  4826 
       
  4827 
       
  4828 
       
  4829 Examples:
       
  4830 @code
       
  4831 /* this program shows opening  in write mode,write data and close */
       
  4832 /* again open in append mode and write data */
       
  4833 /* Check file c:\wfopen.txt */
       
  4834 #include <stdio.h>
       
  4835 int main(void)
       
  4836         {
       
  4837         FILE *fp;       
       
  4838         wchar_t* name = L"c:\wfopen.txt";
       
  4839         if ((fp = wfopen (name, L"wb")) == NULL)
       
  4840                 {
       
  4841                 printf("Error creating file");
       
  4842                 return -1;
       
  4843                 }
       
  4844         printf("Opened file 
       
  4845 ");
       
  4846         fprintf(fp, "This is the first line
       
  4847 ");
       
  4848         printf("Wrote to file
       
  4849 ");
       
  4850         fclose (fp);
       
  4851         printf("Closed file
       
  4852 ");
       
  4853         if ((fp = wfopen (name, L"a")) == NULL)
       
  4854                 {
       
  4855                 printf("Error opening file");
       
  4856                 return -1;
       
  4857                 }
       
  4858         printf("Opened file for appending
       
  4859 ");
       
  4860         fprintf(fp, "This is the second line
       
  4861 ");
       
  4862         fclose (fp);
       
  4863         printf("closed file, check output in c:\ wfopen.txt file
       
  4864 ");
       
  4865         wunlink(name);
       
  4866         return 0;
       
  4867 }
       
  4868 
       
  4869 @endcode
       
  4870  Output
       
  4871 @code
       
  4872 Opened file
       
  4873 Wrote to file
       
  4874 Closed file
       
  4875 Opened file for appending
       
  4876 closed file, check output in c:\ wfopen.txt file
       
  4877 
       
  4878 @endcode
       
  4879 
       
  4880 Errors:
       
  4881 
       
  4882 [EINVAL] The mode argument to wfopen, was invalid.  
       
  4883 The wfopen, functions may also fail and set errno for any of the errors specified for the routine malloc. The wfopen function may also fail and set errno for any of the errors specified for the routine wopen. 
       
  4884 
       
  4885 Note:
       
  4886 
       
  4887 @code
       
  4888  1) Mode values for group and others will be ignored for file creation,execute bit and setuid on exec bit on an file don't have any effect while file creation.
       
  4889  Default working directory of a process is initialized to C:\private\UID (UID of the calling application) and any data written into this directory persists between phone resets. 
       
  4890 
       
  4891  2) If the specified file is a symbolic link and the file it is pointing to 
       
  4892  is invalid the symbolic link file will be automatically removed.
       
  4893 @endcode
       
  4894 
       
  4895 Limitations:
       
  4896 
       
  4897 A file in cannot be created with write-only permission and attempting to 
       
  4898 create one will result in a file with read-write permission. Creating a new file 
       
  4899 with the O_CREAT flag does not alter the time stamp of its parent directory. The 
       
  4900 newly created entry has only two time stamps: access and modification. Creation 
       
  4901 time stamp is not supported and access time stamp is initially equal to modification 
       
  4902 time stamp. open, fclose and fflush.
       
  4903 
       
  4904 @see open()
       
  4905 @see fclose()
       
  4906 @see fileno()
       
  4907 @see fseek()
       
  4908 @see fopen()
       
  4909 
       
  4910 
       
  4911 
       
  4912 @capability Deferred @ref RFs::Entry(const TDesC16&, TEntry&)
       
  4913 
       
  4914 @publishedAll
       
  4915 @released
       
  4916 */
       
  4917 
       
  4918 /** @fn  wfopen64(const wchar_t *file, const wchar_t *mode)
       
  4919 @param file
       
  4920 @param mode
       
  4921 @return   Upon successful completion wfopen returns a FILE pointer. Otherwise, NULL is returned and the global variable errno is set to indicate the error.
       
  4922 
       
  4923 The wfopen64() function is a 64-bit version of wfopen.
       
  4924 
       
  4925 @see wfopen()
       
  4926 
       
  4927 @publishedAll
       
  4928 @released
       
  4929 */
       
  4930 
       
  4931 
       
  4932 
       
  4933 /** @fn  wrename(const wchar_t *oldpath, const wchar_t *newpath)
       
  4934 @param oldpath
       
  4935 @param newpath
       
  4936 @return   The wrename() function returns the value 0 if successful; otherwise it returns 
       
  4937 -1 and sets the global variable errno to indicate the error.
       
  4938 
       
  4939   The wrename system call
       
  4940 causes the link with the wide character name oldpath to be renamed with the wide character name newpath. If newpath exists, it is first removed.
       
  4941 Both oldpath and newpath must be of the same type (that is, both directories or both
       
  4942 non-directories), and must reside on the same file system.
       
  4943 
       
  4944  If the final component of from is a symbolic link the symbolic link is renamed, not the file or 
       
  4945   directory to which it points.
       
  4946 
       
  4947  If a file with a symbolic link pointing to it is renamed, then
       
  4948 a subsequent open call on the symbolic link file would automatically remove the link file, i.e
       
  4949 consider a symbolic file link.x pointing to a file abc.x. If the file abc.x is
       
  4950 renamed to abcd.x then, a subsequent open call on link.x file would automatically remove link.x file.
       
  4951 
       
  4952  Notes:
       
  4953 
       
  4954  wrename fails if from and to are files and are in use (i.e. if any either of the files is open).
       
  4955 
       
  4956  Parent directory time stamps are uneffected.
       
  4957 
       
  4958  The new entry has only two time stamps: modification and access. The access 
       
  4959   time stamp is initially equal to modification time stamp.
       
  4960 
       
  4961 
       
  4962 
       
  4963 Examples:
       
  4964 @code
       
  4965 /* Detailed description  : This sample code demonstrates usage of wrename system call.
       
  4966  * Preconditions : Example.cfg file should be present in the current working directory.
       
  4967  */
       
  4968 #include <wchar.h>
       
  4969 #include <stdio.h>
       
  4970 int main()
       
  4971 {
       
  4972   if(wrename(L"Example.txt" , L"Example2.txt") < 0 )  {
       
  4973      printf("Failed to wrename Example.txt
       
  4974 ");
       
  4975      return -1;
       
  4976   }
       
  4977   printf("wrename successful 
       
  4978 ");
       
  4979   return 0;
       
  4980 }
       
  4981 
       
  4982 @endcode
       
  4983  Output:
       
  4984 @code
       
  4985 wrename successful
       
  4986 
       
  4987 @endcode
       
  4988 
       
  4989 Errors:
       
  4990 
       
  4991 The wrename system call will fail and neither of the argument files will be affected if: 
       
  4992 [EINVAL] Invalid argument.  
       
  4993 [ENAMETOOLONG]  A component of a path exceeded 255 characters.  
       
  4994 [ENOENT]  The named file does not exist.  
       
  4995 [EACCES]  Search permission is denied for a component of the path prefix.  
       
  4996 [EACCES]  The from argument is a parent directory of to, or an attempt is made to wrename ‘.’ or ‘..’.  
       
  4997 
       
  4998 
       
  4999 @see open()
       
  5000 @see symlink()
       
  5001 @see rename()
       
  5002 
       
  5003 
       
  5004 
       
  5005 @capability Deferred @ref RFs::Rename(const TDesC& anOldName,const TDesC& aNewName)
       
  5006 @capability Deferred @ref RFs::Entry(const TDesC16&, TEntry&)
       
  5007 @capability Deferred @ref RFs::RmDir(const TDesC16&)
       
  5008 @capability Deferred @ref RFs::SetAtt(const TDesC16&, unsigned, unsigned)
       
  5009 @capability Deferred @ref RFs::Delete(const TDesC16&)
       
  5010 
       
  5011 @publishedAll
       
  5012 @released
       
  5013 */
       
  5014 
       
  5015 
       
  5016 
       
  5017 /** @fn  wchdir(const wchar_t *_path)
       
  5018 @param _path
       
  5019 @return   Upon successful completion, the value 0 is returned; otherwise the
       
  5020 value -1 is returned and the global variable errno is set to indicate the
       
  5021 error.
       
  5022 
       
  5023   The _path argument points to the pathname of a directory which is a wide character string.
       
  5024 The wchdir system call
       
  5025 causes the named directory
       
  5026 to become the current working directory, that is,
       
  5027 the starting point for _path searches of pathnames not beginning with
       
  5028 a slash, '/.'
       
  5029 
       
  5030 
       
  5031 
       
  5032 Examples:
       
  5033 @code
       
  5034 #include<wchar.h>                       /* wmkdir, wrmdir */
       
  5035 #include <sys/stat.h>                   /* S_IRWXU */
       
  5036 #include <stdio.h>                      /* printf */
       
  5037 int main()
       
  5038 {
       
  5039         int ret_wmkdir = wmkdir(L"dirName", S_IRWXU);                   /* create directory */
       
  5040         if(ret_wmkdir < 0)
       
  5041                 {
       
  5042                 printf("error creating directory");
       
  5043                 return -1;
       
  5044                 }
       
  5045         else
       
  5046                 {
       
  5047                 int ret_wchdir = wchdir(L"dirName");                    /* change directory */
       
  5048                 if(ret_wchdir < 0)
       
  5049                         {
       
  5050                         printf("error changing directory");
       
  5051                         return -1;
       
  5052                         }
       
  5053                 else
       
  5054                         {
       
  5055                         printf("working directory changed");
       
  5056                         }
       
  5057                         wrmdir(L"dirname");                             /* remove directory */                  
       
  5058                 }
       
  5059         return 0;                       
       
  5060 }
       
  5061 
       
  5062 @endcode
       
  5063  Output
       
  5064 @code
       
  5065 working directory changed
       
  5066 
       
  5067 @endcode
       
  5068 @see chdir()
       
  5069 
       
  5070 
       
  5071 
       
  5072 @capability Deferred @ref RFs::Att(const TDesC16&, unsigned&)
       
  5073 @capability Deferred @ref RFs::SetSessionPath(const TDesC16&)
       
  5074 
       
  5075 @publishedAll
       
  5076 @released
       
  5077 */
       
  5078 
       
  5079 
       
  5080 
       
  5081 /** @fn  wchmod(const wchar_t *_path, mode_t _mode)
       
  5082 @param _path
       
  5083 @param _mode
       
  5084 @return   Upon successful completion, the value 0 is returned; otherwise the
       
  5085 value -1 is returned and the global variable errno is set to indicate the
       
  5086 error.
       
  5087 
       
  5088   The file permission bits of the wide character file-name specified by _path are changed to _mode. The wchmod system call verifies that the process owner (user) either owns the file specified by _path is the super-user. 
       
  5089 A mode is created from or’d permission bit masks defined in   \#include \<sys/stat.h\>:
       
  5090 
       
  5091 @code
       
  5092 #define S_IRWXU 0000700    // RWX mask for owner
       
  5093 #define S_IRUSR 0000400    // R for owner 
       
  5094 #define S_IWUSR 0000200    // W for owner 
       
  5095 #define S_IXUSR 0000100    // X for owner 
       
  5096 #define S_IRWXG 0000070    // RWX mask for group 
       
  5097 #define S_IRGRP 0000040    // R for group 
       
  5098 #define S_IWGRP 0000020    // W for group 
       
  5099 #define S_IXGRP 0000010    // X for group 
       
  5100 #define S_IRWXO 0000007    // RWX mask for other 
       
  5101 #define S_IROTH 0000004    // R for other 
       
  5102 #define S_IWOTH 0000002    // W for other 
       
  5103 #define S_IXOTH 0000001    // X for other 
       
  5104 #define S_ISUID 0004000    // set user id on execution 
       
  5105 #define S_ISGID 0002000    // set group id on execution 
       
  5106 #ifndef __BSD_VISIBLE
       
  5107 #define S_ISTXT 0001000    // sticky bit 
       
  5108 #endif
       
  5109 @endcode
       
  5110 
       
  5111  Note : sticky bit and setuid on exec bit are not supported, permission values for users is considered while premissions values for group and others are ignored(As there is no concept of group and others). An attempt to change file permission to write-only changes the file permission to read-write. Permissions for directory will be ignored.
       
  5112 
       
  5113 
       
  5114 Examples:
       
  5115 @code
       
  5116 #include <wchar.h>              /* wchmode, wfopen */
       
  5117 #include <sys/stat.h>           /* S_IWUSR */
       
  5118 #include <stdio.h>              /* printf */
       
  5119 int main()
       
  5120 {
       
  5121         FILE * wfp = wfopen(L"fileName.txt", L"wb");            /* create file */
       
  5122         if(wfp)
       
  5123                 {
       
  5124                 fclose(wfp);                                    /* close file */
       
  5125                 int ret = wchmod(L"fileName", S_IWUSR);         /* change mode */
       
  5126                 if(ret < 0)
       
  5127                         {
       
  5128                         printf("error changing mode");
       
  5129                         return -1;
       
  5130                         }
       
  5131                 else
       
  5132                         {
       
  5133                         printf("mode changed");
       
  5134                         }
       
  5135                 }
       
  5136         else
       
  5137         {
       
  5138         printf("error creating file");
       
  5139         return -1;
       
  5140         }
       
  5141         return 0;
       
  5142 }
       
  5143 
       
  5144 @endcode
       
  5145  Output
       
  5146 @code
       
  5147 mode changed
       
  5148 
       
  5149 @endcode
       
  5150 @see chmod()
       
  5151 @see chown()
       
  5152 @see open()
       
  5153 @see stat()
       
  5154 
       
  5155 
       
  5156 
       
  5157 @capability Deferred @ref RFs::SetAtt(const TDesC16&, unsigned, unsigned)
       
  5158 
       
  5159 @publishedAll
       
  5160 @released
       
  5161 */
       
  5162 
       
  5163 
       
  5164 
       
  5165 /** @fn  wgetcwd(wchar_t *_buf, size_t _size)
       
  5166 @param _buf
       
  5167 @param _size
       
  5168 @return   Upon successful completion, a pointer to the pathname is returned.
       
  5169 Otherwise a NULL pointer is returned and the global variable errno is set to indicate the error.
       
  5170 In addition, wgetcwd copies the error message associated with errno into the memory referenced by _buf.
       
  5171 
       
  5172   The wgetcwd function copies the absolute pathname of the current working directory
       
  5173 into the memory referenced by _buf which is a wchar_t pointer
       
  5174 and returns a pointer to _buf. The size argument is the _size, in bytes, of the array referenced by _buf.
       
  5175 
       
  5176  If _buf is NULL, space is allocated as indicated by size to store the pathname and the current working directory is
       
  5177 returned as long as the _size bytes are sufficient to hold the working directory name.
       
  5178 This space may later be free'd.
       
  5179 
       
  5180  This routine has traditionally been used by programs to save the
       
  5181 name of a working directory for the purpose of returning to it.
       
  5182 A much faster and less error-prone method of accomplishing this is to
       
  5183 open the current directory ('.')
       
  5184 and use the fchdir function to return.
       
  5185 
       
  5186 Examples:
       
  5187 @code
       
  5188 #include<wchar.h>
       
  5189 #include<stdio.h>
       
  5190 #include <stdlib.h>
       
  5191 #define BUF_SIZE 100
       
  5192   
       
  5193 int main()
       
  5194 {
       
  5195  int c;                 
       
  5196  long size = BUF_SIZE;
       
  5197  wchar_t *buf = NULL;
       
  5198  wchar_t *ptr = NULL;
       
  5199   
       
  5200  c = wchdir("c:\");            /* change directory to c: */
       
  5201   
       
  5202  buf = (wchar_t *)malloc((size_t)size);
       
  5203   
       
  5204  if (buf != NULL && c == 0)
       
  5205         {
       
  5206         ptr = wgetcwd(buf, (size_t)size);               /* call wgetcwd to fetch the current directory */
       
  5207         printf("wgetcwd returned: %s
       
  5208 ", ptr);
       
  5209         }
       
  5210  free(buf);
       
  5211  return 0;
       
  5212 }
       
  5213 
       
  5214 @endcode
       
  5215  Output
       
  5216 @code
       
  5217 wgetcwd returned: c:\
       
  5218 
       
  5219 @endcode
       
  5220 
       
  5221 Notes:
       
  5222 
       
  5223  The wgetcwd function returns the default working directory as c:\\private\\XXXXXXXX (where XXXXXXXX is the UID of the process) as the 
       
  5224 default session path is initialised to c:\\private\\current_process'_UID in Symbian OS.
       
  5225 
       
  5226 @see chdir()
       
  5227 @see malloc()
       
  5228 @see strerror()
       
  5229 @see wgetcwd()
       
  5230 
       
  5231 
       
  5232  
       
  5233 
       
  5234 @publishedAll
       
  5235 @released
       
  5236 */
       
  5237 
       
  5238 
       
  5239 
       
  5240 /** @fn  wmkdir(const wchar_t *_path, mode_t _mode)
       
  5241 @param _path
       
  5242 @param _mode
       
  5243 @return   The wmkdir() function returns the value 0 if successful; otherwise the
       
  5244 value -1 is returned and the global variable errno is set to indicate the
       
  5245 error.
       
  5246 
       
  5247   The directory with the wide character name _path is created with the access permissions specified by _mode.
       
  5248 
       
  5249  Notes:
       
  5250 
       
  5251  mode is ignored.
       
  5252 
       
  5253  Parent directory time stamps are not updated.
       
  5254 
       
  5255 Examples:
       
  5256 @code
       
  5257 #include <sys/stat.h>
       
  5258 #include <wchar.h>
       
  5259 #include <stdio.h>
       
  5260 int main()
       
  5261 {
       
  5262   if(wmkdir(L"Example" , 0666) < 0 )  
       
  5263   {
       
  5264       printf("Directory creation failed 
       
  5265 ");
       
  5266       return -1;
       
  5267   }
       
  5268   printf("Directory Example created 
       
  5269 ");
       
  5270   return 0;
       
  5271 }
       
  5272 
       
  5273 @endcode
       
  5274  Output
       
  5275 @code
       
  5276 Directory Example created
       
  5277 
       
  5278 @endcode
       
  5279 @see chmod()
       
  5280 @see stat()
       
  5281 @see umask()
       
  5282 @see mkdir()
       
  5283 
       
  5284 
       
  5285 
       
  5286 @capability Deferred @ref RFs::MkDir(const TDesC16&)
       
  5287 
       
  5288 @publishedAll
       
  5289 @released
       
  5290 */
       
  5291 
       
  5292 
       
  5293 
       
  5294 /** @fn  wclosedir(WDIR *wdp)
       
  5295 @param wdp
       
  5296 @return   The wclosedir function returns 0 on success and on failure -1 is returned and the global variable errno is set to indicate the error..
       
  5297 
       
  5298  
       
  5299 
       
  5300  The wclosedir function closes the named directory stream and frees the structure associated with the dirp pointer.
       
  5301 
       
  5302 
       
  5303 
       
  5304 Examples:
       
  5305 @code
       
  5306 /* Detailed description: This test code demonstrates usage of wclose  system call.*
       
  5307  * Preconditions: Expects Test directory to be present in current working directory.
       
  5308  */
       
  5309  #include <wchar.h>
       
  5310  #include <dirent.h>
       
  5311 int main()
       
  5312 {
       
  5313   WDIR *DirHandle;
       
  5314   if(!(DirHandle = wopendir(L"Test") ) )
       
  5315   {
       
  5316      printf("Failed to open directoy Test 
       
  5317 ");
       
  5318      return -1;
       
  5319   }
       
  5320   if(wclosedir(DirHandle) < 0 ) 
       
  5321   {
       
  5322      printf("Close dir failed 
       
  5323 ");
       
  5324      return -1;
       
  5325   }
       
  5326   printf("Directory Test closed 
       
  5327 ");
       
  5328   return 0;
       
  5329 }
       
  5330 
       
  5331 @endcode
       
  5332  Output
       
  5333 @code
       
  5334 Directory Test closed
       
  5335 
       
  5336 @endcode
       
  5337 @see wopendir()
       
  5338 @see wreaddir()
       
  5339 @see opendir()
       
  5340 @see readdir()
       
  5341 
       
  5342 
       
  5343  
       
  5344 
       
  5345 @publishedAll
       
  5346 @released
       
  5347 */
       
  5348 
       
  5349 
       
  5350 
       
  5351 /** @fn  wreaddir(WDIR *wdp)
       
  5352 @param wdp
       
  5353 @return   The wreaddir function returns a pointer to a wdirent structure,
       
  5354 or NULL if an error occurs or end-of-file is reached.
       
  5355 
       
  5356  
       
  5357 
       
  5358  The wreaddir function
       
  5359 returns a wdirent pointer to the next directory entry.
       
  5360 It returns NULL upon reaching the end of the directory or detecting an invalid wreaddir operation on the directory stream. The new position reverts to the one associated with the directory stream when the wtelldir operation was performed.
       
  5361 
       
  5362  
       
  5363 
       
  5364  Note: wreaddir operates on a static directory structure created by wopendir . Asynchronous operations on the directory itself will not 
       
  5365   be reflected in calls to wreaddir .
       
  5366 
       
  5367 
       
  5368 
       
  5369 Examples:
       
  5370 @code
       
  5371  /* Detailed description: Sample usage of wreaddir call
       
  5372   * Preconditions:  Example Directory should be present in current working directory and should contain atleast one file/directory.
       
  5373   */
       
  5374 #include <dirent.h>
       
  5375 #include <unistd.h>
       
  5376 #include <wchar.h>
       
  5377 int main()
       
  5378 {
       
  5379   WDIR *dirName;
       
  5380   struct wdirent *Dir;
       
  5381   dirName = wopendir(L"Example");
       
  5382   if(dirName == NULL )  {
       
  5383      printf("Failed to open directory 
       
  5384 ");
       
  5385      return -1;
       
  5386   }
       
  5387   if(!(Dir = wreaddir(dirName))  )  {
       
  5388     printf("Read dir failed  
       
  5389 ");
       
  5390     return -1;
       
  5391   }
       
  5392  printf("Directory Example read 
       
  5393 ");
       
  5394  wclosedir(dirName);
       
  5395  return 0;
       
  5396 }
       
  5397 
       
  5398 @endcode
       
  5399  Output
       
  5400 @code
       
  5401 Directory Example read
       
  5402 
       
  5403 @endcode
       
  5404 @see wopendir()
       
  5405 @see wreaddir()
       
  5406 @see wrewinddir()
       
  5407 @see wtelldir()
       
  5408 @see wseekdir()
       
  5409 @see wclosedir()
       
  5410 @see opendir()
       
  5411 @see readdir()
       
  5412 @see rewinddir()
       
  5413 @see telldir()
       
  5414 @see seekdir()
       
  5415 @see closedir()
       
  5416 @see close()
       
  5417 @see lseek()
       
  5418 @see open()
       
  5419 @see read()
       
  5420 
       
  5421 
       
  5422  
       
  5423 
       
  5424 @publishedAll
       
  5425 @released
       
  5426 */
       
  5427 
       
  5428 
       
  5429 /** @fn  wreaddir64(WDIR *wdp)
       
  5430 @param wdp
       
  5431 @return   The wreaddir64 function returns a pointer to a wdirent64 structure,
       
  5432 or NULL if an error occurs or end-of-file is reached.
       
  5433 
       
  5434 The wreaddir64() function is a 64-bit version of wreaddir.
       
  5435 
       
  5436 @see wreaddir() 
       
  5437 
       
  5438 @publishedAll
       
  5439 @released
       
  5440 */
       
  5441 
       
  5442 /** @fn  wrewinddir(WDIR *wdp)
       
  5443 @param wdp
       
  5444 @return   The wrewinddir function returns no value.
       
  5445 
       
  5446  
       
  5447 
       
  5448  The wrewinddir function
       
  5449 function resets the position of the named directory stream pointed by 'dirp' to the beginning of the directory.
       
  5450 
       
  5451 
       
  5452 
       
  5453 Examples:
       
  5454 @code
       
  5455  /* Detailed description: Sample usage of wreaddir call
       
  5456   * Preconditions:  Example Directory should be present in current working directory and should contain say 4 files/directories.
       
  5457   */
       
  5458 #include <dirent.h>
       
  5459 #include <unistd.h>
       
  5460 #include <wchar.h>
       
  5461 int main()
       
  5462 {
       
  5463   WDIR *dirName;
       
  5464   off_t offset;
       
  5465   struct wdirent *Dir;
       
  5466   dirName = wopendir(L"Example");
       
  5467   if(dirName == NULL )  {
       
  5468      printf("Failed to open directory 
       
  5469 ");
       
  5470      return -1;
       
  5471   }
       
  5472   wseekdir(dirName, 3)
       
  5473   if((offset = wtelldir(dirName))!= 3)  {
       
  5474     printf("failed  
       
  5475 ");
       
  5476     return -1;
       
  5477   }
       
  5478   wrewindir(dirName);
       
  5479   if((offset = wtelldir(dirName))!= 0)  {
       
  5480     printf("failed  
       
  5481 ");
       
  5482     return -1;
       
  5483   }
       
  5484  printf("Successful
       
  5485 ");
       
  5486  wclosedir(dirName);
       
  5487  return 0;
       
  5488 }
       
  5489 
       
  5490 @endcode
       
  5491  Output
       
  5492 @code
       
  5493 Successful
       
  5494 
       
  5495 @endcode
       
  5496 @see wreaddir()
       
  5497 @see wtelldir()
       
  5498 @see wseekdir()
       
  5499 @see readdir()
       
  5500 @see rewinddir()
       
  5501 @see telldir()
       
  5502 @see seekdir()
       
  5503 
       
  5504 
       
  5505  
       
  5506 
       
  5507 @publishedAll
       
  5508 @released
       
  5509 */
       
  5510 
       
  5511 
       
  5512 
       
  5513 /** @fn  waccess(const wchar_t *fn, int flags)
       
  5514 @param fn
       
  5515 @param flags
       
  5516 @return   Upon successful completion, the value 0 is returned; otherwise the
       
  5517 value -1 is returned and the global variable errno is set to indicate the
       
  5518 error.
       
  5519 
       
  5520   The waccess system call checks the accessibility of the
       
  5521 file named by the fn argument for the access permissions indicated by the flags argument.
       
  5522 The value of flags is either the bitwise-inclusive OR of the access permissions to be
       
  5523 checked (R_OK for read permission, W_OK for write permission, and X_OK for execute/search permission),
       
  5524 or the existence test ( F_OK. )
       
  5525 
       
  5526  For additional information, see the File access Permission
       
  5527 section of intro . X_OK, the file may not actually have execute permission bits set.
       
  5528 Likewise for R_OK and W_OK.
       
  5529 
       
  5530  Note that as execute-bit for files is not supported waccess system call for X_OK is undefined.
       
  5531 
       
  5532 Examples:
       
  5533 @code
       
  5534 /* Detailed description: This sample code checks read-ok accessibility of file Example.c
       
  5535  * Precondtions: Example.txt file should be present in working directory.
       
  5536  */
       
  5537 #include <unistd.h>
       
  5538 #include <wchar.h>
       
  5539 int main()
       
  5540 {
       
  5541   if(waccess("Example.c" ,R_OK)  < 0)  
       
  5542   {
       
  5543     printf("Read operation on the file is not permitted 
       
  5544 ") ;
       
  5545     return -1 ;
       
  5546   }
       
  5547   printf("Read operation permitted on Example.c file 
       
  5548 ") ;
       
  5549   return 0 ;
       
  5550 }
       
  5551 
       
  5552 @endcode
       
  5553  Output
       
  5554 @code
       
  5555 Read operation permitted on Example.c file
       
  5556 
       
  5557 @endcode
       
  5558 @see wchmod()
       
  5559 @see wstat()
       
  5560 
       
  5561 
       
  5562 
       
  5563 @capability Deferred @ref RFs::Entry(const TDesC16&, TEntry&)
       
  5564 
       
  5565 @publishedAll
       
  5566 @released
       
  5567 */
       
  5568 
       
  5569 
       
  5570 
       
  5571 /** @fn  wcreat(const wchar_t *file, mode_t mode)
       
  5572 @param file
       
  5573 @param mode
       
  5574 @return   wopen and wcreat return the new file descriptor, or -1 if an error occurred 
       
  5575   (in which case errno is set appropriately).
       
  5576 
       
  5577   This interface is made obsolete by: wopen
       
  5578 
       
  5579  The wcreat function
       
  5580 is the same as: wopen(path, O_CREAT | O_TRUNC | O_WRONLY, mode);
       
  5581 
       
  5582  Notes:
       
  5583 
       
  5584  Creating a new file doesn't alter the time stamp of the parent directory.
       
  5585 
       
  5586  The newly created entry has two time stamps: access and modification. Both 
       
  5587   are initially the same.
       
  5588 
       
  5589  Symbian OS does not support a creation time stamp.
       
  5590 
       
  5591 
       
  5592 
       
  5593 Examples:
       
  5594 @code
       
  5595 /*
       
  5596  * Detailed description   : This test code demonstrates wcreat api usage, it creates a
       
  5597  * in current working directory(if file exists then it is truncated.
       
  5598  *Preconditions : None
       
  5599  */
       
  5600 #include <sys/types.h>
       
  5601 #include <sys/stat.h>
       
  5602 #include <fcntl.h>
       
  5603 #include <wchar.h>
       
  5604 int main()
       
  5605 {
       
  5606  int fd = 0;
       
  5607   fd = wcreat(L"Example.txt" , 0666);
       
  5608   if(fd < 0 )  
       
  5609   {
       
  5610     printf("File creation failed 
       
  5611 ");
       
  5612     return -1;
       
  5613   }
       
  5614   printf("Example.txt file created 
       
  5615 ");
       
  5616   return 0;
       
  5617 }
       
  5618 
       
  5619 @endcode
       
  5620  Output
       
  5621 @code
       
  5622 Example.txt file created
       
  5623 
       
  5624 @endcode
       
  5625 @see wopen()
       
  5626 
       
  5627 
       
  5628  
       
  5629 
       
  5630 @publishedAll
       
  5631 @released
       
  5632 */
       
  5633 
       
  5634 /** @fn  wcreat64(const wchar_t *file, mode_t mode)
       
  5635 @param file
       
  5636 @param mode
       
  5637 @return   wcreat64() return the new file descriptor, or -1 if an error occurred 
       
  5638   (in which case errno is set appropriately).
       
  5639 
       
  5640 The wcreat64() function is a 64-bit version of wcreat.
       
  5641 
       
  5642 @see wcreat()
       
  5643 
       
  5644 @publishedAll
       
  5645 @released
       
  5646 */
       
  5647 
       
  5648 /** @fn  wseekdir(WDIR *wdp, off_t index)
       
  5649 @param wdp
       
  5650 @param index
       
  5651 
       
  5652 Refer to wtelldir() for the documentation
       
  5653 
       
  5654 @see wclosedir()
       
  5655 @see wopendir()
       
  5656 @see wreaddir()
       
  5657 
       
  5658 
       
  5659  
       
  5660 
       
  5661 @publishedAll
       
  5662 @released
       
  5663 */
       
  5664 
       
  5665 
       
  5666 /** @fn  wcsupr(wchar_t *wcs)
       
  5667 @param wcs
       
  5668 
       
  5669   The wcsupr() function
       
  5670 converts each letter from the wide-character string wcs to upper-case.
       
  5671 The conversion is determined by the LC_CTYPE category setting of the locale.
       
  5672 Other characters are not affected. It returns a pointer to the altered string.
       
  5673 Because the modification is done in place, the pointer returned is the same as
       
  5674 the pointer passed as the input argument.
       
  5675 
       
  5676 @return   The wcsupr() returns a pointer to the altered string, on successful conversion of wcs, else it returns NULL pointer.
       
  5677 
       
  5678 Examples:
       
  5679 @code
       
  5680 #include <wchar.h>
       
  5681 /* Illustrates how to use wcsupr API */
       
  5682 int example_wcsupr(void)
       
  5683 { 
       
  5684   /* input string which needs to be converted to upper-case */
       
  5685   wchar_t src[9]=L"testcase";
       
  5686  
       
  5687   /* expected result string */
       
  5688   wchar_t *exp=L"TESTCASE";
       
  5689  
       
  5690   wchar_t *res = NULL;
       
  5691     
       
  5692   /* function call to convert the src to upper-case */
       
  5693   res = wcsupr(src);
       
  5694   /* compare res string with exp string, if they are equal then return 0, else return -1 */
       
  5695   if( res != NULL && !wcscmp(res,exp))
       
  5696         return 0;
       
  5697   else
       
  5698         return -1;
       
  5699 }
       
  5700 
       
  5701 @endcode
       
  5702 @see strupr()
       
  5703 @see towupper()
       
  5704 @see towlower()
       
  5705 @see wcslwr()
       
  5706 
       
  5707 
       
  5708  
       
  5709 
       
  5710 @publishedAll
       
  5711 @released
       
  5712 */
       
  5713 
       
  5714 /** @fn  wcslwr(wchar_t *wcs)
       
  5715 @param wcs
       
  5716 
       
  5717   The wcslwr() function
       
  5718 converts each letter from the wide-character string wcs to lower-case.
       
  5719 The conversion is determined by the LC_CTYPE category setting of the locale.
       
  5720 Other characters are not affected. It returns a pointer to the altered string.
       
  5721 Because the modification is done in place, the pointer returned is the same as
       
  5722 the pointer passed as the input argument.
       
  5723 
       
  5724 @return   The wcslwr() returns a pointer to the altered string, on successful conversion of wcs, else it returns NULL pointer.
       
  5725 
       
  5726 Examples:
       
  5727 @code
       
  5728 #include <wchar.h>
       
  5729 /* Illustrates how to use wcslwr API */
       
  5730 int example_wcslwr(void)
       
  5731 { 
       
  5732   /* input string which needs to be converted to lower-case */
       
  5733   wchar_t src[9]=L"TESTCASE";
       
  5734  
       
  5735   /* expected result string */
       
  5736   wchar_t *exp=L"testcase";
       
  5737  
       
  5738   wchar_t *res = NULL;
       
  5739     
       
  5740   /* function call to convert the src to lower-case */
       
  5741   res = wcslwr(src);
       
  5742   /* compare res string with exp string, if they are equal then return 0, else return -1 */
       
  5743   if( res != NULL && !wcscmp(res,exp))
       
  5744         return 0;
       
  5745   else
       
  5746         return -1;
       
  5747 }
       
  5748 
       
  5749 @endcode
       
  5750 @see strupr()
       
  5751 @see strlwr()
       
  5752 @see towupper()
       
  5753 @see towlower()
       
  5754 @see wcsupr()
       
  5755 
       
  5756 
       
  5757  
       
  5758 
       
  5759 @publishedAll
       
  5760 @released
       
  5761 */
       
  5762 
       
  5763 /** @fn  wcsset(wchar_t *wcs, wchar_t wc)
       
  5764 @param wcs
       
  5765 @param wc
       
  5766 
       
  5767   The wcsset() function sets all the characters of the wide-character string wcs to the wide-character specified by wc, except the terminating null character. It returns a pointer to the altered string, which is same
       
  5768 as the source string passed to wcsset as it is modified in place.
       
  5769 
       
  5770 @return   The wcsset() returns a pointer to the altered string, on success, else it returns NULL pointer.
       
  5771 
       
  5772 Examples:
       
  5773 @code
       
  5774 #include <wchar.h>
       
  5775 /* Illustrates how to use wcsset API */
       
  5776 int example_wcsset(void)
       
  5777 { 
       
  5778   /* input string which needs to be set to the character specified by wc. */
       
  5779   wchar_t wcs[9]=L"kohinoor";
       
  5780   wcgar_t wc = L'K';
       
  5781  
       
  5782   /* expected result string */
       
  5783   wchar_t *exp=L"KKKKKKKK";
       
  5784  
       
  5785   wchar_t *res = NULL;
       
  5786     
       
  5787   /* function call to set all the chars in wcs to wc*/
       
  5788   res = wcsset(wcs, wc);
       
  5789   /* compare res string with exp string, if they are equal then return 0, else return -1 */
       
  5790   if( res != NULL && !wcscmp(res,exp))
       
  5791         return 0;
       
  5792   else
       
  5793         return -1;
       
  5794 }
       
  5795 
       
  5796 @endcode
       
  5797 @see strset()
       
  5798 @see wcsnset()
       
  5799 
       
  5800 
       
  5801  
       
  5802 
       
  5803 @publishedAll
       
  5804 @released
       
  5805 */
       
  5806 
       
  5807 /** @fn  wcsnset(wchar_t *wcs, wchar_t wc, size_t maxSize)
       
  5808 @param wcs
       
  5809 @param wc
       
  5810 @param maxSize
       
  5811 
       
  5812   The wcsnset() function sets first maxSize characters of the wide-character string wcs to the wide-character specified by wc. If maxSize is greater than the length of wcs, then length of wcs is used instead of maxSize.
       
  5813 It returns a pointer to the altered string, which is same
       
  5814 as the source string passed to wcsnset as it is modified in place.
       
  5815 
       
  5816 @return   The wcsnset() returns a pointer to the altered string, on success, else it returns NULL pointer.
       
  5817 
       
  5818 Examples:
       
  5819 @code
       
  5820 #include <wchar.h>
       
  5821 /* Illustrates how to use wcsnset API */
       
  5822 int example_wcsnset(void)
       
  5823 { 
       
  5824   /* input string which needs to be set to the character specified by wc. */
       
  5825   wchar_t wcs[9]=L"kohinoor";
       
  5826   wcgar_t wc = L'K';
       
  5827   int n = 3;
       
  5828  
       
  5829   /* expected result string */
       
  5830   wchar_t *exp=L"KKKinoor";
       
  5831  
       
  5832   wchar_t *res = NULL;
       
  5833     
       
  5834   /* function call to set first n chars in wcs to wc*/
       
  5835   res = wcsnset(wcs, wc, n);
       
  5836   /* compare res string with exp string, if they are equal then return 0, else return -1 */
       
  5837   if( res != NULL && !wcscmp(res,exp))
       
  5838         return 0;
       
  5839   else
       
  5840         return -1;
       
  5841 }
       
  5842 
       
  5843 @endcode
       
  5844 @see strset()
       
  5845 @see wcsset()
       
  5846 
       
  5847 
       
  5848  
       
  5849 
       
  5850 @publishedAll
       
  5851 @released
       
  5852 */
       
  5853 
       
  5854 /** @fn  wcsrev(wchar_t *wcs)
       
  5855 @param wcs
       
  5856 
       
  5857   The wcsrev() function reverses the order of the characters in the wide-character string wcs. The terminating null character remains in place.The arguments and return value of wcsrev are wide-character strings; It returns a pointer to the altered string.
       
  5858 the pointer returned is the same as the pointer passed as the input argument.
       
  5859 
       
  5860 @return   The wcsrev() returns a pointer to the reverted string, on success, else it returns NULL pointer.
       
  5861 
       
  5862 Examples:
       
  5863 @code
       
  5864 #include <wchar.h>
       
  5865 /* Illustrates how to use wcsrev API */
       
  5866 int example_wcsrev(void)
       
  5867 { 
       
  5868   /* input string which needs to be reverted. */
       
  5869   wchar_t src[9]=L"kohinoor";
       
  5870  
       
  5871   /* expected result string */
       
  5872   wchar_t *exp=L"roonihok";
       
  5873  
       
  5874   wchar_t *res = NULL;
       
  5875     
       
  5876   /* function call to revert the src */
       
  5877   res = wcsrev(src);
       
  5878   /* compare res string with exp string, if they are equal then return 0, else return -1 */
       
  5879   if( res != NULL && !wcscmp(res,exp))
       
  5880         return 0;
       
  5881   else
       
  5882         return -1;
       
  5883 }
       
  5884 
       
  5885 @endcode
       
  5886 @see strrev()
       
  5887 
       
  5888 
       
  5889  
       
  5890 
       
  5891 @publishedAll
       
  5892 @released
       
  5893 */
       
  5894 
       
  5895 /** @fn  wcsicmp(const wchar_t *wcs1, const wchar_t *wcs2)
       
  5896 @param wcs1
       
  5897 @param wcs2
       
  5898 
       
  5899   The wcsicmp() function
       
  5900 compares the two null-terminated wide-character strings wcs1 and wcs2, by converting them into lower-case.
       
  5901 It returns an integer value indicating the status of
       
  5902 the comparision.
       
  5903 
       
  5904 @return   The wcsicmp() returns an integer greater than, equal to, or less than 0,
       
  5905 according as wcs1 is lexicographically greater than, equal to, or less than wcs2 after translation of each corresponding character to lower-case.
       
  5906 The strings themselves are not modified.
       
  5907 
       
  5908 Examples:
       
  5909 @code
       
  5910 #include <wchar.h>
       
  5911 /* Illustrates how to use wcsicmp API */
       
  5912 int example_wcsicmp(void)
       
  5913 { 
       
  5914   /* input strings which needs to be compared */
       
  5915   wchar_t *ws1=L"testcasecmp";
       
  5916   wchar_t *ws2=L"TESTCASECMP";
       
  5917     
       
  5918   /* function call to compare the two strings which */
       
  5919   /* differ in case */
       
  5920   int retval = wcsicmp(ws1,ws2);
       
  5921   /* returns 0 if they are equal or > 1 */
       
  5922   /* if first string is greater than second string else -1 */
       
  5923   return retval;
       
  5924 }
       
  5925 
       
  5926 @endcode
       
  5927 @see strcasecmp()
       
  5928 @see wcscasecmp()
       
  5929 
       
  5930 
       
  5931  
       
  5932 
       
  5933 @publishedAll
       
  5934 @released
       
  5935 */
       
  5936 
       
  5937 /** @fn  wstrdate(const wchar_t *datestr)
       
  5938 @param datestr
       
  5939 
       
  5940   The wstrdate() function gets the system date and converts it into wide-character 
       
  5941 string. This copies the current system date into the string pointed by datestr in the format dd/mm/yyyy, the datestr buffer must be atleast 11 bytes long. It returns a pointer to 
       
  5942 the datestr string. Because the modification is done in place, the pointer returned 
       
  5943 is the same as the pointer passed as the input argument.
       
  5944 
       
  5945 @return   The wstrdate() returns a pointer to the date string on succes, otherwise 
       
  5946 it returns a NULL pointer and sets the errno accordingly.
       
  5947 
       
  5948 
       
  5949 Examples:
       
  5950 @code
       
  5951 #include <wchar.h>
       
  5952 /* Illustrates how to use wstrdate API */
       
  5953 int example_wstrdate(void)
       
  5954 { 
       
  5955   /* input string which is updated with the system date. */
       
  5956   wchar_t datestr[20];
       
  5957  
       
  5958   wchar_t *res = NULL;
       
  5959     
       
  5960   /* function call to get the system date in wide-char format */
       
  5961   res = wstrdate(datestr);
       
  5962   if( !res && !datestr)
       
  5963   {
       
  5964         printf(" res - %s and datestr - %s",res, datestr);
       
  5965         return 0;
       
  5966   }
       
  5967   else
       
  5968         return -1;
       
  5969 }
       
  5970 
       
  5971 @endcode
       
  5972 
       
  5973 Output
       
  5974 
       
  5975 @code
       
  5976 
       
  5977  res - 21/11/2006 and datestr - 21/11/2006
       
  5978 
       
  5979 @endcode
       
  5980 
       
  5981 Errors:
       
  5982 
       
  5983 The wstrdate function will fail if: 
       
  5984 [EFAULT] The supplied argument datestr is invalid.
       
  5985 
       
  5986 @see strdate()
       
  5987 @see strftime()
       
  5988 @see strptime()
       
  5989 @see wstrtime()
       
  5990 
       
  5991 
       
  5992  
       
  5993 
       
  5994 @publishedAll
       
  5995 @released
       
  5996 */
       
  5997 
       
  5998 /** @fn  wstrtime(const wchar_t *timestr)
       
  5999 @param timestr
       
  6000 
       
  6001   The wstrtime() function gets the system time and converts it into wide-character 
       
  6002 string. This copies the current system time into the string pointed by timestr in the format hh:mm:ss. The timestr buffer must be at least 9 bytes long. The function returns a pointer 
       
  6003 to the timestr string. Because the modification is done in place, the pointer 
       
  6004 returned is the same as the pointer passed as the input argument.
       
  6005 
       
  6006 @return   The wstrtime() returns a pointer to the time string on success, otherwise 
       
  6007 it returns a NULL pointer and sets the errno accordingly.
       
  6008 
       
  6009 Examples:
       
  6010 @code
       
  6011 #include <wchar.h>
       
  6012 /* Illustrates how to use wstrtime API */
       
  6013 int example_wstrtime(void)
       
  6014 { 
       
  6015   /* input string which is updated with the system time. */
       
  6016   wchar_t timestr[20];
       
  6017  
       
  6018   wchar_t *res = NULL;
       
  6019     
       
  6020   /* function call to get the system time in wide-char format */
       
  6021   res = wstrtime(timestr);
       
  6022   if( !res && !timestr)
       
  6023   {
       
  6024         printf(" res - %s and timestr - %s",res, timestr);
       
  6025         return 0;
       
  6026   }
       
  6027   else
       
  6028         return -1;
       
  6029 }
       
  6030 
       
  6031 @endcode
       
  6032 
       
  6033 Output
       
  6034 
       
  6035 @code
       
  6036 
       
  6037  res - 15:46:36 and timestr - 15:46:36
       
  6038 
       
  6039 @endcode
       
  6040 
       
  6041 
       
  6042 @see strtime()
       
  6043 @see strftime()
       
  6044 @see strptime()
       
  6045 
       
  6046 
       
  6047  
       
  6048 
       
  6049 @publishedAll
       
  6050 @released
       
  6051 */
       
  6052 
       
  6053 /** @fn  wfdopen(int fd ,const wchar_t *  mode)
       
  6054 @param fd
       
  6055 @param mode
       
  6056 @return   Upon successful completion wfdopen returns a FILE pointer. Otherwise, NULL is returned and the global variable errno is set to indicate the error.
       
  6057 
       
  6058   The wfdopen function
       
  6059 associates a stream with the existing file descriptor, fd. The mode argument is used just as in the function wfopen .
       
  6060 
       
  6061  The mode of the stream must be compatible with the mode of the file descriptor.
       
  6062 In other words the type specified by the stream must be allowed by the file access mode of the open file.
       
  6063 When the stream is closed via fclose, fd is also closed.
       
  6064 
       
  6065 
       
  6066 Errors:
       
  6067 
       
  6068 [EINVAL]  The mode argument to wfdopen, was invalid.  
       
  6069 The function wfdopen may also fail and set errno for any of the errors specified for the routine wopen. 
       
  6070 
       
  6071 
       
  6072 
       
  6073 
       
  6074 Limitations:
       
  6075 
       
  6076 All the limitations that apply to wfopen apply to wfdopen also.
       
  6077 
       
  6078 @see wopen()
       
  6079 @see wfclose()
       
  6080 @see wfopen()
       
  6081 
       
  6082 
       
  6083  
       
  6084 
       
  6085 @publishedAll
       
  6086 @released
       
  6087 */
       
  6088 
       
  6089 /** @fn  wfreopen(const wchar_t *  file, const wchar_t *  mode,FILE *fp)
       
  6090 @param file
       
  6091 @param mode
       
  6092 @param fp
       
  6093 @return   Upon successful completion wfreopen returns a FILE pointer. Otherwise, NULL is returned and the global variable errno is set to indicate the error.
       
  6094 
       
  6095   The wfreopen function
       
  6096 opens the file whose name is the string pointed to by file and associates the stream pointed to by fp with it.
       
  6097 The original stream (if it exists) is closed.
       
  6098 The mode argument is used just as in the wfopen function.
       
  6099 
       
  6100  If the file argument is NULL, wfreopen attempts to re-open the file associated with fp with a new mode.
       
  6101 The new mode must be compatible with the mode that the stream was originally
       
  6102 opened with: Streams originally opened with mode "r"
       
  6103 can only be reopened with that same mode. Streams originally opened with mode "a"
       
  6104 can be reopened with the same mode, or mode "w." Streams originally opened with mode "w"
       
  6105 can be reopened with the same mode, or mode "a." Streams originally opened with mode "r+," "w+,"
       
  6106 or "a+"
       
  6107 can be reopened with any mode.
       
  6108 
       
  6109  The primary use of the wfreopen function
       
  6110 is to change the file associated with a
       
  6111 standard text stream (stderr, stdin, or stdout).
       
  6112 
       
  6113 
       
  6114 
       
  6115 
       
  6116 
       
  6117 Examples:
       
  6118 @code
       
  6119 /* wfreopen example: redirecting stdout */
       
  6120 #include <stdio.h>
       
  6121 #include <wchar.h>
       
  6122 int main ()
       
  6123 {
       
  6124   wfreopen (L"c:\myfile.txt",L"w",stdout);
       
  6125   printf ("This sentence is redirected to a file.");
       
  6126   fclose (stdout);
       
  6127   return 0;
       
  6128 }
       
  6129 
       
  6130 @endcode
       
  6131  Output:
       
  6132 @code
       
  6133 Contents of myfile.txt:This sentence is redirected to a file.
       
  6134 The output here is redirected from stdout to file myfile.txt
       
  6135 
       
  6136 @endcode
       
  6137 
       
  6138 Limitations:
       
  6139 
       
  6140 All the limitations that apply to wfopen apply to wfreopen also.
       
  6141 
       
  6142 @see wopen()
       
  6143 @see wfclose()
       
  6144 @see wfopen()
       
  6145 
       
  6146 
       
  6147  
       
  6148 
       
  6149 @publishedAll
       
  6150 @released
       
  6151 */
       
  6152 
       
  6153 /** @fn  wfreopen64(const wchar_t *  file, const wchar_t *  mode,FILE *fp)
       
  6154 @param file
       
  6155 @param mode
       
  6156 @param fp
       
  6157 @return   Upon successful completion wfreopen64 returns a FILE pointer. Otherwise, NULL is returned and the global variable errno is set to indicate the error.
       
  6158 
       
  6159 The wfreopen64() function is a 64-bit version of wfreopen64.
       
  6160 
       
  6161 @publishedAll
       
  6162 @released
       
  6163 */
       
  6164 
       
  6165 
       
  6166 /** @fn  getws(wchar_t *  str)
       
  6167 @param str
       
  6168 @return   Upon successful completion, getws returns str. The getws function does not distinguish between end-of-file and error: Callers 
       
  6169 must use feof and ferror to determine which occurred.
       
  6170 
       
  6171  
       
  6172 
       
  6173  The getws function
       
  6174 is equivalent to fgetws with an infinite size and a stream of stdin, except that the wide character newline(if any) is not stored in the string.
       
  6175 It is the caller's responsibility to ensure that the input line,
       
  6176 if any, is sufficiently short to fit in the string.
       
  6177 
       
  6178 
       
  6179 
       
  6180 Examples:
       
  6181 @code
       
  6182 #include <stdio.h>
       
  6183 #include <wchar.h>
       
  6184 /* Illustrates how to use getws API */
       
  6185 int example_getws()
       
  6186         {
       
  6187         FILE* stdop = freopen("c:\stdop","w+",stdout);
       
  6188         FILE* stdip = freopen("c:\stdip","w+",stdin);
       
  6189         FILE* stder = freopen("c:\stder","w+",stderr);
       
  6190         wchar_t* buf = (wchar_t*)malloc(sizeof(wchar_t)*50);
       
  6191         wchar_t s[100];
       
  6192         int ret = 0;
       
  6193         size_t size = fwrite("abdcef
       
  6194 ", 1, 6, stdip);          //write to stdin
       
  6195         fclose(stdip);
       
  6196         stdip = freopen("c:\stdip","r", stdin);
       
  6197         getws(s);               // read a line (from stdin)
       
  6198         putws(s);               //write to stdout
       
  6199         fclose(stdop);
       
  6200         stdop = freopen("c:\stdop","r", stdout);
       
  6201         fgetws(buf,7,stdop);            //read from stdout
       
  6202         if(wcsncmp(s, buf,6))
       
  6203                 {
       
  6204                 ret = -1;
       
  6205                 }
       
  6206         fclose(stdin);
       
  6207         fclose(stder);
       
  6208         fclose(stdop);
       
  6209         remove("c:\stdop");
       
  6210         remove("c:\stdip");
       
  6211         remove("c:\stder");
       
  6212         return ret;
       
  6213         }
       
  6214 
       
  6215 @endcode
       
  6216  Output
       
  6217 @code
       
  6218 abcdef
       
  6219 abcdef
       
  6220 
       
  6221 @endcode
       
  6222 
       
  6223 Security considerations:
       
  6224 
       
  6225  The getws function cannot be used securely. Because of its lack of bounds 
       
  6226 checking, and the inability for the calling program to determine reliably the 
       
  6227 length of the next incoming line, the use of this function enables malicious users 
       
  6228 to arbitrarily change a running program's functionality through a buffer 
       
  6229 overflow attack. It is strongly suggested that the fgetws function be used in all cases.
       
  6230 
       
  6231 @see feof()
       
  6232 @see ferror()
       
  6233 @see fgets()
       
  6234 @see fgetws()
       
  6235 @see gets()
       
  6236 
       
  6237 
       
  6238  
       
  6239 
       
  6240 @publishedAll
       
  6241 @released
       
  6242 */
       
  6243 
       
  6244 /** @fn  wremove(const wchar_t *file)
       
  6245 @param file
       
  6246 @return   Upon successful completion, wremove returns 0. Otherwise, it returns -1 is and sets the global 
       
  6247   variable errno to indicate the error.
       
  6248 
       
  6249   The wremove function removes the file or directory specified by the wide character name referred by file.
       
  6250 
       
  6251  If file specifies a directory, wremove (file); is the equivalent of wrmdir (file); Otherwise, it is the equivalent of wunlink (file);
       
  6252 
       
  6253 Examples:
       
  6254 @code
       
  6255 /* this program shows deleting a file using wremove */
       
  6256 #include <stdio.h>
       
  6257 int main()
       
  6258 {
       
  6259         wchar_t* name = L"C:\input.txt";
       
  6260         FILE *fp = wfopen(name, L"w+");
       
  6261         if (fp == NULL)
       
  6262                 {
       
  6263                 printf ("fopen failed
       
  6264 ");
       
  6265                 return -1;
       
  6266                 }
       
  6267         fprintf(fp,"hello world");
       
  6268         fclose(fp);
       
  6269         
       
  6270         wremove(name);
       
  6271         fp=wfopen(name,L"r");
       
  6272         if (fp == NULL)
       
  6273                 {
       
  6274                 printf ("file has been deleted already
       
  6275 ");
       
  6276                 }
       
  6277         else
       
  6278                 {
       
  6279                 printf("wremove failed
       
  6280 ");
       
  6281                 return -1;
       
  6282                 }
       
  6283         return 0;
       
  6284 }
       
  6285 
       
  6286 @endcode
       
  6287  Output
       
  6288 @code
       
  6289 file has been deleted already
       
  6290 
       
  6291 @endcode
       
  6292 @see wrmdir()
       
  6293 @see wunlink()
       
  6294 
       
  6295 
       
  6296  
       
  6297 
       
  6298 @publishedAll
       
  6299 @released
       
  6300 */
       
  6301 
       
  6302 /** @fn  putws(wchar_t *  str)
       
  6303 @param str
       
  6304 @return   The putws function
       
  6305 returns 0 on success and -1 on error.
       
  6306 
       
  6307   The putws function writes the wide character string pointed to by str to the stdout stream.
       
  6308 
       
  6309 
       
  6310 
       
  6311 Examples:
       
  6312 @code
       
  6313 #include <stdio.h>
       
  6314 #include <wchar.h>
       
  6315 /* Illustrates how to use putws API */
       
  6316 int example_putws()
       
  6317 {
       
  6318         wchar_t buf[12];
       
  6319         FILE* op;
       
  6320         FILE* stdop = freopen("c:\stdop","w+",stdout);
       
  6321                 
       
  6322         putws(L"Hello World");          //write to stdout
       
  6323         
       
  6324         fclose(stdop);
       
  6325                 
       
  6326         op = freopen("c:\stdop","r",stdout);
       
  6327                 
       
  6328         fgetws(buf, 12, op);            //read from stdout
       
  6329                 
       
  6330         fclose(stdop);
       
  6331                 
       
  6332         remove("c:\stdop");
       
  6333         
       
  6334         if(!(wcsncmp(L"Hello World", buf, 11)))
       
  6335                 {                       
       
  6336                 return 0;
       
  6337                 }       
       
  6338         return -1;
       
  6339 }
       
  6340 }
       
  6341 
       
  6342 @endcode
       
  6343 @see ferror()
       
  6344 @see fputws()
       
  6345 @see fputs()
       
  6346 @see putwc()
       
  6347 
       
  6348 
       
  6349  
       
  6350 
       
  6351 @publishedAll
       
  6352 @released
       
  6353 */
       
  6354 
       
  6355 /** @fn  wtelldir(const WDIR *wdp)
       
  6356 @param wdp
       
  6357 
       
  6358 Note: This description also covers the following functions -
       
  6359  wseekdir() 
       
  6360 
       
  6361 @return   wtelldir function returns current location associated with the named directory stream on success or -1 on failure.
       
  6362 
       
  6363   The wtelldir function
       
  6364 returns the current location associated with the named directory stream .
       
  6365 Values returned by wtelldir are good only for the lifetime of the DIR pointer, dirp ,
       
  6366 from which they are derived.
       
  6367 If the directory is closed and then
       
  6368 reopened, prior values returned by wtelldir will no longer be valid.
       
  6369 
       
  6370  The wseekdir function
       
  6371 sets the position of the next wreaddir operation on the directory stream .
       
  6372 The new position reverts to the one associated with the directory stream when the wtelldir operation was performed.
       
  6373 
       
  6374 
       
  6375 
       
  6376 Examples:
       
  6377 @code
       
  6378 #include <dirent.h>
       
  6379 #include<wchar.h>
       
  6380 #include<stdio.h>
       
  6381 #include<unistd.h>
       
  6382 #include<sys/types.h>
       
  6383 void  wTest()
       
  6384     {
       
  6385       //declare the variables for dir pointer and dir position.
       
  6386       wchar_t *dirName  =L"c:	est_wseekdir";
       
  6387       off_t dirpos;
       
  6388         // Open the directory
       
  6389         WDIR *dirp = wopendir (dirName);
       
  6390         
       
  6391         if(dirp != NULL)
       
  6392         {
       
  6393                 //read the directory.
       
  6394                 wreaddir(dirp);
       
  6395                 wreaddir(dirp);
       
  6396                 //get the dirp pointer position by calling telldir API.
       
  6397                 dirpos = wtelldir(dirp);
       
  6398                 //print the position of the dirp pointer.
       
  6399                 printf("dirp is pointing at position %ld.",dirpos);
       
  6400                 
       
  6401                 wseekdir(dirp , 0) ;
       
  6402                 wreaddir(dirp);
       
  6403                 dirpos = wtelldir(dirp);
       
  6404                 //print the position of the dirp pointer.
       
  6405                 printf("dirp is pointing at position %ld.",dirpos);
       
  6406         }
       
  6407     }
       
  6408 
       
  6409 @endcode
       
  6410 
       
  6411  Output
       
  6412 
       
  6413 @code
       
  6414 Dirp is pointing at position 2.
       
  6415 Dirp is pointing at position 1.
       
  6416 
       
  6417 @endcode
       
  6418 @see wclosedir()
       
  6419 @see wopendir()
       
  6420 @see wreaddir()
       
  6421 
       
  6422 
       
  6423  
       
  6424 
       
  6425 @publishedAll
       
  6426 @released
       
  6427 */
       
  6428 
       
  6429 
       
  6430 /** @fn  wopendir(const wchar_t *_wpath)
       
  6431 @param _wpath
       
  6432 @return   The wopendir function returns a pointer to the directory stream or NULL if an error occurred.
       
  6433 
       
  6434   The wopendir function
       
  6435 opens the directory given by the wide-character name _wpath, associates a directory stream with it and positions it at the first entry
       
  6436 and
       
  6437 returns a pointer to be used to identify the directory stream in subsequent operations.
       
  6438 The pointer NULL is returned if _wpath cannot be accessed, or if it cannot malloc enough memory to hold the whole thing.
       
  6439 
       
  6440 
       
  6441 
       
  6442 Examples:
       
  6443 @code
       
  6444 /* Detailed description: This test code demonstrates usage of wopendir system call, open directory wide name "test".
       
  6445  * Preconditions: Expects "test" directory to be present in the current working directory.
       
  6446  */
       
  6447  #include <wchar.h>
       
  6448  #include <stdio.h>
       
  6449  #include <dirent.h>
       
  6450 int main()
       
  6451 {
       
  6452   WDIR *WDirHandle;
       
  6453   if(!(WDirHandle = wopendir(L"test") ) ) 
       
  6454   {
       
  6455      printf("Failed to open directory test
       
  6456 ");
       
  6457      return -1;
       
  6458   }
       
  6459   printf("Directory test opened 
       
  6460 ");
       
  6461   wclosedir(WDirHandle);
       
  6462   return 0;
       
  6463 }
       
  6464 
       
  6465 @endcode
       
  6466  Output
       
  6467 @code
       
  6468 Directory test opened
       
  6469 
       
  6470 @endcode
       
  6471 @see opendir()
       
  6472 @see close()
       
  6473 @see lseek()
       
  6474 @see open()
       
  6475 @see read()
       
  6476 
       
  6477 
       
  6478  
       
  6479 
       
  6480 @publishedAll
       
  6481 @externallyDefinedApi
       
  6482 */
       
  6483 
       
  6484 
       
  6485 /** @fn  wcslcat(wchar_t *s1, const wchar_t *s2, size_t n)
       
  6486 @param s1
       
  6487 @param s2
       
  6488 @param n
       
  6489 
       
  6490 Refer to wmemchr() for the documentation
       
  6491 
       
  6492 @see memchr()
       
  6493 @see memcmp()
       
  6494 @see memcpy()
       
  6495 @see memmove()
       
  6496 @see memset()
       
  6497 @see strcat()
       
  6498 @see strchr()
       
  6499 @see strcmp()
       
  6500 @see strcpy()
       
  6501 @see strcspn()
       
  6502 @see strlen()
       
  6503 @see strncat()
       
  6504 @see strncmp()
       
  6505 @see strncpy()
       
  6506 @see strpbrk()
       
  6507 @see strrchr()
       
  6508 @see strspn()
       
  6509 @see strstr()
       
  6510 
       
  6511 
       
  6512  
       
  6513 
       
  6514 @publishedAll
       
  6515 @released
       
  6516 */
       
  6517 
       
  6518 /** @fn  wcslcpy(wchar_t *s1, const wchar_t *s2, size_t n)
       
  6519 @param s1
       
  6520 @param s2
       
  6521 @param n
       
  6522 
       
  6523 Refer to wmemchr() for the documentation
       
  6524 
       
  6525 @see memchr()
       
  6526 @see memcmp()
       
  6527 @see memcpy()
       
  6528 @see memmove()
       
  6529 @see memset()
       
  6530 @see strcat()
       
  6531 @see strchr()
       
  6532 @see strcmp()
       
  6533 @see strcpy()
       
  6534 @see strcspn()
       
  6535 @see strlen()
       
  6536 @see strncat()
       
  6537 @see strncmp()
       
  6538 @see strncpy()
       
  6539 @see strpbrk()
       
  6540 @see strrchr()
       
  6541 @see strspn()
       
  6542 @see strstr()
       
  6543 
       
  6544 
       
  6545  
       
  6546 
       
  6547 @publishedAll
       
  6548 @released
       
  6549 */
       
  6550 
       
  6551 /** @fn  wasctime(const struct tm *tm)
       
  6552 @param tm
       
  6553 
       
  6554 Refer to wctime() for the documentation
       
  6555 
       
  6556 @see asctime()
       
  6557 @see ctime()
       
  6558 
       
  6559 
       
  6560  
       
  6561 
       
  6562 @publishedAll
       
  6563 @released
       
  6564 */
       
  6565 
       
  6566 /** @fn  wctime(const time_t *clock)
       
  6567 @param clock
       
  6568 
       
  6569 Note: This description also covers the following functions -
       
  6570  wasctime() 
       
  6571 
       
  6572 @return   The functions wasctime and wctime return a pointer to the resulting wide-character string.
       
  6573 
       
  6574   The function wctime takes a time value representing the time in seconds since the 
       
  6575 Epoch (00:00:00 UTC, January 1, 1970) as an argument. See time
       
  6576 
       
  6577  The function wctime adjusts the time value for the current time zone in the same 
       
  6578   manner as localtime and returns a pointer to a 26-wide character string of the 
       
  6579   form: Thu Nov 24 18:22:48 1986
       
  6580 \\0 All the fields have constant width.
       
  6581 
       
  6582  The function wasctime converts the broken down time in the structure tm , pointed at by *tm , to the form shown in the example above.
       
  6583 
       
  6584  @code
       
  6585  External declarations as well as the tm structure definition are in the #include <time.h> include file. The tm structure includes 
       
  6586   at least the following fields: 
       
  6587 
       
  6588 int tm_sec;/* seconds (0 - 60) */
       
  6589 int tm_min;/* minutes (0 - 59) */
       
  6590 int tm_hour;/* hours (0 - 23) */
       
  6591 int tm_mday;/* day of month (1 - 31) */
       
  6592 int tm_mon;/* month of year (0 - 11) */
       
  6593 int tm_year;/* year - 1900 */
       
  6594 int tm_wday;/* day of week (Sunday = 0) */
       
  6595 int tm_yday;/* day of year (0 - 365) */
       
  6596 int tm_isdst;/* is summer time in effect? */
       
  6597 char *tm_zone;/* abbreviation of timezone name */
       
  6598 long tm_gmtoff;/* offset from UTC in seconds */
       
  6599 @endcode
       
  6600 
       
  6601  The
       
  6602 field tm_isdst is non-zero if summer time is in effect.
       
  6603 
       
  6604  The field tm_gmtoff is the offset (in seconds) of the time represented from UTC, with positive
       
  6605 values indicating east of the Prime Meridian.
       
  6606 
       
  6607 
       
  6608 
       
  6609 Examples:
       
  6610 @code
       
  6611 //Example usage of wasctime and wctime:
       
  6612 #include <time.h>
       
  6613 #include <stdio.h>
       
  6614 int main(){
       
  6615         time_t t;
       
  6616         struct tm *timeptr;
       
  6617         wchar_t* wasc_time;
       
  6618         t = time (NULL); //Get current time in seconds from Epoc
       
  6619         //Fill tm struct w.r.t localtime using localtime
       
  6620         timeptr = localtime (&t;);
       
  6621         //Use this to convert it to a string indicating time w.r.t localtime
       
  6622         wasc_time = wasctime (timeptr);
       
  6623         wprintf (L"Time from wasctime w.r.t localtime : %s", wasc_time);
       
  6624                 wprintf(L"Time from wctime w.r.t localtime : %s0, wctime(&t;) );
       
  6625          return 0;
       
  6626 }
       
  6627 
       
  6628 @endcode
       
  6629  Output
       
  6630 @code
       
  6631 Time from wasctime w.r.t localtime : Thu Jun 22 10:42:27 2006
       
  6632 Time from wctime w.r.t localtime : Thu Jun 22 10:42:27 2006
       
  6633 
       
  6634 @endcode
       
  6635 @code
       
  6636 
       
  6637 @endcode
       
  6638 @see asctime()
       
  6639 @see ctime()
       
  6640 
       
  6641 
       
  6642 Bugs:
       
  6643 
       
  6644  These functions leave their result in an internal static object and return
       
  6645 a pointer to that object.
       
  6646 Subsequent calls to these
       
  6647 functions will modify the same object. The C Standard provides no mechanism for a program to modify its current local 
       
  6648   timezone setting and the POSIX -standard method is not reentrant. (However, thread-safe implementations 
       
  6649   are provided in the POSIX threaded environment.) The tm_zone field of a returned tm structure points to a static array of characters which will also be overwritten 
       
  6650   by any subsequent calls (as well as by subsequent call to tzset ) 
       
  6651 
       
  6652  
       
  6653 
       
  6654 @publishedAll
       
  6655 @released
       
  6656 */
       
  6657 
       
  6658 /** @fn  wsetlocale(int category, const wchar_t *locale)
       
  6659 @param category
       
  6660 @param locale
       
  6661 @return   Upon successful completion, wsetlocale returns the  wide char string associated with the specified category for the requested locale. The wsetlocale function returns NULL and fails to change the locale
       
  6662 if the given combination of category and locale make no sense.
       
  6663 
       
  6664 
       
  6665 The wsetlocale function sets the C library's notion
       
  6666 of natural language formatting style
       
  6667 for particular sets of routines.
       
  6668 Each such style is called a 'locale'
       
  6669 and is invoked using an appropriate name passed as a wide char string.
       
  6670 
       
  6671  The wsetlocale function can recognise several categories of routines.
       
  6672 The categories and the sets of routines recognised by wsetlocale are listed below:
       
  6673 
       
  6674  @code
       
  6675  LC_ALL Set the entire locale generically.
       
  6676  LC_COLLATE Set a locale for string collation routines. Currently locale setting does not have effect on
       
  6677  this category.
       
  6678  LC_CTYPE This controls recognition of upper and lower case,
       
  6679  alphabetic or non-alphabetic characters,
       
  6680  and so on. Currently locale setting does not have effect on this category.
       
  6681  LC_MESSAGES
       
  6682   Set a locale for message catalogs. Currently this category is not supported.
       
  6683  LC_MONETARY
       
  6684   Set a locale for formatting monetary values;
       
  6685  this affects the localeconv function.
       
  6686  LC_NUMERIC Set a locale for formatting numbers.
       
  6687  This controls the formatting of decimal points
       
  6688  in input and output of floating point numbers
       
  6689  in functions such as printf and scanf, as well as values returned by localeconv.
       
  6690  LC_TIME Set a locale for formatting dates and times using the strftime function.
       
  6691 
       
  6692 @endcode
       
  6693 
       
  6694  Only three locales are defined by default,
       
  6695 the empty string which denotes the native environment, the C 
       
  6696 and the POSIX 
       
  6697 locales, which denote the C language environment.
       
  6698 A locale argument of NULL causes wsetlocale to return the current locale.
       
  6699 By default, C programs start in the C 
       
  6700 locale.
       
  6701 The only functions in the library that set the locale are wsetlocale and setlocale; the locale is never changed as a side effect of some other routine.
       
  6702 
       
  6703 Examples:
       
  6704 @code
       
  6705 #include<stdio.h>
       
  6706 #include<wchar.h>
       
  6707 int main()
       
  6708 {
       
  6709         //Set the locale to UK English
       
  6710         wchar_t* locale = wsetlocale(LC_ALL,L"en_GB.ISO-8859-1");
       
  6711         //Check whether locale setting is succesful or not
       
  6712         if(NULL != locale)
       
  6713         {
       
  6714                 wprintf(L"Locale setting is successful
       
  6715 ");
       
  6716                 wprintf(L"Locale is set to %s
       
  6717 ", locale);
       
  6718         }
       
  6719         else
       
  6720         {
       
  6721                 wprintf(L"Locale setting failed
       
  6722 ");
       
  6723         }
       
  6724         return 0;
       
  6725 }
       
  6726 
       
  6727 @endcode
       
  6728  Output
       
  6729 @code
       
  6730 Locale setting is successful
       
  6731 Locale is set to en_GB.ISO-8859-1
       
  6732 
       
  6733 @endcode
       
  6734 @see setlocale()
       
  6735 @see localeconv()
       
  6736 @see nl_langinfo()
       
  6737 
       
  6738 
       
  6739  
       
  6740 
       
  6741 @publishedAll
       
  6742 @released
       
  6743 */
       
  6744 
       
  6745 /** @fn  wperror(const wchar_t *s)
       
  6746 @param s
       
  6747 
       
  6748 Note: This description also covers the following functions -
       
  6749  wcserror() 
       
  6750 
       
  6751 @return   The function wcserror returns the appropriate error description wide char string, or an unknown error message if the error code is unknown. The value of errno is not changed for a successful call, and is set to a nonzero value upon error.
       
  6752 
       
  6753   The functions wcserror and wperror look up the error message string corresponding to an
       
  6754 error number.
       
  6755 
       
  6756  The function wcserror function accepts an error number argument errnum (error number) and returns a pointer to the corresponding
       
  6757 message string.
       
  6758 
       
  6759  The function wperror finds the error message corresponding to the current
       
  6760 value of the global variable errno and writes it, followed by a newline, to the
       
  6761 standard error file descriptor.
       
  6762 If the argument s is non- NULL and does not point to the null character,
       
  6763 this wide char string is prepended to the message
       
  6764 string and separated from it by
       
  6765 a colon and space (": ");
       
  6766 otherwise, only the error message string is printed.
       
  6767 
       
  6768  If the error number is not recognized, these functions return an error message
       
  6769 string containing "Unknown error: "
       
  6770 followed by the error number in decimal.
       
  6771 The wcserror function returns EINVAL as a warning.
       
  6772 Error numbers recognized by this implementation fall in
       
  6773 the range 0 \<errnum \<sys_nerr .
       
  6774 
       
  6775  If insufficient storage is provided in strerrbuf (as specified in buflen )
       
  6776 to contain the error string, wcserror returns ERANGE and strerrbuf will contain an error message that has been truncated and NUL terminated to fit the length specified by buflen .
       
  6777 
       
  6778 
       
  6779 
       
  6780 Examples:
       
  6781 @code
       
  6782 #include <string.h>
       
  6783 #include <stdio.h>
       
  6784 #include <errno.h>
       
  6785 #include <wchar.h>
       
  6786 int main()
       
  6787 {
       
  6788     wchar_t *ptr = wcserror(ERANGE);
       
  6789     wprintf(L"wcserror(ERANGE) = %s
       
  6790 ",ptr);
       
  6791     return 0;
       
  6792 }
       
  6793 
       
  6794 @endcode
       
  6795  Output
       
  6796 @code
       
  6797 wcserror(ERANGE) = Numerical result out of range
       
  6798 
       
  6799 @endcode
       
  6800 @see perror()
       
  6801 @see strerror()
       
  6802 
       
  6803 
       
  6804 Bugs:
       
  6805 
       
  6806  For unknown error numbers, the function wcserror will return its result in a static buffer which
       
  6807 may be overwritten by subsequent calls. The return type for wcserror is missing a type-qualifier. The type-qualifier must be const wchar_t * . 
       
  6808 
       
  6809  
       
  6810 
       
  6811 @publishedAll
       
  6812 @released
       
  6813 */
       
  6814 
       
  6815 /** @fn  wcserror(int num)
       
  6816 @param num
       
  6817 
       
  6818 Refer to wperror() for the documentation
       
  6819 
       
  6820 @see perror()
       
  6821 @see strerror()
       
  6822 
       
  6823 
       
  6824  
       
  6825 
       
  6826 @publishedAll
       
  6827 @released
       
  6828 */
       
  6829 
       
  6830 /** @fn  wfindnext(intptr_t handle, struct _wfinddata_t * fileinfo)
       
  6831 @param handle
       
  6832 @param fileinfo
       
  6833 
       
  6834 Refer to wfindfirst() for the documentation
       
  6835 
       
  6836 
       
  6837  
       
  6838 
       
  6839 @publishedAll
       
  6840 @released
       
  6841 */
       
  6842 
       
  6843 /** @fn  wfindfirst(const wchar_t*  filespec, struct _wfinddata_t* fileinfo)
       
  6844 @param filespec
       
  6845 @param fileinfo
       
  6846 
       
  6847 Note: This description also covers the following functions -
       
  6848  wfindnext()  findclose() 
       
  6849 
       
  6850 @return   If successful, wfindfirst return a unique search handle identifying the file or group 
       
  6851   of files matching the filespec specification. The handle can be used in a subsequent 
       
  6852   call to wfindnext or to findclose. Otherwise, wfindfirst returns -1 and sets 
       
  6853   errno accordingly. If successful, wfindnext returns 0. Otherwise, returns -1 and sets errno to a value indicating the nature of the failure. If successful, findclose returns 0.  Otherwise, it returns -1 and sets errno to ENOENT
       
  6854 
       
  6855 Errors:
       
  6856 
       
  6857 [EINVAL]  Invalid parameter: filespec or fileinfo was NULL. Or, the operating system returned an unexpected error. 
       
  6858 [ENOENT]  File specification that could not be matched. 
       
  6859 
       
  6860   The wfindfirst function provides information about the first instance of a file name that matches the file specified in the filespec argument. Any wildcard combination supported by the host operating system can be used in filespec. File information is returned in a _wfinddata_t structure, defined in wchar.h. The  _wfinddata_t structure includes the following elements.
       
  6861 
       
  6862 @code
       
  6863  unsigned attrib File attribute
       
  6864 @endcode
       
  6865 
       
  6866  time_t time_create  Time of file creation (-1L for Symbian OS)
       
  6867 
       
  6868  time_t time_access  Time of the last file access (-1L for Symbian OS)
       
  6869 
       
  6870  time_t time_write Time of the last write to file
       
  6871 
       
  6872  size_t size Length of the file in bytes
       
  6873 
       
  6874  wchar_t name[260] Null-terminated name of matched file/directory, without the path
       
  6875 
       
  6876 
       
  6877 
       
  6878  This attribute is returned in the attrib field of the _wfinddata_t structure and can have the following values (defined in wchar.h). 
       
  6879 
       
  6880  @code
       
  6881  _A_ARCH Archive.
       
  6882  _A_HIDDEN
       
  6883   Hidden file.
       
  6884  _A_NORMAL
       
  6885   Normal.
       
  6886  _A_RDONLY
       
  6887   Read-only.
       
  6888  _A_SYSTEM
       
  6889   System file.
       
  6890 
       
  6891 @endcode
       
  6892 
       
  6893  The wfindnext finds the next name, if any, that matches the filespec argument in a previous call to wfindfirst and then alters the fileinfo structure contents accordingly.
       
  6894 
       
  6895  The findclose closes the specified search handle and releases the associated resources.
       
  6896 
       
  6897 
       
  6898 
       
  6899 
       
  6900 
       
  6901 Examples:
       
  6902 @code
       
  6903 #include <wchar.h>
       
  6904 int main( void )
       
  6905 {
       
  6906    struct _wfinddata_t c_file;
       
  6907    intptr_t hFile;
       
  6908    // Find  .txt file in current directory
       
  6909    if( (hFile = wfindfirst( L"*.txt", &c;_file )) == -1L )
       
  6910       printf( "No *.txt files in current directory" );
       
  6911    else
       
  6912    {
       
  6913         int i = 1;
       
  6914       do {
       
  6915              wprintf( L" File %d = %s ",i,c_file.name);
       
  6916              i++;
       
  6917                      } while( wfindnext( hFile, &c;_file ) == 0 );
       
  6918       findclose( hFile );
       
  6919    }
       
  6920    return 0 ;
       
  6921 }  
       
  6922 
       
  6923 @endcode
       
  6924  Output
       
  6925 @code
       
  6926 File 1 = test1.txt
       
  6927 File 2 = test2.txt
       
  6928 
       
  6929 @endcode
       
  6930 
       
  6931 Bugs:
       
  6932 
       
  6933  Does not support any attribute to find out the sub-directories
       
  6934 (i.e., attribute _A_SUBDIR not supported).
       
  6935  
       
  6936 
       
  6937 @publishedAll
       
  6938 @released
       
  6939 */
       
  6940 
       
  6941 /** @fn  findclose(intptr_t handle)
       
  6942 @param handle
       
  6943 
       
  6944 Refer to wfindfirst() for the documentation
       
  6945 
       
  6946 
       
  6947  
       
  6948 
       
  6949 @publishedAll
       
  6950 @released
       
  6951 */
       
  6952 
       
  6953 /** @fn  wcsnicmp(const wchar_t *wcs1, const wchar_t *wcs2, size_t n)
       
  6954 @param wcs1
       
  6955 @param wcs2
       
  6956 @param n
       
  6957 
       
  6958   The wcsnicmp() function
       
  6959 compares the first n characters from two null-terminated wide-character strings wcs1 and wcs2, by converting them into lower-case.
       
  6960 It returns an integer value indicating the status of
       
  6961 the comparision.
       
  6962 
       
  6963 @return   The wcsnicmp() returns an integer greater than, equal to, or less than 0,
       
  6964 according as wcs1 is lexicographically greater than, equal to, or less than wcs2 after translation of each corresponding character to lower-case.
       
  6965 The strings themselves are not modified.
       
  6966 
       
  6967 Examples:
       
  6968 @code
       
  6969 #include <wchar.h>
       
  6970 /* Illustrates how to use wcsnicmp API */
       
  6971 int example_wcsnicmp(void)
       
  6972 { 
       
  6973   /* input strings which needs to be compared */
       
  6974   wchar_t *ws1=L"testcasecmp";
       
  6975   wchar_t *ws2=L"TESTCASECMP";
       
  6976     
       
  6977   /* function call to compare the two strings which */
       
  6978   /* differ in case */
       
  6979   int retval = wcsnicmp(ws1,ws2,12);
       
  6980   /* returns 0 if they are equal or > 1 */
       
  6981   /* if first string is greater than second string else -1 */
       
  6982   return retval;
       
  6983 }
       
  6984 
       
  6985 @endcode
       
  6986 @see strcasecmp()
       
  6987 @see wcscasecmp()
       
  6988 @see wcsncasecmp()
       
  6989 
       
  6990 
       
  6991  
       
  6992 
       
  6993 @publishedAll
       
  6994 @released
       
  6995 */
       
  6996 
       
  6997 /** @fn  wcsicoll(const wchar_t *wcs1, const wchar_t *wcs2)
       
  6998 @param wcs1
       
  6999 @param wcs2
       
  7000 @return   The wcsicoll function
       
  7001 returns an integer greater than, equal to, or less than 0,
       
  7002 if wcs1 is greater than, equal to, or less than wcs2. No return value is reserved to indicate errors;
       
  7003 callers should set errno to 0 before calling wcsicoll .
       
  7004 If it is non-zero upon return from wcsicoll ,
       
  7005 an error has occurred.
       
  7006 
       
  7007   The wcsicoll function compares the null-terminated strings wcs1 and wcs2 according to the current locale collation order, by ignoring the case.
       
  7008 In the "C"
       
  7009 locale, wcsicoll is equivalent to wcsicmp .
       
  7010 
       
  7011 Examples:
       
  7012 @code
       
  7013 #include <wchar.h>
       
  7014 /* Illustrates how to use wcsicoll API */
       
  7015 int example_wcsicoll (void)
       
  7016 {  
       
  7017         /* compares the two strings */
       
  7018   if( wcsicoll(L"abcdef",L"abcdeg") != L'f'-L'g')  
       
  7019    return -1;
       
  7020  return 0;
       
  7021 }
       
  7022 
       
  7023 @endcode
       
  7024 
       
  7025 Limitations:
       
  7026 
       
  7027 The current implementation of wcsicoll is not affected by the LC_CTYPE category of the current locale. It is equivalent to wcsicmp in this implementation.
       
  7028 
       
  7029 @see setlocale()
       
  7030 @see strcoll()
       
  7031 @see wcsicmp()
       
  7032 @see wcsxfrm()
       
  7033 
       
  7034 
       
  7035 Bugs:
       
  7036 
       
  7037 The current implementation of wcsicoll only works in single-byte LC_CTYPE locales, and falls back to using wcsicmp in locales with extended character sets. 
       
  7038 
       
  7039  
       
  7040 
       
  7041 @publishedAll
       
  7042 @released
       
  7043 */
       
  7044 
       
  7045 /** @fn  wcsncoll(const wchar_t *wcs1, const wchar_t *wcs2, size_t n)
       
  7046 @param wcs1
       
  7047 @param wcs2
       
  7048 @param n
       
  7049 @return   The wcsncoll function
       
  7050 returns an integer greater than, equal to, or less than 0,
       
  7051 if wcs1 is greater than, equal to, or less than wcs2 . No return value is reserved to indicate errors;
       
  7052 callers should set errno to 0 before calling wcsncoll .
       
  7053 If it is non-zero upon return from wcsncoll ,
       
  7054 an error has occurred.
       
  7055 
       
  7056   The wcsncoll function compares the first n chars from the two null-terminated strings wcs1 and wcs2 according to the current locale collation order.
       
  7057 In the "C"
       
  7058 locale, wcsncoll is equivalent to wcscmp .
       
  7059 
       
  7060 Examples:
       
  7061 @code
       
  7062 #include <wchar.h>
       
  7063 /* Illustrates how to use wcsncoll API */
       
  7064 int example_wcsncoll (void)
       
  7065 {  
       
  7066         /* compares the two strings */
       
  7067   if( wcsncoll(L"abcdef",L"abcdeg",7) != L'f'-L'g')  
       
  7068    return -1;
       
  7069  return 0;
       
  7070 }
       
  7071 
       
  7072 @endcode
       
  7073 
       
  7074 Limitations:
       
  7075 
       
  7076 The current implementation of wcsncoll is not affected by the LC_CTYPE category of the current locale. It is equivalent to wcscoll in this implementation.
       
  7077 
       
  7078 @see setlocale()
       
  7079 @see strcoll()
       
  7080 @see wcscoll()
       
  7081 @see wcsncmp()
       
  7082 @see wcsxfrm()
       
  7083 
       
  7084 
       
  7085 
       
  7086 Bugs:
       
  7087 
       
  7088  The current implementation of wcsncoll only works in single-byte LC_CTYPE locales, and falls back to using wcscoll in locales with extended character sets. 
       
  7089 
       
  7090  
       
  7091 
       
  7092 @publishedAll
       
  7093 @released
       
  7094 */
       
  7095 
       
  7096 
       
  7097 /** @fn  wcsnicoll(const wchar_t *wcs1, const wchar_t *wcs2, size_t n)
       
  7098 @param wcs1
       
  7099 @param wcs2
       
  7100 @param n
       
  7101 @return   The wcsnicoll function
       
  7102 returns an integer greater than, equal to, or less than 0,
       
  7103 if wcs1 is greater than, equal to, or less than wcs2 . No return value is reserved to indicate errors;
       
  7104 callers should set errno to 0 before calling wcsnicoll .
       
  7105 If it is non-zero upon return from wcsnicoll ,
       
  7106 an error has occurred.
       
  7107 
       
  7108   The wcsnicoll function compares the null-terminated strings wcs1 and wcs2 according to the current locale collation order.
       
  7109 In the "C"
       
  7110 locale, wcsnicoll is equivalent to wcsncasecmp .
       
  7111 
       
  7112 Examples:
       
  7113 @code
       
  7114 #include <wchar.h>
       
  7115 /* Illustrates how to use wcsnicoll API */
       
  7116 int example_wcsnicoll (void)
       
  7117 {  
       
  7118         /* compares the two strings */
       
  7119   if( wcsnicoll(L"abcdef",L"abcdeg",7) != L'f'-L'g')  
       
  7120    return -1;
       
  7121  return 0;
       
  7122 }
       
  7123 
       
  7124 @endcode
       
  7125 
       
  7126 Limitations:
       
  7127 
       
  7128 The current implementation of wcsnicoll is not affected by the LC_CTYPE category of the current locale. It is equivalent to wcsncasecmp in this implementation.
       
  7129 
       
  7130 @see setlocale()
       
  7131 @see strcoll()
       
  7132 @see wcscmp()
       
  7133 @see wcsxfrm()
       
  7134 @see wcsncasecmp()
       
  7135 
       
  7136 
       
  7137 Bugs:
       
  7138 
       
  7139  The current implementation of wcsnicoll only works in single-byte LC_CTYPE locales, and falls back to using wcsncoll in locales with extended character sets. 
       
  7140  
       
  7141 
       
  7142 @publishedAll
       
  7143 @released
       
  7144 */
       
  7145 
       
  7146 
       
  7147 /** @fn  wtmpnam(wchar_t *s)
       
  7148 @param s
       
  7149 @return   The wtmpnam function returns a pointer to a file name on success and a NULL pointer on error.
       
  7150 
       
  7151   The wtmpnam function returns a pointer to a file name in the P_tmpdir directory which did not reference an existing file at some 
       
  7152 indeterminate point in the past. P_tmpdir is defined in the include file stdio.h . If the argument s is non-NULL, the file name is copied to the buffer it references. Otherwise, the 
       
  7153 file name is copied to a static buffer. In either case, wtmpnam returns a pointer to the file name.
       
  7154 
       
  7155  The buffer referenced by s is expected to be at least L_tmpnam bytes in length. L_tmpnam is defined in the include file stdio.h .
       
  7156 
       
  7157  The environment variable TMPDIR (if set), the argument tmpdir (if non-NULL), the directory P_tmpdir , and the directory /tmp are tried in that order as directories in which to store the 
       
  7158   temporary file.
       
  7159 
       
  7160 
       
  7161 
       
  7162 Examples:
       
  7163 @code
       
  7164 #include<stdio.h> //wtmpnam
       
  7165 #include<sys/stat.h> //S_IWUSR
       
  7166 #include<errno.h> //errno
       
  7167   
       
  7168 int main()
       
  7169 {
       
  7170  //create a directory c:\system emp
       
  7171  wmkdir(L"c:\system\temp", S_IWUSR);
       
  7172   
       
  7173  wchar_t wbuf[L_tmpnam];
       
  7174  wchar_t rbuf[10];
       
  7175   
       
  7176  //call wtmpnam() to create a file
       
  7177  wchar_t *rval = wtmpnam(wbuf);
       
  7178   
       
  7179  errno = 0;
       
  7180  //open the file with the name returned by wtmpnam()
       
  7181  FILE *fp = wfopen(buf, L"w");
       
  7182   
       
  7183  if (fp == NULL)
       
  7184  {
       
  7185      printf("fopen of file returned by wtmpnam() failed - errno %d ", errno);
       
  7186      return -1;
       
  7187  }
       
  7188     
       
  7189  if(fp)
       
  7190  {
       
  7191     fwprintf(fp, L"%ls", L"check");
       
  7192     fclose(fp);
       
  7193  }
       
  7194    
       
  7195  fp = wfopen(buf, L"r");
       
  7196   
       
  7197  if(fp)
       
  7198  {
       
  7199      fwscanf(fp, L"%ls", rbuf);
       
  7200      fclose(fp);
       
  7201  }
       
  7202   
       
  7203  printf("read from file: %ls
       
  7204 ", rbuf);
       
  7205  printf("argument buf: %ls
       
  7206 ", buf);
       
  7207  printf("return value: %ls
       
  7208 ", rval);
       
  7209   
       
  7210  return 0;
       
  7211 }
       
  7212 
       
  7213 @endcode
       
  7214  Output
       
  7215 @code
       
  7216 read from file: check
       
  7217 argument buf: /System/temp/tmp.0.U9UPTx
       
  7218 return value: /System/temp/tmp.0.U9UPTx
       
  7219 
       
  7220 @endcode
       
  7221 @see mktemp()
       
  7222 @see tmpnam()
       
  7223 
       
  7224 
       
  7225  
       
  7226 
       
  7227 @publishedAll
       
  7228 @released
       
  7229 */
       
  7230 
       
  7231 
       
  7232 
       
  7233 /** @typedef typedef	__mbstate_t	mbstate_t
       
  7234 
       
  7235 An object type other than an array type that can hold the conversion state information necessary to convert between sequences of (possibly multibyte) characters and wide-characters. 
       
  7236 If a codeset is being used such that an mbstate_t needs to preserve more than 2 levels of reserved state, the results are unspecified.
       
  7237 
       
  7238 @publishedAll
       
  7239 @externallyDefinedApi
       
  7240 */
       
  7241 
       
  7242 
       
  7243 /** @typedef typedef	__wint_t	wint_t
       
  7244 
       
  7245 An integral type capable of storing any valid value of wchar_t, or WEOF.
       
  7246 
       
  7247 @publishedAll
       
  7248 @externallyDefinedApi
       
  7249 */
       
  7250 
       
  7251 
       
  7252 /** @def WCHAR_MIN
       
  7253 
       
  7254 The minimum value representable by an object of type wchar_t.
       
  7255 
       
  7256 @publishedAll
       
  7257 @externallyDefinedApi
       
  7258 */
       
  7259 
       
  7260 /** @def WCHAR_MAX
       
  7261 
       
  7262 The maximum value representable by an object of type wchar_t.
       
  7263 
       
  7264 @publishedAll
       
  7265 @externallyDefinedApi
       
  7266 */
       
  7267 
       
  7268 /** @def WEOF 
       
  7269 
       
  7270 Constant expression of type wint_t that is returned by several WP functions to indicate end-of-file.
       
  7271 
       
  7272 @publishedAll
       
  7273 @externallyDefinedApi
       
  7274 */
       
  7275 
       
  7276 /** @fn wpopen3 (const wchar_t* file, const wchar_t* cmd, wchar_t** env, int fids[3])
       
  7277 @param file
       
  7278 @param cmd
       
  7279 @param env
       
  7280 @param fids
       
  7281 
       
  7282 Note:wpopen3 is a wide-character version of popen3()
       
  7283 
       
  7284 @return Upon successful completion, it returns pid of the child.
       
  7285 
       
  7286 Examples:
       
  7287 
       
  7288 @code
       
  7289 
       
  7290 /* Illustrates how to use wpopen3 API */
       
  7291 #include <wchar.h>
       
  7292 int main()
       
  7293 	{
       
  7294 	int fds[3];
       
  7295 	int childid= wpopen3( NULL,NULL, NULL, fds);
       
  7296 	if  (childid == -1 && errno == ENOENT) 
       
  7297 		{        
       
  7298       	printf("wpopen success");
       
  7299 		return 0;
       
  7300 		}
       
  7301 	return -1;
       
  7302 	}
       
  7303 @endcode
       
  7304 @code
       
  7305 Output:
       
  7306 wpopen success
       
  7307 @endcode
       
  7308 
       
  7309 @publishedAll
       
  7310 @released
       
  7311 */