Rev 3729 | Rev 3731 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3729 | Rev 3730 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /* |
1 | /* |
2 | * Copyright (c) 2005 Martin Decky |
2 | * Copyright (c) 2005 Martin Decky |
3 | * Copyright (C) 1998 by Wes Peters <wes@softweyr.com> |
3 | * Copyright (c) 2008 Jiri Svoboda |
4 | * Copyright (c) 1988, 1993 The Regents of the University of California. |
- | |
5 | * All rights reserved. |
4 | * All rights reserved. |
6 | * |
5 | * |
7 | * Redistribution and use in source and binary forms, with or without |
6 | * Redistribution and use in source and binary forms, with or without |
8 | * modification, are permitted provided that the following conditions |
7 | * modification, are permitted provided that the following conditions |
9 | * are met: |
8 | * are met: |
Line 510... | Line 509... | ||
510 | return (char *) NULL; |
509 | return (char *) NULL; |
511 | 510 | ||
512 | return (char *) memcpy(ret, s1, len); |
511 | return (char *) memcpy(ret, s1, len); |
513 | } |
512 | } |
514 | 513 | ||
515 | /* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
- | |
516 | char * strtok_r(char *s, const char *delim, char **last) |
514 | char *strtok(char *s, const char *delim) |
517 | { |
515 | { |
518 | char *spanp, *tok; |
516 | static char *next; |
519 | int c, sc; |
- | |
520 | 517 | ||
521 | if (s == NULL && (s = *last) == NULL) |
518 | return strtok_r(s, delim, &next); |
522 | return (NULL); |
519 | } |
523 | 520 | ||
524 | cont: |
- | |
525 | c = *s++; |
- | |
526 | for (spanp = (char *)delim; (sc = *spanp++) != 0;) { |
521 | char *strtok_r(char *s, const char *delim, char **next) |
527 | if (c == sc) |
- | |
528 | goto cont; |
- | |
529 | } |
522 | { |
- | 523 | char *start, *end; |
|
530 | 524 | ||
531 | if (c == 0) { /* no non-delimiter characters */ |
- | |
532 | *last = NULL; |
525 | if (s == NULL) |
533 | return (NULL); |
526 | s = *next; |
534 | } |
- | |
535 | 527 | ||
- | 528 | /* Skip over leading delimiters. */ |
|
- | 529 | while (*s && (strchr(delim, *s) != NULL)) ++s; |
|
536 | tok = s - 1; |
530 | start = s; |
537 | 531 | ||
538 | for (;;) { |
- | |
539 | c = *s++; |
- | |
540 | spanp = (char *)delim; |
532 | /* Skip over token characters. */ |
541 | do { |
- | |
542 | if ((sc = *spanp++) == c) { |
533 | while (*s && (strchr(delim, *s) == NULL)) ++s; |
543 | if (c == 0) |
- | |
544 | s = NULL; |
- | |
545 | else |
- | |
546 | s[-1] = '\0'; |
- | |
547 | *last = s; |
534 | end = s; |
548 | return (tok); |
- | |
549 | } |
- | |
550 | } while (sc != 0); |
535 | *next = (*s ? s + 1 : s); |
551 | } |
- | |
552 | } |
- | |
553 | 536 | ||
554 | /* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
537 | if (start == end) { |
555 | char * strtok(char *s, const char *delim) |
538 | return NULL; /* No more tokens. */ |
556 | { |
539 | } |
557 | static char *last; |
- | |
558 | 540 | ||
- | 541 | /* Overwrite delimiter with NULL terminator. */ |
|
- | 542 | *end = '\0'; |
|
559 | return (strtok_r(s, delim, &last)); |
543 | return start; |
560 | } |
544 | } |
561 | 545 | ||
562 | /** @} |
546 | /** @} |
563 | */ |
547 | */ |