|
|
1.1 ! root 1: /* split.c ! 2: Split a string into tokens. ! 3: ! 4: Copyright (C) 1992 Ian Lance Taylor ! 5: ! 6: This file is part of the Taylor UUCP uuconf library. ! 7: ! 8: This library is free software; you can redistribute it and/or ! 9: modify it under the terms of the GNU Library General Public License ! 10: as published by the Free Software Foundation; either version 2 of ! 11: the License, or (at your option) any later version. ! 12: ! 13: This library is distributed in the hope that it will be useful, but ! 14: WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 16: Library General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU Library General Public ! 19: License along with this library; if not, write to the Free Software ! 20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ! 21: ! 22: The author of the program may be contacted at [email protected] or ! 23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254. ! 24: */ ! 25: ! 26: #include "uucnfi.h" ! 27: ! 28: #if USE_RCS_ID ! 29: const char _uuconf_split_rcsid[] = "$Id: split.c,v 1.1 93/07/30 08:07:33 bin Exp Locker: bin $"; ! 30: #endif ! 31: ! 32: #include <ctype.h> ! 33: ! 34: /* Split a string into tokens. The bsep argument is the separator to ! 35: use. If it is the null byte, white space is used as the separator, ! 36: and leading white space is discarded. Otherwise, each occurrence ! 37: of the separator character delimits a field (and thus some fields ! 38: may be empty). The array and size arguments may be used to reuse ! 39: the same memory. This function is not tied to uuconf; the only way ! 40: it can fail is if malloc or realloc fails. */ ! 41: ! 42: int ! 43: _uuconf_istrsplit (zline, bsep, ppzsplit, pcsplit) ! 44: register char *zline; ! 45: int bsep; ! 46: char ***ppzsplit; ! 47: size_t *pcsplit; ! 48: { ! 49: size_t i; ! 50: ! 51: i = 0; ! 52: ! 53: while (TRUE) ! 54: { ! 55: if (bsep == '\0') ! 56: { ! 57: while (isspace (BUCHAR (*zline))) ! 58: ++zline; ! 59: if (*zline == '\0') ! 60: break; ! 61: } ! 62: ! 63: if (i >= *pcsplit) ! 64: { ! 65: char **pznew; ! 66: size_t cnew; ! 67: ! 68: if (*pcsplit == 0) ! 69: { ! 70: cnew = 8; ! 71: pznew = (char **) malloc (cnew * sizeof (char *)); ! 72: } ! 73: else ! 74: { ! 75: cnew = *pcsplit * 2; ! 76: pznew = (char **) realloc ((pointer) *ppzsplit, ! 77: cnew * sizeof (char *)); ! 78: } ! 79: if (pznew == NULL) ! 80: return -1; ! 81: *ppzsplit = pznew; ! 82: *pcsplit = cnew; ! 83: } ! 84: ! 85: (*ppzsplit)[i] = zline; ! 86: ++i; ! 87: ! 88: if (bsep == '\0') ! 89: { ! 90: while (*zline != '\0' && ! isspace (BUCHAR (*zline))) ! 91: ++zline; ! 92: } ! 93: else ! 94: { ! 95: while (*zline != '\0' && *zline != bsep) ! 96: ++zline; ! 97: } ! 98: ! 99: if (*zline == '\0') ! 100: break; ! 101: ! 102: *zline++ = '\0'; ! 103: } ! 104: ! 105: return i; ! 106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.