1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 *
22 * Copyright 1992 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
27 /* All Rights Reserved */
28
29 /*
30 * Portions of this source code were derived from Berkeley
31 * under license from the Regents of the University of
32 * California.
33 */
34
35 #pragma ident "%Z%%M% %I% %E% SMI"
36
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include "ypsym.h"
40
41 extern void free();
42 extern char *strdup();
43
44 /*
45 * Add a name to the list
46 */
47 static listofnames *
newname(str)48 newname(str)
49 char *str;
50 {
51 listofnames *it;
52 char *copy;
53
54 if (str == NULL)
55 return (NULL);
56 copy = strdup(str);
57 if (copy == NULL)
58 return (NULL);
59 it = (listofnames *) malloc(sizeof (listofnames));
60 if (it == NULL) {
61 free(copy);
62 return (NULL);
63 }
64 it->name = copy;
65 it->nextname = NULL;
66 return (it);
67 }
68
69 /*
70 * Assemble the list of names
71 */
72 listofnames *
names(filename)73 names(filename)
74 char *filename;
75 {
76 listofnames *nameslist;
77 listofnames *end;
78 listofnames *nname;
79 FILE *fyle;
80 char line[256];
81 char name[256];
82
83 fyle = fopen(filename, "r");
84 if (fyle == NULL) {
85 return (NULL);
86 }
87 nameslist = NULL;
88 while (fgets(line, sizeof (line), fyle)) {
89 if (line[0] == '#') continue;
90 if (line[0] == '\0') continue;
91 if (line[0] == '\n') continue;
92 nname = newname(line);
93 if (nname) {
94 if (nameslist == NULL) {
95 nameslist = nname;
96 end = nname;
97 } else {
98 end->nextname = nname;
99 end = nname;
100 }
101 } else
102 fprintf(stderr,
103 "file %s bad malloc %s\n", filename, name);
104 }
105 fclose(fyle);
106 return (nameslist);
107 }
108
109 void
free_listofnames(locallist)110 free_listofnames(locallist)
111 listofnames *locallist;
112 {
113 listofnames *next = (listofnames *)NULL;
114
115 for (; locallist; locallist = next) {
116 next = locallist->nextname;
117 if (locallist->name)
118 free(locallist->name);
119 free((char *)locallist);
120 }
121 }
122
123
124 #ifdef MAIN
main(argc,argv)125 main(argc, argv)
126 char **argv;
127 {
128 listofnames *list;
129 list = names(argv[1]);
130 #ifdef DEBUG
131 print_listofnames(list);
132 #endif
133 free_listofnames(list);
134 #ifdef DEBUG
135 printf("Done\n");
136 #endif
137 }
138 #endif
139
140 #ifdef DEBUG
141 void
print_listofnames(list)142 print_listofnames(list)
143 listofnames *list;
144 {
145 if (list == NULL)
146 printf("NULL\n");
147 for (; list; list = list->nextname)
148 printf("%s\n", list->name);
149 }
150 #endif
151