1 /* vi: set sw=4 ts=4: */
2 /* Copyright (C) 2003 Manuel Novoa III
4 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
7 /* Nov 6, 2003 Initial version.
9 * NOTE: This implementation is quite strict about requiring all
10 * field seperators. It also does not allow leading whitespace
11 * except when processing the numeric fields. glibc is more
12 * lenient. See the various glibc difference comments below.
15 * Move to dynamic allocation of (currently statically allocated)
16 * buffers; especially for the group-related functions since
17 * large group member lists will cause error returns.
20 #ifndef GETXXKEY_R_FUNC
21 #error GETXXKEY_R_FUNC is not defined!
24 int GETXXKEY_R_FUNC(GETXXKEY_R_KEYTYPE key,
25 GETXXKEY_R_ENTTYPE *__restrict resultbuf,
26 char *__restrict buffer, size_t buflen,
27 GETXXKEY_R_ENTTYPE **__restrict result)
34 stream = fopen_for_read(GETXXKEY_R_PATHNAME);
38 rv = bb__pgsreader(GETXXKEY_R_PARSER, resultbuf, buffer, buflen, stream);
40 if (GETXXKEY_R_TEST(resultbuf)) { /* found key? */
45 if (rv == ENOENT) { /* EOF encountered */
56 #undef GETXXKEY_R_FUNC
57 #undef GETXXKEY_R_PARSER
58 #undef GETXXKEY_R_ENTTYPE
59 #undef GETXXKEY_R_TEST
60 #undef GETXXKEY_R_KEYTYPE
61 #undef GETXXKEY_R_PATHNAME