Branch data Line data Source code
1 : : /*
2 : : * libdpkg - Debian packaging suite library routines
3 : : * utils.c - helper functions for dpkg
4 : : *
5 : : * Copyright © 1995, 2008 Ian Jackson <ijackson@chiark.greenend.org.uk>
6 : : *
7 : : * This is free software; you can redistribute it and/or modify
8 : : * it under the terms of the GNU General Public License as published by
9 : : * the Free Software Foundation; either version 2 of the License, or
10 : : * (at your option) any later version.
11 : : *
12 : : * This is distributed in the hope that it will be useful,
13 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : : * GNU General Public License for more details.
16 : : *
17 : : * You should have received a copy of the GNU General Public License
18 : : * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 : : */
20 : :
21 : : #include <config.h>
22 : : #include <compat.h>
23 : :
24 : : #include <string.h>
25 : :
26 : : #include <dpkg/i18n.h>
27 : : #include <dpkg/dpkg.h>
28 : :
29 : : int
30 : 347 : fgets_checked(char *buf, size_t bufsz, FILE *f, const char *fn)
31 : : {
32 : : int l;
33 : :
34 [ + + ]: 347 : if (!fgets(buf, bufsz, f)) {
35 [ - + ]: 73 : if (ferror(f))
36 : 0 : ohshite(_("read error in '%.250s'"), fn);
37 : 73 : return -1;
38 : : }
39 : 274 : l = strlen(buf);
40 [ - + ]: 274 : if (l == 0)
41 : 0 : ohshit(_("fgets gave an empty string from '%.250s'"), fn);
42 [ + + ]: 274 : if (buf[--l] != '\n')
43 : 1 : ohshit(_("too-long line or missing newline in '%.250s'"), fn);
44 : 273 : buf[l] = '\0';
45 : :
46 : 273 : return l;
47 : : }
48 : :
49 : : int
50 : 175 : fgets_must(char *buf, size_t bufsz, FILE *f, const char *fn)
51 : : {
52 : 175 : int l = fgets_checked(buf, bufsz, f, fn);
53 : :
54 [ + + ]: 175 : if (l < 0)
55 : 2 : ohshit(_("unexpected end of file reading '%.250s'"), fn);
56 : :
57 : 173 : return l;
58 : : }
|