FreeCalypso > hg > ueda-linux
comparison netdiff/renpart/rename.c @ 138:77acb816727b
netdiff: donl-rename-parts put together
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 07 Sep 2020 04:02:14 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
137:6f528e2a9e23 | 138:77acb816727b |
---|---|
1 #include <ctype.h> | |
2 #include <string.h> | |
3 #include <strings.h> | |
4 #include <stdio.h> | |
5 #include <stdlib.h> | |
6 #include "struct.h" | |
7 | |
8 extern struct part_rename *part_rename_list; | |
9 | |
10 static char *infname; | |
11 static FILE *inf; | |
12 static char linebuf[80]; | |
13 static int lineno; | |
14 | |
15 static void | |
16 rename_entry(old, new) | |
17 char *old, *new; | |
18 { | |
19 struct part_rename *rp, **rpp; | |
20 char *dp; | |
21 | |
22 for (rpp = &part_rename_list; rp = *rpp; rpp = &rp->next) { | |
23 if (!strcmp(rp->old, old)) { | |
24 fprintf(stderr, "%s line %d: old name %s given twice\n", | |
25 infname, lineno, old); | |
26 exit(1); | |
27 } | |
28 } | |
29 rp = malloc(sizeof(struct part_rename) + strlen(old) + strlen(new) + 2); | |
30 dp = (char *)(rp + 1); | |
31 rp->old = dp; | |
32 strcpy(dp, old); | |
33 dp += strlen(old) + 1; | |
34 rp->new = dp; | |
35 strcpy(dp, new); | |
36 rp->next = 0; | |
37 *rpp = rp; | |
38 } | |
39 | |
40 static void | |
41 process_line() | |
42 { | |
43 char *cp, *old, *new; | |
44 | |
45 for (cp = linebuf; isspace(*cp); cp++) | |
46 ; | |
47 if (*cp == '\0' || *cp == '#') | |
48 return; | |
49 for (old = cp; *cp && !isspace(*cp); cp++) | |
50 ; | |
51 if (*cp) | |
52 *cp++ = '\0'; | |
53 while (isspace(*cp)) | |
54 cp++; | |
55 if (*cp == '\0' || *cp == '#') { | |
56 fprintf(stderr, "%s line %d: too few fields\n", | |
57 infname, lineno); | |
58 exit(1); | |
59 } | |
60 for (new = cp; *cp && !isspace(*cp); cp++) | |
61 ; | |
62 if (*cp) | |
63 *cp++ = '\0'; | |
64 while (isspace(*cp)) | |
65 cp++; | |
66 if (*cp != '\0' && *cp != '#') { | |
67 fprintf(stderr, "%s line %d: too many fields\n", | |
68 infname, lineno); | |
69 exit(1); | |
70 } | |
71 rename_entry(old, new); | |
72 } | |
73 | |
74 process_rename_file(input_filename) | |
75 char *input_filename; | |
76 { | |
77 infname = input_filename; | |
78 inf = fopen(infname, "r"); | |
79 if (!inf) { | |
80 perror(infname); | |
81 exit(1); | |
82 } | |
83 while (fgets(linebuf, sizeof linebuf, inf)) { | |
84 lineno++; | |
85 process_line(); | |
86 } | |
87 fclose(inf); | |
88 return(0); | |
89 } |