# 2.11BSD#431 - /usr/src/new/nntp/server/parsit.c

##### Functions

    parsit            X

       1: #ifndef lint
       2: static char *osccsid = "@(#)parsit.c	1.1	(Berkeley) 12/5/84";
       3: static char *sccsid = "@(#)parsit.c	1.2	(Berkeley) 10/15/87";
       4: #endif
       5:
       6: /*
       7:  * Parse a string of words separated by spaces into an
       8:  * array of pointers to characters, just like good ol' argv[]
       9:  * and argc.
      10:  *
      11:  * Usage:
      12:  *
      13:  * char line[132];
      14:  * char **argv;
      15:  * int argc;
      16:  *
      17:  *	argv = (char **) NULL;
      18:  *	argc = parsit(line, &argv);
      19:  *
      20:  * returns the number of words parsed in argc.  argv[argc] will
      21:  * be (char *) NULL to indicate end of list, if you're not
      22:  * happy with just knowing how many words you have.
      23:  *
      24:  * Note that setting argv = (char **) NULL is only done the first
      25:  * time the routine is called with a new "argv" -- it tells
      26:  * parsit that "argv" is a new array, and parsit shouldn't free
      27:  * up the elements (as it would do if it were an old array).
      28:  *
      29:  *	Phil Lapsley
      30:  *	College of Engineering
      31:  *	University of California, Berkeley
      32:  *	(ARPA: phil@Berkeley.ARPA; UUCP: ...!ucbvax!phil)
      33:  */
      34:
      35: #include <stdio.h>
      36:
      37: extern  char    *malloc(), *strcpy();
      38:
      39: parsit(line, array)
      40: char *line;
      41: char ***array;
      42: {
      43:     char    **argv;
      44:     char    word[132];
      45:     char    *linecp;
      46:     int i, j, num_words;
      47:
      48:     argv = *array;
      49:     if (argv != (char **) NULL) {  /* Check to see if we should */
      50:         for (i = 0; argv[i] != (char *) NULL; i++)  /* free */
      51:             free(argv[i]);  /* the old array */
      52:         free((char *) argv);    /* and then free the ptr itself */
      53:     }
      54:
      55:     linecp = line;
      56:     num_words = 0;
      57:     while (1) { /* count words in input */
      58:         for (; *linecp == ' ' || *linecp == '\t'; ++linecp)
      59:             ;
      60:         if (*linecp == '\0')
      61:             break;
      62:
      63:         for (; *linecp != ' ' && *linecp != '\t' && *linecp != '\0'; ++linecp)
      64:             ;
      65:         ++num_words;
      66:         if (*linecp == '\0')
      67:             break;
      68:     }
      69:
      70:     /* Then malloc enough for that many words plus 1 (for null) */
      71:
      72:     if ((argv = (char **) malloc((num_words + 1) * sizeof(char *))) ==
      73:         (char **) NULL) {
      74:         fprintf(stderr, "parsit: malloc out of space!\n");
      75:         return(0);
      76:     }
      77:
      78:     j = i = 0;
      79:     while (1) { /* Now build the list of words */
      80:         for (; *line == ' ' || *line == '\t'; ++line)
      81:             ;
      82:         if (*line == '\0')
      83:             break;
      84:
      85:         i = 0;
      86:         for (; *line != ' ' && *line != '\t' && *line != '\0'; ++line)
      87:             word[i++] =  *line;
      88:         word[i] = '\0';
      89:         argv[j] = malloc(strlen(word) + 1);
      90:         if (argv[j] == (char *) NULL) {
      91:             fprintf(stderr, "parsit: malloc out of space!\n");
      92:             return(0);
      93:         }
      94:
      95:         (void) strcpy(argv[j], word);
      96:         ++j;
      97:         if (*line == '\0')
      98:             break;
      99:     }
     100:     argv[j] = (char *) NULL;  /* remember null at end of list */
     101:     *array = argv;
     102:     return(j);
     103: }

#### Defined functions

parsit defined in line 39; used 4 times

- in /usr/src/new/nntp/server/misc.c line 513
- in /usr/src/new/nntp/server/newnews.c line 486, 517
- in /usr/src/new/nntp/server/serve.c line 212

#### Defined variables

osccsid defined in line 2; never used
sccsid defined in line 3; never used

Last modified: 1988-01-05 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 982 |