Files
Arquivotheca.Solaris-2.5/cmd/osadmin/csub/bufsplit.c
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

61 lines
1.5 KiB
C
Executable File

/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#ident "@(#)bufsplit.c 1.3 92/07/14 SMI" /* SVr4.0 1.1 */
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
/*
split buffer into fields delimited by tabs and newlines.
Fill pointer array with pointers to fields.
Return the number of fields assigned to the array[].
The remainder of the array elements point to the end of the buffer.
Note:
The delimiters are changed to null-bytes in the buffer and array of
pointers is only valid while the buffer is intact.
*/
#include <stddef.h>
char *bsplitchar = "\t\n"; /* characters that separate fields */
unsigned
bufsplit( buf, dim, array )
register char *buf; /* input buffer */
unsigned dim; /* dimension of the array */
char *array[];
{
extern char *strrchr();
extern char *strpbrk();
register unsigned numsplit;
register int i;
if( !buf )
return 0;
numsplit = 0;
while ( numsplit < dim ) {
array[numsplit] = buf;
numsplit++;
buf = strpbrk(buf, bsplitchar);
if (buf)
*(buf++) = '\0';
else
break;
if (*buf == '\0') {
break;
}
}
buf = strrchr( array[numsplit-1], '\0' );
for (i=numsplit; i < dim; i++)
array[i] = buf;
return numsplit;
}