95 lines
2.0 KiB
C
95 lines
2.0 KiB
C
/*
|
|
* admin_param.c - package of functions for dealing with parameter manipulation
|
|
* with the administrative framework.
|
|
*
|
|
* Copyright (c) 1990 by Sun Microsystems, Inc.
|
|
*
|
|
*/
|
|
|
|
#ifndef lint
|
|
static char sccsid[] = "@(#)admin_param.c 1.1 94/10/31 SMI";
|
|
#endif
|
|
|
|
#include <string.h>
|
|
#include "admin_amcl.h"
|
|
|
|
/*
|
|
* admin_get_param(argc, argv, param_name, param_value)
|
|
*
|
|
* Locate the parameter named by param_name in the argv list and return its
|
|
* string value in param_value. Assumes parameters are name=value pairs.
|
|
*/
|
|
|
|
int
|
|
admin_get_param(argc, argv, param_name, param_value, param_size)
|
|
int argc;
|
|
char *argv[];
|
|
char *param_name;
|
|
char *param_value;
|
|
int param_size;
|
|
{
|
|
char *cp;
|
|
int i;
|
|
|
|
/* Sanity check all arguments */
|
|
if ((argc <= 0) || (argv == NULL) || (param_name == NULL) ||
|
|
(strlen(param_name) == 0) || (param_value == NULL) ||
|
|
(param_size <= 0))
|
|
return (-1);
|
|
|
|
/* Compare each keyword against the requested one, return value */
|
|
for (i = 0; i < argc; i++) {
|
|
if ((cp = strchr(argv[i], '=')) == NULL)
|
|
continue;
|
|
*cp = '\0';
|
|
if (strcmp(argv[i], param_name) == 0) {
|
|
*cp++ = '=';
|
|
if (strlen(cp) > param_size)
|
|
return (-1);
|
|
else {
|
|
strcpy(param_value, cp);
|
|
return (0);
|
|
}
|
|
}
|
|
*cp = '=';
|
|
}
|
|
|
|
/* No match */
|
|
return (-1);
|
|
}
|
|
|
|
|
|
/*
|
|
* admin_add_argp(argp, name, type, length, value)
|
|
*
|
|
* General purpose routine to append an argument to an Admin_arg list.
|
|
*/
|
|
int
|
|
admin_add_argp(argp, name, type, length, value)
|
|
Admin_arg **argp;
|
|
char *name;
|
|
u_int type;
|
|
u_int length;
|
|
caddr_t value;
|
|
{
|
|
extern char *malloc();
|
|
Admin_arg *ap, *aap;
|
|
|
|
/* allocate a structure and copy args into fields. */
|
|
aap = (Admin_arg *) malloc(sizeof (Admin_arg));
|
|
strcpy(aap->name, name);
|
|
aap->type = type;
|
|
aap->length = length;
|
|
aap->value = value;
|
|
aap->next = NULL;
|
|
|
|
/* If no list yet then start one, otherwise tack it on end */
|
|
if (*argp == NULL)
|
|
*argp = aap;
|
|
else {
|
|
for (ap = *argp; ap->next != NULL; ap = ap->next);
|
|
ap->next = aap;
|
|
}
|
|
return (0);
|
|
}
|