Overview
Comment: | Merge latest changes from default branch to 0.3 branch. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | 0.3 |
Files: | files | file ages | folders |
SHA3-256: |
86ee771c1a4f2b28eae8b40434f2b5ab |
User & Date: | js on 2010-05-05 17:31:49 |
Other Links: | branch diff | manifest | tags |
Context
2010-05-09
| ||
13:57 | Add latest changes from default branch to 0.3 branch. check-in: 4ded726bdb user: js tags: 0.3 | |
2010-05-05
| ||
17:31 | Merge latest changes from default branch to 0.3 branch. check-in: 86ee771c1a user: js tags: 0.3 | |
2010-04-30
| ||
21:50 | Remove warning about GNU libobjc in 0.3 branch. check-in: ff7fcef6a2 user: js tags: 0.3 | |
Changes
Modified src/OFFile.m from [963472770a] to [bf7134d6ef].
︙ | ︙ | |||
37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #ifndef S_IRGRP # define S_IRGRP 0 #endif #ifndef S_IROTH # define S_IROTH 0 #endif #define DEFAULT_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH #define DIR_MODE DEFAULT_MODE | S_IXUSR | S_IXGRP | S_IXOTH OFFile *of_stdin = nil; OFFile *of_stdout = nil; OFFile *of_stderr = nil; | > > > > > > | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #ifndef S_IRGRP # define S_IRGRP 0 #endif #ifndef S_IROTH # define S_IROTH 0 #endif #ifndef S_IWGRP # define S_IWGRP 0 #endif #ifndef S_IWOTH # define S_IWOTH 0 #endif #define DEFAULT_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH #define DIR_MODE DEFAULT_MODE | S_IXUSR | S_IXGRP | S_IXOTH OFFile *of_stdin = nil; OFFile *of_stdout = nil; OFFile *of_stderr = nil; |
︙ | ︙ | |||
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | const char *path_c = [path cString]; size_t path_len = [path cStringLength]; ssize_t i; if (path_len == 0) return @""; if (path_c[path_len - 1] == OF_PATH_DELIM) path_len--; for (i = path_len - 1; i >= 0; i--) { if (path_c[i] == OF_PATH_DELIM) { i++; break; } } /* * Only one component, but the trailing delimiter might have been | > > > > > > > > | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | const char *path_c = [path cString]; size_t path_len = [path cStringLength]; ssize_t i; if (path_len == 0) return @""; #ifndef _WIN32 if (path_c[path_len - 1] == OF_PATH_DELIM) #else if (path_c[path_len - 1] == '/' || path_c[path_len - 1] == '\\') #endif path_len--; for (i = path_len - 1; i >= 0; i--) { #ifndef _WIN32 if (path_c[i] == OF_PATH_DELIM) { #else if (path_c[i] == '/' || path_c[i] == '\\') { #endif i++; break; } } /* * Only one component, but the trailing delimiter might have been |
︙ | ︙ | |||
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 | while (![src atEndOfStream]) { size_t len = [src readNBytes: 4096 intoBuffer: buf]; [dest writeNBytes: len fromBuffer: buf]; } if (!override) { struct stat s; if (fstat(src->fd, &s) == 0) fchmod(dest->fd, s.st_mode); } } @finally { [src close]; [dest close]; } [pool release]; } | > > | 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | while (![src atEndOfStream]) { size_t len = [src readNBytes: 4096 intoBuffer: buf]; [dest writeNBytes: len fromBuffer: buf]; } #ifndef _WIN32 if (!override) { struct stat s; if (fstat(src->fd, &s) == 0) fchmod(dest->fd, s.st_mode); } #endif } @finally { [src close]; [dest close]; } [pool release]; } |
︙ | ︙ |
Modified src/OFObject.h from [ed24092d00] to [edc7438bce].
︙ | ︙ | |||
136 137 138 139 140 141 142 | /** * Replaces a class method with a class method from another class. * * \param selector The selector of the class method to replace * \param class_ The class from which the new class method should be taken * \return The old implementation */ | | | | | | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | /** * Replaces a class method with a class method from another class. * * \param selector The selector of the class method to replace * \param class_ The class from which the new class method should be taken * \return The old implementation */ + (IMP)replaceClassMethod: (SEL)selector withMethodFromClass: (Class)class_; /** * Replaces an instance method implementation with another implementation. * * \param newimp The new implementation for the instance method * \param selector The selector of the instance method to replace * \return The old implementation */ + (IMP)setImplementation: (IMP)newimp forInstanceMethod: (SEL)selector; /** * Replaces an instance method with an instance method from another class. * * \param selector The selector of the instance method to replace * \param class_ The class from which the new instance method should be taken * \return The old implementation */ + (IMP)replaceInstanceMethod: (SEL)selector withMethodFromClass: (Class)class_; /** * Initializes an already allocated object. * * Derived classes may override this, but need to do self = [super init] before * they do any initialization themselves. init may never return nil, instead * an exception (for example OFInitializationFailed) should be thrown. |
︙ | ︙ |
Modified src/OFObject.m from [7e95f15bf5] to [1881ae5509].
︙ | ︙ | |||
258 259 260 261 262 263 264 | sarray_at_put_safe(((Class)self->class_pointer)->dtable, (sidx)method->method_name->sel_id, method->method_imp); return oldimp; #endif } | | | > > > > | 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 | sarray_at_put_safe(((Class)self->class_pointer)->dtable, (sidx)method->method_name->sel_id, method->method_imp); return oldimp; #endif } + (IMP)replaceClassMethod: (SEL)selector withMethodFromClass: (Class)class; { IMP newimp; if (![class isSubclassOfClass: self]) @throw [OFInvalidArgumentException newWithClass: self selector: _cmd]; #if defined(OF_OBJFW_RUNTIME) newimp = objc_get_class_method(class, selector); #elif defined(OF_APPLE_RUNTIME) newimp = method_getImplementation(class_getClassMethod(class, selector)); #else |
︙ | ︙ | |||
310 311 312 313 314 315 316 | sarray_at_put_safe(((Class)self)->dtable, (sidx)method->method_name->sel_id, method->method_imp); return oldimp; #endif } | | | > > > > | 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 | sarray_at_put_safe(((Class)self)->dtable, (sidx)method->method_name->sel_id, method->method_imp); return oldimp; #endif } + (IMP)replaceInstanceMethod: (SEL)selector withMethodFromClass: (Class)class; { IMP newimp; if (![class isSubclassOfClass: self]) @throw [OFInvalidArgumentException newWithClass: self selector: _cmd]; #if defined(OF_OBJFW_RUNTIME) newimp = objc_get_instance_method(class, selector); #elif defined(OF_APPLE_RUNTIME) newimp = class_getMethodImplementation(class, selector); #else newimp = method_get_imp(class_get_instance_method(class, selector)); |
︙ | ︙ |
Modified tests/OFFileTests.m from [d67d57f93a] to [b9b8be5676].
︙ | ︙ | |||
25 26 27 28 29 30 31 | { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; TEST(@"+[lastComponentOfPath", [[OFFile lastComponentOfPath: @"/tmp"] isEqual: @"tmp"] && [[OFFile lastComponentOfPath: @"/tmp/"] isEqual: @"tmp"] && [[OFFile lastComponentOfPath: @"/"] isEqual: @""] && | | | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; TEST(@"+[lastComponentOfPath", [[OFFile lastComponentOfPath: @"/tmp"] isEqual: @"tmp"] && [[OFFile lastComponentOfPath: @"/tmp/"] isEqual: @"tmp"] && [[OFFile lastComponentOfPath: @"/"] isEqual: @""] && [[OFFile lastComponentOfPath: @"foo"] isEqual: @"foo"] && [[OFFile lastComponentOfPath: @"foo/bar"] isEqual: @"bar"] && [[OFFile lastComponentOfPath: @"foo/bar/baz/"] isEqual: @"baz"]) [pool drain]; } @end |