FreeCalypso > hg > freecalypso-reveng
comparison pirollback/checknames.c @ 44:074237879eca
pirollback: name check implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sat, 06 Jul 2013 21:31:55 +0000 |
parents | |
children | 78ac405716db |
comparison
equal
deleted
inserted
replaced
43:9f4469766c74 | 44:074237879eca |
---|---|
1 #include <sys/types.h> | |
2 #include <stdio.h> | |
3 #include <stdlib.h> | |
4 #include "types.h" | |
5 #include "struct.h" | |
6 #include "pathname.h" | |
7 | |
8 extern struct inode_info inode[]; | |
9 extern int last_inode; | |
10 | |
11 static void | |
12 check_inode(ino) | |
13 { | |
14 struct inode_info *in; | |
15 u8 *cp; | |
16 int cnt; | |
17 | |
18 in = inode + ino; | |
19 switch (in->type) { | |
20 case 0xE1: | |
21 case 0xF1: | |
22 case 0xF2: | |
23 break; | |
24 default: | |
25 return; | |
26 } | |
27 for (cp = in->dataptr, cnt = 0; ; cp++, cnt++) { | |
28 if (cnt >= in->len) { | |
29 fprintf(stderr, | |
30 "inode #%x: name expected at %x: length overrun\n", | |
31 ino, in->offset); | |
32 exit(1); | |
33 } | |
34 if (!*cp) | |
35 break; | |
36 if (cnt >= MAX_FN_COMPONENT) { | |
37 fprintf(stderr, | |
38 "inode #%x: name exceeds program limit of %d chars\n", | |
39 ino, MAX_FN_COMPONENT); | |
40 exit(1); | |
41 } | |
42 if (*cp < '!' || *cp > '~') { | |
43 fprintf(stderr, | |
44 "inode #%x: name expected at %x: bad character\n", | |
45 ino, in->offset); | |
46 exit(1); | |
47 } | |
48 } | |
49 if (!cnt) { | |
50 fprintf(stderr, "inode #%x: name expected at %x: null string\n", | |
51 ino, in->offset); | |
52 exit(1); | |
53 } | |
54 in->byte_after_name = cp + 1; | |
55 } | |
56 | |
57 check_object_names() | |
58 { | |
59 int ino; | |
60 | |
61 for (ino = 1; ino <= last_inode; ino++) | |
62 check_inode(ino); | |
63 } |