/[cvs]/ccvs/lib/getdelim.c
ViewVC logotype

Diff of /ccvs/lib/getdelim.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by dprice, Tue Oct 4 02:34:54 2005 UTC revision 1.6 by dprice, Tue Oct 4 15:46:31 2005 UTC
# Line 23  Line 23 
23  # include <config.h>  # include <config.h>
24  #endif  #endif
25    
26    #include "getdelim.h"
27    
28    #include <limits.h>
29  #include <stdlib.h>  #include <stdlib.h>
30  #include <errno.h>  #include <errno.h>
31    
32  #include "getdelim.h"  #ifndef SSIZE_MAX
33    # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
34    #endif
35  #if !HAVE_FLOCKFILE  #if !HAVE_FLOCKFILE
36  # undef flockfile  # undef flockfile
37  # define flockfile(x) ((void) 0)  # define flockfile(x) ((void) 0)
# Line 46  Line 50 
50  ssize_t  ssize_t
51  getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)  getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
52  {  {
53    int result = 0;    ssize_t result;
54    ssize_t cur_len = 0;    size_t cur_len = 0;
55    
56    if (lineptr == NULL || n == NULL || fp == NULL)    if (lineptr == NULL || n == NULL || fp == NULL)
57      {      {
# Line 74  getdelim (char **lineptr, size_t *n, int Line 78  getdelim (char **lineptr, size_t *n, int
78    
79        i = getc (fp);        i = getc (fp);
80        if (i == EOF)        if (i == EOF)
81        {          {
82          result = -1;            result = -1;
83          break;            break;
84        }          }
85    
86        /* Make enough space for len+1 (for final NUL) bytes.  */        /* Make enough space for len+1 (for final NUL) bytes.  */
87        if (cur_len + 1 >= *n)        if (cur_len + 1 >= *n)
88          {          {
89            size_t needed = 2 * (cur_len + 1) + 1;   /* Be generous. */            size_t needed_max =
90                SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
91              size_t needed = 2 * *n + 1;   /* Be generous. */
92            char *new_lineptr;            char *new_lineptr;
93    
94            if (needed < cur_len)            if (needed_max < needed)
95                needed = needed_max;
96              if (cur_len + 1 >= needed)
97              {              {
98                result = -1;                result = -1;
99                goto unlock_return;                goto unlock_return;

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26