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 #include <stdio.h>
36 #include <stdlib.h>
37 #include "ypsym.h"
38
39 extern void free();
40 extern char *strdup();
41
42 /*
43 * Add a name to the list
44 */
45 static listofnames *
newname(str)46 newname(str)
47 char *str;
48 {
49 listofnames *it;
50 char *copy;
51
52 if (str == NULL)
53 return (NULL);
54 copy = strdup(str);
55 if (copy == NULL)
56 return (NULL);
57 it = (listofnames *) malloc(sizeof (listofnames));
58 if (it == NULL) {
59 free(copy);
60 return (NULL);
61 }
62 it->name = copy;
63 it->nextname = NULL;
64 return (it);
65 }
66
67 /*
68 * Assemble the list of names
69 */
70 listofnames *
names(filename)71 names(filename)
72 char *filename;
73 {
74 listofnames *nameslist;
75 listofnames *end;
76 listofnames *nname;
77 FILE *fyle;
78 char line[256];
79 char name[256];
80
81 fyle = fopen(filename, "r");
82 if (fyle == NULL) {
83 return (NULL);
84 }
85 nameslist = NULL;
86 while (fgets(line, sizeof (line), fyle)) {
87 if (line[0] == '#') continue;
88 if (line[0] == '\0') continue;
89 if (line[0] == '\n') continue;
90 nname = newname(line);
91 if (nname) {
92 if (nameslist == NULL) {
93 nameslist = nname;
94 end = nname;
95 } else {
96 end->nextname = nname;
97 end = nname;
98 }
99 } else
100 fprintf(stderr,
101 "file %s bad malloc %s\n", filename, name);
102 }
103 fclose(fyle);
104 return (nameslist);
105 }
106
107 void
free_listofnames(locallist)108 free_listofnames(locallist)
109 listofnames *locallist;
110 {
111 listofnames *next = (listofnames *)NULL;
112
113 for (; locallist; locallist = next) {
114 next = locallist->nextname;
115 if (locallist->name)
116 free(locallist->name);
117 free((char *)locallist);
118 }
119 }
120
121
122 #ifdef MAIN
main(argc,argv)123 main(argc, argv)
124 char **argv;
125 {
126 listofnames *list;
127 list = names(argv[1]);
128 #ifdef DEBUG
129 print_listofnames(list);
130 #endif
131 free_listofnames(list);
132 #ifdef DEBUG
133 printf("Done\n");
134 #endif
135 }
136 #endif
137
138 #ifdef DEBUG
139 void
print_listofnames(list)140 print_listofnames(list)
141 listofnames *list;
142 {
143 if (list == NULL)
144 printf("NULL\n");
145 for (; list; list = list->nextname)
146 printf("%s\n", list->name);
147 }
148 #endif
149