Artifact c1de4ea884d460a24a3c00d65ba1f464ad7f1fbbb0a86bda8a0bef7a491fed4b:
- File
src/OFObject.m
— part of check-in
[b597d49f43]
at
2008-10-08 23:15:26
on branch trunk
— Multiple changes, see details.
* OFObject getMem: renamd to getMemWithSize:.
* OFString compare: renamed to compareTo:.
* Exceptions don't throw itself anymore.
* Exceptions include an error string now.
* Exceptions now got raise and string.
* New methods for OFFile:
* changeModeOfFile:toMode:
* changeOwnerOfFile:toOwner:andGroup:
* delete:
* link:to:
* symlink:to:
* OFFile isEndOfFile renamd to atEndOfFile
* OFNotImplementedExeception newWithObject:andMethod renamed to
newWithObject:andSelector:.
* Tests updated accordingly.
* TODO list added. (user: js, size: 2189) [annotate] [blame] [check-ins using]
/* * Copyright (c) 2008 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #import <stdlib.h> #import "OFObject.h" #import "OFExceptions.h" @implementation OFObject - init { if ((self = [super init]) != nil) __mem_pool = NULL; return self; } - (void*)getMemWithSize: (size_t)size { struct __ofobject_allocated_mem *iter; if ((iter = malloc(sizeof(struct __ofobject_allocated_mem))) == NULL) { [[OFNoMemException newWithObject: self andSize: sizeof(struct __ofobject_allocated_mem) ] raise]; return NULL; } if ((iter->ptr = malloc(size)) == NULL) { free(iter); [[OFNoMemException newWithObject: self andSize: size] raise]; return NULL; } iter->next = NULL; iter->prev = __mem_pool; if (__mem_pool != NULL) __mem_pool->next = iter; __mem_pool = iter; return iter->ptr; } - (void*)resizeMem: (void*)ptr toSize: (size_t)size { struct __ofobject_allocated_mem *iter; for (iter = __mem_pool; iter != NULL; iter = iter->prev) { if (iter->ptr == ptr) { if ((ptr = realloc(iter->ptr, size)) == NULL) { [[OFNoMemException newWithObject: self andSize: size] raise]; return NULL; } iter->ptr = ptr; return ptr; } } [[OFMemNotPartOfObjException newWithObject: self andPointer: ptr] raise]; return NULL; } - (void)freeMem: (void*)ptr; { struct __ofobject_allocated_mem *iter; for (iter = __mem_pool; iter != NULL; iter = iter->prev) { if (iter->ptr == ptr) { if (iter->prev != NULL) iter->prev->next = iter->next; if (iter->next != NULL) iter->next->prev = iter->prev; if (__mem_pool == iter) __mem_pool = NULL; free(iter); free(ptr); return; } } [[OFMemNotPartOfObjException newWithObject: self andPointer: ptr] raise]; } - free { struct __ofobject_allocated_mem *iter, *iter2; for (iter = __mem_pool; iter != NULL; iter = iter2) { iter2 = iter->prev; free(iter->ptr); free(iter); } return [super free]; } @end