busybox/libpwdgrp/pwd_grp_internal.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/* Copyright (C) 2003     Manuel Novoa III
   3 *
   4 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
   5 */
   6
   7/* Nov 6, 2003  Initial version.
   8 *
   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.
  13 *
  14 * TODO:
  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.
  18 */
  19
  20#ifndef GETXXKEY_R_FUNC
  21#error GETXXKEY_R_FUNC is not defined!
  22#endif
  23
  24int 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)
  28{
  29        FILE *stream;
  30        int rv;
  31
  32        *result = NULL;
  33
  34        stream = fopen_for_read(GETXXKEY_R_PATHNAME);
  35        if (!stream)
  36                return errno;
  37        while (1) {
  38                rv = bb__pgsreader(GETXXKEY_R_PARSER, resultbuf, buffer, buflen, stream);
  39                if (!rv) {
  40                        if (GETXXKEY_R_TEST(resultbuf)) { /* found key? */
  41                                *result = resultbuf;
  42                                break;
  43                        }
  44                } else {
  45                        if (rv == ENOENT) {  /* EOF encountered */
  46                                rv = 0;
  47                        }
  48                        break;
  49                }
  50        }
  51        fclose(stream);
  52
  53        return rv;
  54}
  55
  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
  62