getconf: add a fallback for plain values

This commit is contained in:
Pierre Pronchery 2020-12-21 04:01:22 +01:00
parent 3e61d29673
commit 69eb32a7ba

View File

@ -33,7 +33,7 @@
/* types */
typedef struct _getconf_catalog
{
int name;
long name;
char const * string;
} getconf_catalog;
@ -177,6 +177,61 @@ static const getconf_catalog _getconf_catalog_pathconf[] =
#endif
};
static const getconf_catalog _getconf_catalog_values[] =
{
#ifdef _POSIX2_BC_BASE_MAX
{ _POSIX2_BC_BASE_MAX, "POSIX2_BC_BASE_MAX" },
#endif
#ifdef _POSIX2_BC_DIM_MAX
{ _POSIX2_BC_DIM_MAX, "POSIX2_BC_DIM_MAX" },
#endif
#ifdef _POSIX2_BC_SCALE_MAX
{ _POSIX2_BC_SCALE_MAX, "POSIX2_BC_SCALE_MAX" },
#endif
#ifdef _POSIX2_BC_STRING_MAX
{ _POSIX2_BC_STRING_MAX, "POSIX2_BC_STRING_MAX" },
#endif
#ifdef _POSIX2_COLL_WEIGHTS_MAX
{ _POSIX2_COLL_WEIGHTS_MAX, "POSIX2_COLL_WEIGHTS_MAX" },
#endif
#ifdef _POSIX2_EXPR_NEST_MAX
{ _POSIX2_EXPR_NEST_MAX, "POSIX2_EXPR_NEST_MAX" },
#endif
#ifdef _POSIX2_LINE_MAX
{ _POSIX2_LINE_MAX, "POSIX2_LINE_MAX" },
#endif
#ifdef _POSIX2_RE_DUP_MAX
{ _POSIX2_RE_DUP_MAX, "POSIX2_RE_DUP_MAX" },
#endif
#ifdef _POSIX2_C_BIND
{ _POSIX2_C_BIND, "POSIX2_C_BIND" },
#endif
#ifdef _POSIX2_C_DEV
{ _POSIX2_C_DEV, "POSIX2_C_DEV" },
#endif
#ifdef _POSIX2_CHAR_TERM
{ _POSIX2_CHAR_TERM, "POSIX2_CHAR_TERM" },
#endif
#ifdef _POSIX2_FORT_DEV
{ _POSIX2_FORT_DEV, "POSIX2_FORT_DEV" },
#endif
#ifdef _POSIX2_FORT_RUN
{ _POSIX2_FORT_RUN, "POSIX2_FORT_RUN" },
#endif
#ifdef _POSIX2_LOCALEDEF
{ _POSIX2_LOCALEDEF, "POSIX2_LOCALEDEF" },
#endif
#ifdef _POSIX2_SW_DEV
{ _POSIX2_SW_DEV, "POSIX2_SW_DEV" },
#endif
#ifdef _POSIX2_UPE
{ _POSIX2_UPE, "POSIX2_UPE" },
#endif
#ifdef _POSIX2_VERSION
{ _POSIX2_VERSION, "POSIX2_VERSION" },
#endif
};
/* prototypes */
static int _getconf(char const * specification, char const * var,
@ -190,6 +245,7 @@ static int _usage(void);
static int _getconf_confstr(char const * var);
static int _getconf_limits(char const * var);
static int _getconf_pathconf(char const * var, char const * path);
static int _getconf_values(char const * var);
static int _getconf(char const * specification, char const * var,
char const * path)
@ -239,7 +295,7 @@ static int _getconf_limits(char const * var)
if(strcmp(_getconf_catalog_limits[i].string, var) == 0)
break;
if(i == cnt)
return _getconf_error(var, -ENOENT);
return _getconf_values(var);
if((value = sysconf(_getconf_catalog_limits[i].name)) < 0)
return _getconf_error(var, 2);
printf("%ld\n", value);
@ -264,6 +320,21 @@ static int _getconf_pathconf(char const * var, char const * path)
return 0;
}
static int _getconf_values(char const * var)
{
size_t i;
size_t cnt = sizeof(_getconf_catalog_values)
/ sizeof(*_getconf_catalog_values);
for(i = 0; i < cnt; i++)
if(strcmp(_getconf_catalog_values[i].string, var) == 0)
break;
if(i == cnt)
return _getconf_error(var, -ENOENT);
printf("%ld\n", _getconf_catalog_values[i].name);
return 0;
}
/* error */
static int _getconf_error(char const * message, int ret)