setlocale.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* setlocale.c - ANSI locale */
  2. /* Copyright 1992-1993 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,30aug93,jmm  fixed null pointer dereference in setlocale() (spr 2490)
  7. 01e,07feb93,jdi  documentation cleanup for 5.1.
  8. 01d,28sep92,smb  added ANSI to function description
  9. 01c,20sep92,smb  documentation additions
  10. 01b,14sep92,smb  added some minor error checking.
  11. 01a,08jul92,smb  written
  12. */
  13. /*
  14. DESCRIPTION
  15. INCLUDE FILE: locale.h string.h stdlib.h 
  16. SEE ALSO: American National Standard X3.159-1989
  17. NOMANUAL
  18. */
  19. #include "vxWorks.h"
  20. #include "locale.h"
  21. #include "string.h"
  22. #include "stdlib.h"
  23. #include "ctype.h"
  24. #include "private/localeP.h"
  25. LOCAL char *currentName = "C"; /* current locale name */
  26. __linfo     __clocale = 
  27.     {
  28.     "C"
  29.     };
  30. /*******************************************************************************
  31. *
  32. * setlocale - set the appropriate locale (ANSI)
  33. *
  34. * This function selects the appropriate portion of the program's locale as
  35. * specified by the <category> and <localeName> arguments.  This routine can
  36. * be used to change or query the program's entire current locale or portions
  37. * thereof.
  38. *
  39. * Values for <category> affect the locale as follows:
  40. * .iP LC_ALL
  41. * specifies the program's entire locale.
  42. * .iP LC_COLLATE
  43. * affects the behavior of the strcoll() and strxfrm() functions.
  44. * .iP LC_CTYPE
  45. * affects the behavior of the character-handling functions and the multi-byte
  46. * functions.
  47. * .iP LC_MONETARY
  48. * affects the monetary-formatting information returned by localeconv().
  49. * .iP LC_NUMERIC
  50. * affects the decimal-point character for the formatted input/output
  51. * functions and the string-conversion functions, as well as the
  52. * nonmonetary-formatting information returned by localeconv().
  53. * .iP LC_TIME
  54. * affects the behavior of the strftime() function.
  55. * .LP
  56. *
  57. * A value of "C" for <localeName> specifies the minimal environment for C
  58. * translation; a value of "" specifies the implementation-defined native
  59. * environment.  Other implementation-defined strings may be passed as the
  60. * second argument.
  61. *
  62. * At program start-up, the equivalent of the following is executed:
  63. * .CS
  64. *     setlocale (LC_ALL, "C");
  65. * .CE
  66. *
  67. * The implementation behaves as if no library function calls setlocale().
  68. *
  69. * If <localeName> is a pointer to a string and the selection can be
  70. * honored, setlocale() returns a pointer to the string associated with the
  71. * specified category for the new locale.  If the selection cannot be
  72. * honored, it returns a null pointer and the program's locale is unchanged.
  73. *
  74. * If <localeName> is null pointer, setlocale() returns a pointer to the
  75. * string associated with the category for the program's current locale; the
  76. * program's locale is unchanged.
  77. *
  78. * The string pointer returned by setlocale() is such that a subsequent call
  79. * with that string value and its associated category will restore that part
  80. * of the program's locale.  The string is not modified by the program, but
  81. * may be overwritten by a subsequent call to setlocale().
  82. *
  83. * Currently, only the "C" locale is implemented in this library.
  84. *
  85. * INCLUDE FILES: locale.h, string.h, stdlib.h 
  86. *
  87. * RETURNS: A pointer to the string "C".
  88. */
  89. char *setlocale 
  90.     (
  91.     int category, /* category to change */
  92.     const char *localeName /* locale name */
  93.     )
  94.     {
  95.     if (localeName != NULL &&
  96. (strcmp (localeName, currentName) != 0) && 
  97. (strcmp (localeName, "") != 0))
  98.         return (NULL);
  99.     return (CHAR_FROM_CONST(currentName));
  100.     }