/*
 * This file is part of the UCB release of Plan 9. It is subject to the license
 * terms in the LICENSE file found in the top-level directory of this
 * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
 * part of the UCB release of Plan 9, including this file, may be copied,
 * modified, propagated, or distributed except according to the terms contained
 * in the LICENSE file.
 */
#include <string.h>

/* currently only used in arp.c; so we don't do the full monty. */
int getfields(char *str, char **args, int max, int mflag, char *set)
{
	int nr, intok, narg;

	if (max <= 0)
		return 0;

	narg = 0;
	args[narg] = str;
	if (!mflag)
		narg++;
	intok = 0;
	for (;; str++) {
		nr = *str;
		if (nr == 0)
			break;
		if (index(set, nr)) {
			if (narg >= max)
				break;
			*str = 0;
			intok = 0;
			args[narg] = str + 1;
			if (!mflag)
				narg++;
		} else {
			if (!intok && mflag)
				narg++;
			intok = 1;
		}
	}
	return narg;
}
