]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/sbr/brkstring.c
Always check that mktemp()/mktemp2() succeeds before trying to
[nmh] / docs / historical / mh-6.8.5 / sbr / brkstring.c
1 /* brkstring.c - break string into an array of strings */
2
3 #include "../h/mh.h"
4
5
6 static char *broken[MAXARGS+1]; /* array of substring start addresses */
7 static brkany();
8
9 char **brkstring (strg, brksep, brkterm)
10 register char *strg;
11 register char *brksep,
12 *brkterm;
13 {
14 register int bi;
15 register char c,
16 *sp;
17
18 sp = strg; /* scan string, replacing separators with
19 zeroes */
20
21 for (bi = 0; bi < MAXARGS; bi++) {
22 /* and entering start addrs in "broken" */
23 while (brkany (c = *sp, brksep))
24 *sp++ = 0;
25 if (!c || brkany (c, brkterm)) {
26 *sp = 0;
27 broken[bi] = 0;
28 return broken; /* terminator found, finish up */
29 }
30
31 broken[bi] = sp; /* set next start addr */
32 while ((c = *++sp) && !brkany (c, brksep) && !brkany (c, brkterm))
33 continue;
34 }
35 broken[MAXARGS] = 0; /* reached limit of MAXARGS substrings */
36
37 return broken;
38 }
39
40
41 static brkany (chr, strg) /* returns 1 if chr in strg, 0 otherwise */
42 register char chr,
43 *strg;
44 {
45 register char *sp;
46
47 if (strg)
48 for (sp = strg; *sp; sp++)
49 if (chr == *sp)
50 return 1;
51 return 0;
52 }