]>
Commit | Line | Data |
---|---|---|
83f6dbe8 A |
1 | %{ |
2 | /* | |
3 | * Copyright is disclaimed as to the contents of this file. | |
4 | * | |
5 | * $FreeBSD: src/usr.bin/getconf/pathconf.gperf,v 1.4 2003/08/22 17:32:07 markm Exp $ | |
6 | */ | |
7 | ||
8 | #include <sys/types.h> | |
9 | ||
10 | #include <string.h> | |
11 | #include <unistd.h> | |
12 | #ifdef APPLE_GETCONF_UNDERSCORE | |
13 | #include <alloca.h> | |
14 | #endif /* APPLE_GETCONF_UNDERSCORE */ | |
15 | ||
16 | #include "getconf.h" | |
17 | ||
18 | /* | |
19 | * Override gperf's built-in external scope. | |
20 | */ | |
21 | static const struct map *in_word_set(const char *str); | |
22 | ||
23 | %} | |
24 | struct map { const char *name; int key; int valid; }; | |
25 | %% | |
26 | FILESIZEBITS, _PC_FILESIZEBITS | |
27 | LINK_MAX, _PC_LINK_MAX | |
28 | MAX_CANON, _PC_MAX_CANON | |
29 | MAX_INPUT, _PC_MAX_INPUT | |
30 | NAME_MAX, _PC_NAME_MAX | |
31 | PATH_MAX, _PC_PATH_MAX | |
32 | PIPE_BUF, _PC_PIPE_BUF | |
33 | POSIX_ALLOC_SIZE_MIN, _PC_ALLOC_SIZE_MIN | |
34 | POSIX_REC_INCR_XFER_SIZE, _PC_REC_INCR_XFER_SIZE | |
35 | POSIX_REC_MAX_XFER_SIZE, _PC_REC_MAX_XFER_SIZE | |
36 | POSIX_REC_MIN_XFER_SIZE, _PC_REC_MIN_XFER_SIZE | |
37 | POSIX_REC_XFER_ALIGN, _PC_REC_XFER_ALIGN | |
34d340d7 | 38 | POSIX2_SYMLINKS, _PC_2_SYMLINKS |
83f6dbe8 A |
39 | SYMLINK_MAX, _PC_SYMLINK_MAX |
40 | TRUSTEDBSD_ACL_EXTENDED, _PC_ACL_EXTENDED | |
41 | TRUSTEDBSD_ACL_PATH_MAX, _PC_ACL_PATH_MAX | |
42 | TRUSTEDBSD_CAP_PRESENT, _PC_CAP_PRESENT | |
43 | TRUSTEDBSD_INF_PRESENT, _PC_INF_PRESENT | |
44 | TRUSTEDBSD_MAC_PRESENT, _PC_MAC_PRESENT | |
2fc1e207 | 45 | _POSIX_ASYNC_IO, _PC_ASYNC_IO |
83f6dbe8 A |
46 | _POSIX_CHOWN_RESTRICTED, _PC_CHOWN_RESTRICTED |
47 | _POSIX_NO_TRUNC, _PC_NO_TRUNC | |
2fc1e207 | 48 | _POSIX_PATH_MAX, _PC_PATH_MAX |
83f6dbe8 A |
49 | _POSIX_PRIO_IO, _PC_PRIO_IO |
50 | _POSIX_SYNC_IO, _PC_SYNC_IO | |
2fc1e207 | 51 | _POSIX_VDISABLE, _PC_VDISABLE |
83f6dbe8 A |
52 | %% |
53 | int | |
54 | find_pathconf(const char *name, int *key) | |
55 | { | |
56 | const struct map *rv; | |
57 | #ifdef APPLE_GETCONF_UNDERSCORE | |
58 | char *alt; | |
59 | #endif /* APPLE_GETCONF_UNDERSCORE */ | |
60 | ||
61 | rv = in_word_set(name); | |
62 | if (rv != NULL) { | |
63 | if (rv->valid) { | |
64 | *key = rv->key; | |
65 | return 1; | |
66 | } | |
67 | return -1; | |
68 | } | |
69 | #ifdef APPLE_GETCONF_UNDERSCORE | |
70 | if(*name == '_') | |
34d340d7 | 71 | alt = (char *)name + 1; |
83f6dbe8 A |
72 | else { |
73 | if((alt = (char *)alloca(strlen(name) + 2)) == NULL) | |
74 | return 0; | |
75 | *alt = '_'; | |
76 | strcpy(alt + 1, name); | |
77 | } | |
78 | rv = in_word_set(alt); | |
79 | if (rv != NULL) { | |
80 | if (rv->valid) { | |
81 | *key = rv->key; | |
82 | return 1; | |
83 | } | |
84 | return -1; | |
85 | } | |
86 | #endif /* APPLE_GETCONF_UNDERSCORE */ | |
87 | return 0; | |
88 | } |