2021-10-11 18:37:13 -03:00

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);
}