]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - gnu/libexec/uucp/libuuconf/cmdfil.c
This commit was generated by cvs2svn to compensate for changes in r53910,
[FreeBSD/FreeBSD.git] / gnu / libexec / uucp / libuuconf / cmdfil.c
1 /* cmdfil.c
2    Read and parse commands from a file.
3
4    Copyright (C) 1992, 1993 Ian Lance Taylor
5
6    This file is part of the Taylor UUCP uuconf library.
7
8    This library is free software; you can redistribute it and/or
9    modify it under the terms of the GNU Library General Public License
10    as published by the Free Software Foundation; either version 2 of
11    the License, or (at your option) any later version.
12
13    This library is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Library General Public License for more details.
17
18    You should have received a copy of the GNU Library General Public
19    License along with this library; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21
22    The author of the program may be contacted at ian@airs.com or
23    c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
24    */
25
26 #include "uucnfi.h"
27
28 #if USE_RCS_ID
29 const char _uuconf_cmdfil_rcsid[] = "$FreeBSD$";
30 #endif
31
32 #include <errno.h>
33 \f
34 /* Read and parse commands from a file, updating uuconf_lineno as
35    appropriate.  */
36
37 int
38 uuconf_cmd_file (pglobal, e, qtab, pinfo, pfiunknown, iflags, pblock)
39      pointer pglobal;
40      FILE *e;
41      const struct uuconf_cmdtab *qtab;
42      pointer pinfo;
43      int (*pfiunknown) P((pointer, int, char **, pointer, pointer));
44      int iflags;
45      pointer pblock;
46 {
47   struct sglobal *qglobal = (struct sglobal *) pglobal;
48   boolean fcont;
49   char *zline;
50   size_t cline;
51   int iret;
52
53   fcont = (iflags & UUCONF_CMDTABFLAG_BACKSLASH) != 0;
54
55   zline = NULL;
56   cline = 0;
57
58   iret = UUCONF_SUCCESS;
59
60   qglobal->ilineno = 0;
61
62   while ((fcont
63           ? _uuconf_getline (qglobal, &zline, &cline, e)
64           : getline (&zline, &cline, e)) > 0)
65     {
66       ++qglobal->ilineno;
67
68       iret = uuconf_cmd_line (pglobal, zline, qtab, pinfo, pfiunknown,
69                               iflags, pblock);
70
71       if ((iret & UUCONF_CMDTABRET_KEEP) != 0)
72         {
73           iret &=~ UUCONF_CMDTABRET_KEEP;
74
75           if (pblock != NULL)
76             {
77               if (uuconf_add_block (pblock, zline) != 0)
78                 {
79                   qglobal->ierrno = errno;
80                   iret = (UUCONF_MALLOC_FAILED
81                           | UUCONF_ERROR_ERRNO
82                           | UUCONF_ERROR_LINENO);
83                   break;
84                 }
85             }
86
87           zline = NULL;
88           cline = 0;
89         }
90
91       if ((iret & UUCONF_CMDTABRET_EXIT) != 0)
92         {
93           iret &=~ UUCONF_CMDTABRET_EXIT;
94           if (iret != UUCONF_SUCCESS)
95             iret |= UUCONF_ERROR_LINENO;
96           break;
97         }
98
99       iret = UUCONF_SUCCESS;
100     }
101
102   if (zline != NULL)
103     free ((pointer) zline);
104
105   return iret;
106 }