xref: /386bsd/usr/src/kernel/isofs/isofs_util.c (revision a2142627)
1 /*
2  *	$Id: isofs_util.c,v 1.2 1993/07/20 03:27:33 jkh Exp $
3  */
4 
5 int
isonum_711(p)6 isonum_711 (p)
7 char *p;
8 {
9 	return (*p & 0xff);
10 }
11 
12 int
isonum_712(p)13 isonum_712 (p)
14 char *p;
15 {
16 	int val;
17 
18 	val = *p;
19 	if (val & 0x80)
20 		val |= 0xffffff00;
21 	return (val);
22 }
23 
24 int
isonum_721(p)25 isonum_721 (p)
26 char *p;
27 {
28 	return ((p[0] & 0xff) | ((p[1] & 0xff) << 8));
29 }
30 
31 int
isonum_722(p)32 isonum_722 (p)
33 char *p;
34 {
35 	return (((p[0] & 0xff) << 8) | (p[1] & 0xff));
36 }
37 
38 int
isonum_723(p)39 isonum_723 (p)
40 char *p;
41 {
42 #if 0
43 	if (p[0] != p[3] || p[1] != p[2]) {
44 		fprintf (stderr, "invalid format 7.2.3 number\n");
45 		exit (1);
46 	}
47 #endif
48 	return (isonum_721 (p));
49 }
50 
51 int
isonum_731(p)52 isonum_731 (p)
53 unsigned char *p;
54 {
55 	return ((p[0] & 0xff)
56 		| ((p[1] & 0xff) << 8)
57 		| ((p[2] & 0xff) << 16)
58 		| ((p[3] & 0xff) << 24));
59 }
60 
61 int
isonum_732(p)62 isonum_732 (p)
63 unsigned char *p;
64 {
65 	return (((p[0] & 0xff) << 24)
66 		| ((p[1] & 0xff) << 16)
67 		| ((p[2] & 0xff) << 8)
68 		| (p[3] & 0xff));
69 }
70 
71 int
isonum_733(p)72 isonum_733 (p)
73 unsigned char *p;
74 {
75 	int i;
76 
77 #if 0
78 	for (i = 0; i < 4; i++) {
79 		if (p[i] != p[7-i]) {
80 			fprintf (stderr, "bad format 7.3.3 number\n");
81 			exit (1);
82 		}
83 	}
84 #endif
85 	return (isonum_731 (p));
86 }
87 
88 /*
89  * translate and compare a filename
90  */
isofncmp(char * fn,int fnlen,char * isofn,int isolen)91 isofncmp(char *fn, int fnlen, char *isofn, int isolen) {
92 	int fnidx;
93 
94 	fnidx = 0;
95 	for (fnidx = 0; fnidx < isolen; fnidx++, fn++) {
96 		char c = *isofn++;
97 
98 		if (fnidx > fnlen)
99 			return (0);
100 
101 		if (c >= 'A' && c <= 'Z') {
102 			if (c + ('a' - 'A') !=  *fn)
103 				return(0);
104 			else
105 				continue;
106 		}
107 		if (c == ';')
108 			return ((fnidx == fnlen));
109 		if (c != *fn)
110 			return (0);
111 	}
112 	return (1);
113 }
114 
115 /*
116  * translate a filename
117  */
118 void
isofntrans(char * infn,int infnlen,char * outfn,short * outfnlen)119 isofntrans(char *infn, int infnlen, char *outfn, short *outfnlen) {
120 	int fnidx;
121 
122 	fnidx = 0;
123 	for (fnidx = 0; fnidx < infnlen; fnidx++) {
124 		char c = *infn++;
125 
126 		if (c >= 'A' && c <= 'Z')
127 			*outfn++ = c + ('a' - 'A');
128 		else if (c == ';') {
129 			*outfnlen = fnidx;
130 			return;
131 		} else
132 			*outfn++ = c;
133 	}
134 	*outfnlen = infnlen;
135 }
136