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

VxWorks

开发平台:

C/C++

  1. /* strtok_r.c - file for string */
  2. /* Copyright 1992-1995 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,23oct95,jdi  doc: added comment that input string will be
  7.     changed (SPR 4874).
  8. 01c,25feb93,jdi  documentation cleanup for 5.1.
  9. 01b,20sep92,smb  documentation additions
  10. 01a,08jul92,smb  written and documented.
  11. */
  12. /*
  13. DESCRIPTION
  14. INCLUDE FILES: string.h
  15. SEE ALSO: American National Standard X3.159-1989
  16. NOMANUAL
  17. */
  18. #include "vxWorks.h"
  19. #include "string.h"
  20. /*****************************************************************************
  21. *
  22. * strtok_r - break down a string into tokens (reentrant) (POSIX)
  23. *
  24. * This routine considers the null-terminated string <string> as a sequence
  25. * of zero or more text tokens separated by spans of one or more characters
  26. * from the separator string <separators>.  The argument <ppLast> points to a
  27. * user-provided pointer which in turn points to the position within <string>
  28. * at which scanning should begin.
  29. *
  30. * In the first call to this routine, <string> points to a null-terminated
  31. * string; <separators> points to a null-terminated string of separator
  32. * characters; and <ppLast> points to a NULL pointer.  The function returns a
  33. * pointer to the first character of the first token, writes a null character
  34. * into <string> immediately following the returned token, and updates the
  35. * pointer to which <ppLast> points so that it points to the first character
  36. * following the null written into <string>.  (Note that because the
  37. * separator character is overwritten by a null character, the input string
  38. * is modified as a result of this call.)
  39. *
  40. * In subsequent calls <string> must be a NULL pointer and <ppLast> must
  41. * be unchanged so that subsequent calls will move through the string <string>,
  42. * returning successive tokens until no tokens remain.  The separator
  43. * string <separators> may be different from call to call.  When no token
  44. * remains in <string>, a NULL pointer is returned.
  45. *
  46. * INCLUDE FILES: string.h
  47. * RETURNS
  48. * A pointer to the first character of a token,
  49. * or a NULL pointer if there is no token.
  50. *
  51. * SEE ALSO: strtok()
  52. */
  53. char * strtok_r
  54.     (
  55.     char *       string, /* string to break into tokens */
  56.     const char * separators, /* the separators */
  57.     char **      ppLast /* pointer to serve as string index */
  58.     )
  59.     {
  60.     if ((string == NULL) && ((string = *ppLast) == NULL))
  61. return (NULL);
  62.     if (*(string += strspn (string, separators)) == EOS)
  63. return (*ppLast = NULL);
  64.     if ((*ppLast = strpbrk (string, separators)) != NULL)
  65. *(*ppLast)++ = EOS;
  66.     return (string);
  67.     }