annotate Mac/think/fopenRF.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 0afd42960a1f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }