/* * 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 #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); }