Annotation of embedaddon/coova-chilli/src/util.c, revision 1.1.1.1
1.1 misho 1: /* This file is free software; you can redistribute it and/or modify */
2: /* it under the terms of the GNU General Public License as published by */
3: /* the Free Software Foundation; either version 2, or (at your option) */
4: /* any later version. */
5:
6: /* This file is distributed in the hope that it will be useful, */
7: /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
8: /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
9: /* GNU General Public License for more details. */
10:
11: /* You should have received a copy of the GNU General Public License */
12: /* along with GNU Emacs; see the file COPYING. If not, write to */
13: /* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, */
14: /* Boston, MA 02111-1307, USA. */
15:
16: /* Copyright (C) 2004 Ian Zimmerman */
17:
18: /* $Id: getline.c,v 1.3 2004/05/18 22:45:18 summerisle Exp $ */
19:
20: #include "../config.h"
21: #ifndef HAVE_GETLINE
22: #include <stdio.h>
23: #include <sys/types.h>
24: #include <stdlib.h>
25:
26:
27: #define GETLINE_BUFSIZE 4096
28:
29: ssize_t
30: getline (char** lineptr, size_t* n, FILE* stream)
31: {
32: char* lptr1;
33: size_t nn;
34: int c;
35:
36: if (*lineptr == NULL && n == NULL)
37: {
38: lptr1 = malloc (GETLINE_BUFSIZE);
39: if (lptr1 == NULL) return EOF;
40: nn = GETLINE_BUFSIZE;
41: }
42: else
43: {
44: lptr1 = *lineptr;
45: nn = *n;
46: }
47: c = fgetc (stream);
48: if (c == EOF) return EOF;
49: {
50: size_t offset;
51:
52: offset = 0;
53: while (c != EOF)
54: {
55: if (offset >= nn - 1)
56: {
57: char* lptr2;
58: lptr2 = realloc (lptr1, 2 * nn);
59: if (lptr2 == NULL) return EOF;
60: lptr1 = lptr2;
61: nn *= 2;
62: }
63: lptr1[offset++] = (char)c;
64: if (c == '\n') break;
65: c = fgetc (stream);
66: }
67: lptr1[offset] = '\0';
68: *lineptr = lptr1;
69: *n = nn;
70: return offset;
71: }
72: }
73: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>