64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
+
+
+
-
+
-
-
+
+
-
+
|
}
- initWithPath: (const char*)path
andMode: (const char*)mode
{
if ((self = [super init])) {
if ((fp = fopen(path, mode)) == NULL) {
[[OFOpenFileFailedException newWithObject: self
andPath: path
andMode: mode] raise];
[self free];
return nil;
}
}
return self;
}
- free
{
fclose(fp);
return [super free];
}
- (BOOL)atEndOfFile
{
return (feof(fp) == 0 ? NO : YES);
}
- (size_t)readIntoBuffer: (char*)buf
- (size_t)readIntoBuffer: (uint8_t*)buf
withSize: (size_t)size
andNItems: (size_t)nitems
{
size_t ret;
if ((ret = fread(buf, size, nitems, fp)) == 0 && !feof(fp))
[[OFReadFailedException newWithObject: self
andSize: size
andNItems: nitems] raise];
return ret;
}
- (char*)readWithSize: (size_t)size
andNItems: (size_t)nitems
- (uint8_t*)readWithSize: (size_t)size
andNItems: (size_t)nitems
{
uint64_t memsize;
char *ret;
uint8_t *ret;
if (size >= 0xFFFFFFFF || nitems >= 0xFFFFFFFF ||
(memsize = (uint64_t)nitems * size) > 0xFFFFFFFF) {
[[OFOverflowException newWithObject: self] raise];
return NULL;
}
|
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
-
+
|
@throw e;
return NULL;
}
return ret;
}
- (size_t)writeBuffer: (char*)buf
- (size_t)writeBuffer: (uint8_t*)buf
withSize: (size_t)size
andNItems: (size_t)nitems
{
size_t ret;
if ((ret = fwrite(buf, size, nitems, fp)) == 0 &&
size != 0 && nitems != 0)
|