Deleted Added
full compact
1/*
2 * Copyright (c) 1983, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 19 unchanged lines hidden (view full) ---

28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#ifndef lint
35/*static char sccsid[] = "from: @(#)subr.c 8.1 (Berkeley) 6/4/93";*/
36static char rcsid[] = "$Id$";
36static char rcsid[] = "$Id: subr.c,v 1.9 1997/02/22 14:21:40 peter Exp $";
37#endif /* not lint */
38
39/*
40 * Melbourne getty.
41 */
42#define COMPAT_43
43#include <stdlib.h>
44#include <unistd.h>
45#include <string.h>
46#include <termios.h>
47#include <sys/ioctl.h>
48#include <sys/param.h>
49#include <syslog.h>
50#ifdef DEBUG
51#include <stdio.h>
52#endif
53
54#include "gettytab.h"
55#include "pathnames.h"
56#include "extern.h"
57

--- 9 unchanged lines hidden (view full) ---

67gettable(name, buf)
68 const char *name;
69 char *buf;
70{
71 register struct gettystrs *sp;
72 register struct gettynums *np;
73 register struct gettyflags *fp;
74 long n;
75 int l;
76 char *p;
77 char *msg = NULL;
78 const char *dba[2];
79
80 static int firsttime = 1;
81
82 dba[0] = _PATH_GETTYTAB;
83 dba[1] = 0;
84
78 if (cgetent(&buf, dba, name) != 0)
85 if (firsttime) {
86 /*
87 * we need to strdup() anything in the strings array
88 * initially in order to simplify things later
89 */
90 for (sp = gettystrs; sp->field; sp++)
91 if (sp->value != NULL) {
92 /* handle these ones more carefully */
93 if (sp >= &gettystrs[4] && sp <= &gettystrs[6])
94 l = 2;
95 else
96 l = strlen(sp->value) + 1;
97 if ((p = malloc(l)) != NULL) {
98 strncpy(p, sp->value, l);
99 p[l-1] = '\0';
100 }
101 /*
102 * replace, even if NULL, else we'll
103 * have problems with free()ing static mem
104 */
105 sp->value = p;
106 }
107 firsttime = 0;
108 }
109
110 switch (cgetent(&buf, (char **)dba, (char *)name)) {
111 case 1:
112 msg = "%s: couldn't resolve 'tc=' in gettytab '%s'";
113 case 0:
114 break;
115 case -1:
116 msg = "%s: unknown gettytab entry '%s'";
117 break;
118 case -2:
119 msg = "%s: retrieving gettytab entry '%s': %m";
120 break;
121 case -3:
122 msg = "%s: recursive 'tc=' reference gettytab entry '%s'";
123 break;
124 default:
125 msg = "%s: unexpected cgetent() error for entry '%s'";
126 break;
127 }
128
129 if (msg != NULL) {
130 syslog(LOG_ERR, msg, "getty", name);
131 return;
132 }
133
81 for (sp = gettystrs; sp->field; sp++)
82 cgetstr(buf, sp->field, &sp->value);
134 for (sp = gettystrs; sp->field; sp++) {
135 if ((l = cgetstr(buf, (char*)sp->field, &p)) >= 0) {
136 if (sp->value) {
137 /* prefer existing value */
138 if (strcmp(p, sp->value) != 0)
139 free(sp->value);
140 else {
141 free(p);
142 p = sp->value;
143 }
144 }
145 sp->value = p;
146 } else if (l == -1) {
147 free(sp->value);
148 sp->value = NULL;
149 }
150 }
151
152 for (np = gettynums; np->field; np++) {
84 if (cgetnum(buf, np->field, &n) == -1)
153 if (cgetnum(buf, (char*)np->field, &n) == -1)
154 np->set = 0;
155 else {
156 np->set = 1;
157 np->value = n;
158 }
159 }
160
161 for (fp = gettyflags; fp->field; fp++) {
92 if (cgetcap(buf, fp->field, ':') == NULL)
162 if (cgetcap(buf, (char *)fp->field, ':') == NULL)
163 fp->set = 0;
164 else {
165 fp->set = 1;
166 fp->value = 1 ^ fp->invrt;
167 }
168 }
169
170#ifdef DEBUG
171 printf("name=\"%s\", buf=\"%s\"\r\n", name, buf);
172 for (sp = gettystrs; sp->field; sp++)
173 printf("cgetstr: %s=%s\r\n", sp->field, sp->value);
174 for (np = gettynums; np->field; np++)
175 printf("cgetnum: %s=%d\r\n", np->field, np->value);
176 for (fp = gettyflags; fp->field; fp++)
177 printf("cgetflags: %s='%c' set='%c'\r\n", fp->field,

--- 5 unchanged lines hidden (view full) ---

183gendefaults()
184{
185 register struct gettystrs *sp;
186 register struct gettynums *np;
187 register struct gettyflags *fp;
188
189 for (sp = gettystrs; sp->field; sp++)
190 if (sp->value)
120 sp->defalt = sp->value;
191 sp->defalt = strdup(sp->value);
192 for (np = gettynums; np->field; np++)
193 if (np->set)
194 np->defalt = np->value;
195 for (fp = gettyflags; fp->field; fp++)
196 if (fp->set)
197 fp->defalt = fp->value;
198 else
199 fp->defalt = fp->invrt;
200}
201
202void
203setdefaults()
204{
205 register struct gettystrs *sp;
206 register struct gettynums *np;
207 register struct gettyflags *fp;
208
209 for (sp = gettystrs; sp->field; sp++)
210 if (!sp->value)
140 sp->value = sp->defalt;
211 sp->value = !sp->defalt ? sp->defalt
212 : strdup(sp->defalt);
213 for (np = gettynums; np->field; np++)
214 if (!np->set)
215 np->value = np->defalt;
216 for (fp = gettyflags; fp->field; fp++)
217 if (!fp->set)
218 fp->value = fp->defalt;
219}
220

--- 633 unchanged lines hidden ---