File: awksplit.c

package info (click to toggle)
nn 6.7.3-2.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 2,488 kB
  • ctags: 3,198
  • sloc: ansic: 32,032; sh: 1,491; awk: 138; makefile: 96
file content (83 lines) | stat: -rw-r--r-- 2,657 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*******************WARNING*********************

This is a *MODIFIED* version of Geoff Coller's proof-of-concept NOV
implementation.

It has been modified to support threading directly from a file handle
to a NNTP server without a temporary file.

This is not a complete distribution.  We have only distributed enough
to support NN's needs.

The original version came from world.std.com:/src/news/nov.dist.tar.Z
and was dated 11 Aug 1993.

In any case, bugs you find here are probably my fault, as I've trimmed
a fair bit of unused code.

-Peter Wemm  <peter@DIALix.oz.au>
*/

/*
 * Copyright (c) Geoffrey Collyer 1992, 1993.
 * All rights reserved.
 * Written by Geoffrey Collyer.
 * Thanks to UUNET Communications Services Inc for financial support.
 *
 * This software is not subject to any license of the American Telephone
 * and Telegraph Company, the Regents of the University of California, or
 * the Free Software Foundation.
 *
 * Permission is granted to anyone to use this software for any purpose on
 * any computer system, and to alter it and redistribute it freely, subject
 * to the following restrictions:
 *
 * 1. The authors are not responsible for the consequences of use of this
 *    software, no matter how awful, even if they arise from flaws in it.
 *
 * 2. The origin of this software must not be misrepresented, either by
 *    explicit claim or by omission.  Since few users ever read sources,
 *    credits must appear in the documentation.
 *
 * 3. Altered versions must be plainly marked as such, and must not be
 *    misrepresented as being the original software.  Since few users
 *    ever read sources, credits must appear in the documentation.
 *
 * 4. This notice may not be removed or altered.
 */


/*
 * awksplit - awk-like split(3) that handles memory allocation automatically
 */

#include <stdlib.h>
#include "config.h"
#include "split.h"

int				/* number of fields, including overflow */
awksplit(char *string, register char ***fieldsp, register int nfields, char *sep)
 /* fieldsp;	list is not NULL-terminated */
 /* nfields;	number of entries available in fields[] */
 /* sep;		"" white, "c" single char, "ab" [ab]+ */
{
    register int    nf;

    nf = split(string, *fieldsp, nfields, sep);
    if (nf > nfields) {		/* too many fields to fieldsp? */
	register char **array =
	(char **) malloc((unsigned) (nf * sizeof(char *)));
	register int    i;

	if (array == NULL)
	    *fieldsp = NULL;	/* you lose */
	else {
	    for (i = 0; i < nfields; i++)
		array[i] = (*fieldsp)[i];
	    *fieldsp = array;
	    (void) split(array[nfields - 1], &array[nfields],
			 nf - nfields, sep);
	}
    }
    return nf;
}