xref: /freebsd/usr.bin/getconf/unsigned_limits.gperf (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
1*6cf21d56SGarrett Wollman%{
2*6cf21d56SGarrett Wollman/*
3*6cf21d56SGarrett Wollman * Copyright is disclaimed as to the contents of this file.
4*6cf21d56SGarrett Wollman */
5*6cf21d56SGarrett Wollman
6*6cf21d56SGarrett Wollman#include <sys/types.h>
7*6cf21d56SGarrett Wollman
8*6cf21d56SGarrett Wollman#include <string.h>
9*6cf21d56SGarrett Wollman#include <limits.h>
10*6cf21d56SGarrett Wollman
11*6cf21d56SGarrett Wollman#include "getconf.h"
12*6cf21d56SGarrett Wollman
13*6cf21d56SGarrett Wollman/*
14*6cf21d56SGarrett Wollman * Override gperf's built-in external scope.
15*6cf21d56SGarrett Wollman */
16*6cf21d56SGarrett Wollmanstatic const struct map *in_word_set(const char *str);
17*6cf21d56SGarrett Wollman
18*6cf21d56SGarrett Wollman%}
19*6cf21d56SGarrett Wollmanstruct map { const char *name; uintmax_t value; int valid; };
20*6cf21d56SGarrett Wollman%%
21*6cf21d56SGarrett WollmanUCHAR_MAX, UCHAR_MAX
22*6cf21d56SGarrett WollmanUINT_MAX, UINT_MAX
23*6cf21d56SGarrett WollmanULLONG_MAX, ULLONG_MAX
24*6cf21d56SGarrett WollmanULONG_MAX, ULONG_MAX
25*6cf21d56SGarrett WollmanUSHRT_MAX, USHRT_MAX
26*6cf21d56SGarrett Wollman%%
27*6cf21d56SGarrett Wollmanint
28*6cf21d56SGarrett Wollmanfind_unsigned_limit(const char *name, uintmax_t *value)
29*6cf21d56SGarrett Wollman{
30*6cf21d56SGarrett Wollman	const struct map *rv;
31*6cf21d56SGarrett Wollman
32*6cf21d56SGarrett Wollman	rv = in_word_set(name);
33*6cf21d56SGarrett Wollman	if (rv != NULL) {
34*6cf21d56SGarrett Wollman		if (rv->valid) {
35*6cf21d56SGarrett Wollman			*value = rv->value;
36*6cf21d56SGarrett Wollman			return 1;
37*6cf21d56SGarrett Wollman		}
38*6cf21d56SGarrett Wollman		return -1;
39*6cf21d56SGarrett Wollman	}
40*6cf21d56SGarrett Wollman	return 0;
41*6cf21d56SGarrett Wollman}
42