1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00

nss: Add __nss_fgetent_r

And helper functions __nss_readline, __nss_readline_seek,
 __nss_parse_line_result.

This consolidates common code for handling overlong lines and
parse files.  Use the new functionality in internal_getent
in nss/nss_files/files-XXX.c.

Tested-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Florian Weimer
2020-07-15 13:41:31 +02:00
parent d4b4586315
commit bdee910e88
7 changed files with 260 additions and 54 deletions

View File

@ -0,0 +1,46 @@
/* Implementation of __nss_parse_line_result.
Copyright (C) 2020 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <nss_files.h>
#include <assert.h>
#include <errno.h>
int
__nss_parse_line_result (FILE *fp, off64_t offset, int parse_line_result)
{
assert (parse_line_result >= -1 && parse_line_result <= 1);
switch (__builtin_expect (parse_line_result, 1))
{
case 1:
/* Sucess. */
return 0;
case 0:
/* Parse error. */
__set_errno (EINVAL);
return EINVAL;
case -1:
/* Out of buffer space. */
return __nss_readline_seek (fp, offset);
default:
__builtin_unreachable ();
}
}
libc_hidden_def (__nss_parse_line_result)