Mercurial > cpython-lru_cache-weakref
annotate Mac/think/fopenRF.c @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | 0afd42960a1f |
| children |
| rev | line source |
|---|---|
|
2905
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
1 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
2 /* |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
3 * fopen.c |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
4 * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
5 * Copyright (c) 1991 Symantec Corporation. All rights reserved. |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
6 * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
7 */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
8 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
9 #include <MacHeaders> |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
10 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
11 #include "stdio.h" |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
12 #include "errno.h" |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
13 #include "string.h" |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
14 #include "ansi_private.h" |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
15 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
16 extern long _ftype, _fcreator; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
17 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
18 #define fcbVPtr(fcb) (* (VCB **) (fcb + 20)) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
19 #define fcbDirID(fcb) (* (long *) (fcb + 58)) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
20 #define fcbCName(fcb) (fcb + 62) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
21 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
22 static void setfiletype(StringPtr, int); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
23 static void stdio_exit(void); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
24 static int fileio(FILE *, int); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
25 static int close(FILE *); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
26 static void replace(unsigned char *, size_t, int, int); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
27 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
28 FILE *freopenRF(); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
29 FILE *__openRF(); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
30 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
31 FILE * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
32 fopenRF(const char *filename, const char *mode) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
33 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
34 return(freopenRF(filename, mode, __getfile())); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
35 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
36 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
37 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
38 FILE * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
39 freopenRF(const char *filename, const char *mode, FILE *fp) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
40 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
41 int omode, oflag; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
42 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
43 /* interpret "rwa" */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
44 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
45 if (mode[0] == 'r') { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
46 omode = fsRdPerm; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
47 oflag = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
48 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
49 else if (mode[0] == 'w') { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
50 omode = fsWrPerm; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
51 oflag = F_CREAT+F_TRUNC; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
52 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
53 else if (mode[0] == 'a') { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
54 omode = fsWrPerm; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
55 oflag = F_CREAT+F_APPEND; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
56 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
57 else { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
58 errno = EINVAL; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
59 return(NULL); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
60 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
61 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
62 /* interpret "b+" */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
63 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
64 if (mode[1] == 'b') { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
65 oflag |= F_BINARY; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
66 if (mode[2] == '+') |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
67 omode = fsRdWrPerm; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
68 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
69 else if (mode[1] == '+') { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
70 omode = fsRdWrPerm; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
71 if (mode[2] == 'b') |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
72 oflag |= F_BINARY; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
73 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
74 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
75 /* open the file */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
76 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
77 return(__openRF(filename, omode, oflag, fp)); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
78 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
79 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
80 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
81 FILE * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
82 __openRF(const char *filename, int omode, int oflag, FILE *fp) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
83 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
84 IOParam pb; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
85 char pname[FILENAME_MAX]; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
86 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
87 if (fp == NULL) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
88 return(NULL); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
89 fclose(fp); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
90 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
91 /* set up pb */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
92 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
93 pb.ioNamePtr = __c2p(filename, pname); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
94 pb.ioVRefNum = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
95 pb.ioVersNum = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
96 pb.ioPermssn = omode; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
97 pb.ioMisc = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
98 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
99 /* create file */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
100 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
101 if (oflag & F_CREAT) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
102 PBCreateSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
103 if (pb.ioResult == noErr) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
104 oflag &= ~F_TRUNC; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
105 else if (pb.ioResult == dupFNErr && !(oflag & F_EXCL)) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
106 oflag &= ~F_CREAT; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
107 else { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
108 errno = pb.ioResult; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
109 return(NULL); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
110 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
111 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
112 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
113 /* open file */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
114 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
115 PBOpenRFSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
116 if (pb.ioResult) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
117 errno = pb.ioResult; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
118 if (oflag & F_CREAT) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
119 PBDeleteSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
120 return(NULL); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
121 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
122 fp->refnum = pb.ioRefNum; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
123 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
124 /* get/set file length */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
125 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
126 if (oflag & F_TRUNC) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
127 PBSetEOFSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
128 else if (!(oflag & F_CREAT)) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
129 PBGetEOFSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
130 fp->len = (fpos_t) pb.ioMisc; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
131 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
132 /* initialize rest of FILE structure */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
133 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
134 if (oflag & F_APPEND) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
135 fp->append = 1; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
136 fp->pos = fp->len; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
137 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
138 if (oflag & F_BINARY) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
139 fp->binary = 1; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
140 setvbuf(fp, NULL, _IOFBF, BUFSIZ); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
141 fp->proc = fileio; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
142 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
143 /* set file type */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
144 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
145 if (oflag & (F_CREAT|F_TRUNC)) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
146 setfiletype(pb.ioNamePtr, oflag); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
147 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
148 /* done */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
149 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
150 __atexit_stdio(stdio_exit); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
151 return(fp); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
152 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
153 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
154 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
155 /* |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
156 * setfiletype - set type/creator of new file |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
157 * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
158 */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
159 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
160 static void |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
161 setfiletype(StringPtr name, int oflag) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
162 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
163 FileParam pb; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
164 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
165 pb.ioNamePtr = name; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
166 pb.ioVRefNum = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
167 pb.ioFVersNum = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
168 pb.ioFDirIndex = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
169 if (PBGetFInfoSync((ParmBlkPtr)&pb) == noErr) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
170 if (oflag & F_BINARY) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
171 pb.ioFlFndrInfo.fdType = _ftype; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
172 else |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
173 pb.ioFlFndrInfo.fdType = 'TEXT'; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
174 pb.ioFlFndrInfo.fdCreator = _fcreator; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
175 PBSetFInfoSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
176 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
177 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
178 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
179 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
180 /* |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
181 * stdio_exit - stdio shutdown routine |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
182 * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
183 */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
184 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
185 static void |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
186 stdio_exit(void) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
187 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
188 register FILE *fp; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
189 int n; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
190 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
191 for (fp = &__file[0], n = FOPEN_MAX; n--; fp++) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
192 fclose(fp); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
193 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
194 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
195 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
196 /* |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
197 * fileio - I/O handler proc for files and devices |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
198 * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
199 */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
200 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
201 static int |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
202 fileio(FILE *fp, int i) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
203 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
204 IOParam pb; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
205 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
206 pb.ioRefNum = fp->refnum; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
207 switch (i) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
208 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
209 /* read */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
210 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
211 case 0: |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
212 pb.ioBuffer = (Ptr) fp->ptr; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
213 pb.ioReqCount = fp->cnt; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
214 pb.ioPosMode = fp->refnum > 0 ? fsFromStart : fsAtMark; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
215 pb.ioPosOffset = fp->pos - fp->cnt; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
216 PBReadSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
217 if (pb.ioResult == eofErr) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
218 fp->pos = pb.ioPosOffset; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
219 if (fp->cnt = pb.ioActCount) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
220 pb.ioResult = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
221 else { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
222 fp->eof = 1; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
223 return(EOF); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
224 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
225 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
226 if (!pb.ioResult && !fp->binary) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
227 replace(fp->ptr, fp->cnt, '\r', '\n'); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
228 break; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
229 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
230 /* write */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
231 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
232 case 1: |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
233 pb.ioBuffer = (Ptr) fp->ptr; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
234 pb.ioReqCount = fp->cnt; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
235 pb.ioPosMode = fp->refnum > 0 ? fsFromStart : fsAtMark; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
236 if ((pb.ioPosOffset = fp->pos - fp->cnt) > fp->len) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
237 pb.ioMisc = (Ptr) pb.ioPosOffset; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
238 if (PBSetEOFSync((ParmBlkPtr)&pb) != noErr) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
239 break; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
240 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
241 if (!fp->binary) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
242 replace(fp->ptr, fp->cnt, '\n', '\r'); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
243 PBWriteSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
244 if (!pb.ioResult && pb.ioPosOffset > fp->len) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
245 fp->len = pb.ioPosOffset; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
246 break; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
247 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
248 /* close */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
249 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
250 case 2: |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
251 pb.ioResult = close(fp); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
252 break; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
253 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
254 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
255 /* done */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
256 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
257 if (pb.ioResult) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
258 if (i < 2) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
259 fp->pos -= fp->cnt; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
260 fp->cnt = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
261 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
262 fp->err = 1; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
263 errno = pb.ioResult; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
264 return(EOF); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
265 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
266 return(0); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
267 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
268 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
269 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
270 static int |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
271 close(FILE *fp) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
272 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
273 HFileParam pb; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
274 Str255 buf; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
275 register char *fcb = FCBSPtr + fp->refnum; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
276 VCB *vcb = fcbVPtr(fcb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
277 register char *s; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
278 enum { none, MFS, HFS } del = none; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
279 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
280 pb.ioVRefNum = vcb->vcbVRefNum; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
281 if (fp->remove) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
282 pb.ioNamePtr = buf; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
283 pb.ioFVersNum = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
284 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
285 /* close temporary file - HFS */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
286 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
287 if (vcb->vcbSigWord == 0x4244) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
288 pb.ioDirID = fcbDirID(fcb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
289 s = fcbCName(fcb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
290 memcpy(buf, s, Length(s) + 1); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
291 del = HFS; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
292 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
293 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
294 /* close temporary file - MFS */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
295 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
296 else if (vcb->vcbSigWord == 0xD2D7) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
297 for (pb.ioFDirIndex = 1; PBGetFInfoSync((ParmBlkPtr)&pb) == noErr; pb.ioFDirIndex++) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
298 if (pb.ioFRefNum == fp->refnum) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
299 del = MFS; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
300 break; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
301 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
302 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
303 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
304 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
305 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
306 /* close file and flush volume buffer */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
307 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
308 pb.ioFRefNum = fp->refnum; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
309 if (PBCloseSync((ParmBlkPtr)&pb) == noErr) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
310 if (del == MFS) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
311 PBDeleteSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
312 else if (del == HFS) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
313 PBHDeleteSync((HParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
314 pb.ioNamePtr = 0; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
315 PBFlushVolSync((ParmBlkPtr)&pb); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
316 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
317 return(pb.ioResult); |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
318 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
319 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
320 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
321 /* |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
322 * replace - routine for doing CR/LF conversion |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
323 * |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
324 */ |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
325 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
326 static void |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
327 replace(register unsigned char *s, register size_t n, register int c1, register int c2) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
328 { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
329 #pragma options(honor_register) |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
330 register unsigned char *t; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
331 |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
332 for (; n && (t = memchr(s, c1, n)); s = t) { |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
333 *t++ = c2; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
334 n -= t - s; |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
335 } |
|
0afd42960a1f
Moved here because it is think-specific
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
336 } |
