mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
New login_getcapenum(): Allows to read named enum values
Reviewed by: emaste Approved by: emaste (mentor) MFC after: 3 days Sponsored by: Kumacom SAS Differential Revision: https://reviews.freebsd.org/D40684
This commit is contained in:
parent
0d1fe948d9
commit
90e914cd5a
2 changed files with 48 additions and 0 deletions
|
|
@ -760,6 +760,52 @@ login_getcapnum(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error)
|
|||
return val;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract a string capability expected to hold a specific value from a list.
|
||||
*
|
||||
* 'values' must be a NULL-terminated array of strings listing the possible
|
||||
* values.
|
||||
*
|
||||
* A non-negative return code indicates success, and is the index of the value
|
||||
* in 'values' the capability is set to.
|
||||
*
|
||||
* Negative return codes indicate an error:
|
||||
* -4: 'lc' or 'cap' insufficiently initialized or not valid.
|
||||
* -3: System error (allocation failure).
|
||||
* -2: Capability not found or not a string.
|
||||
* -1: Capability has a string value, but not one listed in 'values'.
|
||||
*/
|
||||
int
|
||||
login_getcapenum(login_cap_t *lc, const char *cap, const char * const *values)
|
||||
{
|
||||
int ret, i;
|
||||
char *cand;
|
||||
const char * const *val;
|
||||
|
||||
if (lc == NULL || lc->lc_cap == NULL || cap == NULL || *cap == '\0')
|
||||
return (-4);
|
||||
|
||||
ret = cgetstr(lc->lc_cap, cap, &cand);
|
||||
|
||||
if (ret == -1)
|
||||
/* Cap not found. */
|
||||
return (-2);
|
||||
else if (ret < 0)
|
||||
/* System error (normally, allocation failure). */
|
||||
return (-3);
|
||||
|
||||
ret = -1;
|
||||
|
||||
for (i = 0, val = values; *val != NULL; val++)
|
||||
if (strcmp(cand, *val) == 0) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
|
||||
free(cand);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -110,6 +110,8 @@ const char **login_getcaplist(login_cap_t *, const char *, const char *);
|
|||
const char *login_getstyle(login_cap_t *, const char *, const char *);
|
||||
rlim_t login_getcaptime(login_cap_t *, const char *, rlim_t, rlim_t);
|
||||
rlim_t login_getcapnum(login_cap_t *, const char *, rlim_t, rlim_t);
|
||||
int login_getcapenum(login_cap_t *lc, const char *cap,
|
||||
const char * const *values);
|
||||
rlim_t login_getcapsize(login_cap_t *, const char *, rlim_t, rlim_t);
|
||||
const char *login_getpath(login_cap_t *, const char *, const char *);
|
||||
int login_getcapbool(login_cap_t *, const char *, int);
|
||||
|
|
|
|||
Loading…
Reference in a new issue