• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/gettext-0.17/gettext-tools/src/
1/* Reading file lists.
2   Copyright (C) 1995-1998, 2000-2002, 2007 Free Software Foundation, Inc.
3
4   This program is free software: you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 3 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17#ifdef HAVE_CONFIG_H
18# include "config.h"
19#endif
20
21/* Specification.  */
22#include "file-list.h"
23
24#include <errno.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include "str-list.h"
30#include "error.h"
31#include "gettext.h"
32
33/* A convenience macro.  I don't like writing gettext() every time.  */
34#define _(str) gettext (str)
35
36
37/* Read list of filenames from a file.  */
38string_list_ty *
39read_names_from_file (const char *file_name)
40{
41  size_t line_len = 0;
42  char *line_buf = NULL;
43  FILE *fp;
44  string_list_ty *result;
45
46  if (strcmp (file_name, "-") == 0)
47    fp = stdin;
48  else
49    {
50      fp = fopen (file_name, "r");
51      if (fp == NULL)
52	error (EXIT_FAILURE, errno,
53	       _("error while opening \"%s\" for reading"), file_name);
54    }
55
56  result = string_list_alloc ();
57
58  while (!feof (fp))
59    {
60      /* Read next line from file.  */
61      int len = getline (&line_buf, &line_len, fp);
62
63      /* In case of an error leave loop.  */
64      if (len < 0)
65	break;
66
67      /* Remove trailing '\n' and trailing whitespace.  */
68      if (len > 0 && line_buf[len - 1] == '\n')
69	line_buf[--len] = '\0';
70      while (len > 0
71	     && (line_buf[len - 1] == ' '
72		 || line_buf[len - 1] == '\t'
73		 || line_buf[len - 1] == '\r'))
74	line_buf[--len] = '\0';
75
76      /* Test if we have to ignore the line.  */
77      if (*line_buf == '\0' || *line_buf == '#')
78	continue;
79
80      string_list_append_unique (result, line_buf);
81    }
82
83  /* Free buffer allocated through getline.  */
84  if (line_buf != NULL)
85    free (line_buf);
86
87  /* Close input stream.  */
88  if (fp != stdin)
89    fclose (fp);
90
91  return result;
92}
93