ObjFW  Diff

Differences From Artifact [9d8368a480]:

To Artifact [b0fcc38dae]:


171
172
173
174
175
176
177
178

179
180

181
182


183
184
185
186
187

188
189


190
191

192
193
194

195
196
197


198
199
200
201
202
203
204
205
206
207

208
209
210
211
212
213
214
171
172
173
174
175
176
177

178
179
180
181


182
183


184


185
186

187
188
189

190



191



192
193
194
195
196
197
198
199
200
201
202

203
204
205
206
207
208
209
210







-
+


+
-
-
+
+
-
-

-
-
+

-
+
+

-
+
-
-
-
+
-
-
-
+
+









-
+







	return self;
}

#ifdef OF_HAVE_FILES
- (instancetype)initWithContentsOfFile: (OFString *)path
{
	char *buffer = NULL;
	unsigned long long size;
	OFStreamOffset fileSize;

	@try {
		void *pool = objc_autoreleasePoolPush();
		OFFile *file;

		OFFile *file = [OFFile fileWithPath: path mode: @"r"];
		fileSize = [file seekToOffset: 0 whence: OFSeekEnd];
		size = [[OFFileManager defaultManager]
		    attributesOfItemAtPath: path].fileSize;

# if ULLONG_MAX > SIZE_MAX
		if (size > SIZE_MAX)
		if (fileSize < 0 || (unsigned long long)fileSize > SIZE_MAX)
			@throw [OFOutOfRangeException exception];
# endif

		[file seekToOffset: 0 whence: OFSeekSet];

		buffer = OFAllocMemory((size_t)size, 1);
		buffer = OFAllocMemory((size_t)fileSize, 1);
		file = [[OFFile alloc] initWithPath: path mode: @"r"];
		@try {
			[file readIntoBuffer: buffer exactLength: (size_t)size];
		[file readIntoBuffer: buffer exactLength: (size_t)fileSize];
		} @finally {
			[file release];
		}

		objc_autoreleasePoolPop(pool);
	} @catch (id e) {
		OFFreeMemory(buffer);
		[self release];

		@throw e;
	}

	@try {
		self = [self initWithItemsNoCopy: buffer
					   count: (size_t)size
					   count: (size_t)fileSize
				    freeWhenDone: true];
	} @catch (id e) {
		OFFreeMemory(buffer);
		@throw e;
	}

	return self;