Sun Jun 2 20:14:30 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
authorroland <roland>
Mon, 3 Jun 1996 21:00:49 +0000 (21:00 +0000)
committerroland <roland>
Mon, 3 Jun 1996 21:00:49 +0000 (21:00 +0000)
* locale/programs/linereader.c (lr_open): Don't pass NULL to
xstrdup; fix memory leak.
(lr_close): Fix memory leak.

locale/programs/linereader.c

index e4a1305..68508df 100644 (file)
@@ -66,7 +66,7 @@ lr_open (const char *fname, kw_hash_fct_t hf)
   result = (struct linereader *) xmalloc (sizeof (*result));
 
   result->fp = fp;
   result = (struct linereader *) xmalloc (sizeof (*result));
 
   result->fp = fp;
-  result->fname = xstrdup (fname);
+  result->fname = xstrdup (fname ? : "<stdin>");
   result->buf = NULL;
   result->bufsize = 0;
   result->lineno = 1;
   result->buf = NULL;
   result->bufsize = 0;
   result->lineno = 1;
@@ -80,6 +80,7 @@ lr_open (const char *fname, kw_hash_fct_t hf)
     {
       int save = errno;
       fclose (result->fp);
     {
       int save = errno;
       fclose (result->fp);
+      free (result->fname);
       free (result);
       errno = save;
       return NULL;
       free (result);
       errno = save;
       return NULL;
@@ -107,6 +108,7 @@ void
 lr_close (struct linereader *lr)
 {
   fclose (lr->fp);
 lr_close (struct linereader *lr)
 {
   fclose (lr->fp);
+  free (lr->fname);
   free (lr->buf);
   free (lr);
 }
   free (lr->buf);
   free (lr);
 }