Comment: | Avoid using (u)intmax_t in methods
It is not guaranteed that a type encoding for it exists. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
d74f244ab7a1ca9855c2415281bea54a |
User & Date: | js on 2020-08-12 20:56:32 |
Other Links: | manifest | tags |
2020-08-13
| ||
19:27 | Always cast argument to isspace() to unsigned char check-in: ce5dfd4a83 user: js tags: trunk | |
2020-08-12
| ||
20:56 | Avoid using (u)intmax_t in methods check-in: d74f244ab7 user: js tags: trunk | |
2020-08-11
| ||
19:45 | OFString: Rework number parsing API check-in: b6ee372b98 user: js tags: trunk | |
Modified src/OFASN1Enumerated.h from [8d58cfdd70] to [b9ec14a4c3].
︙ | ︙ | |||
22 23 24 25 26 27 28 | /*! * @brief An ASN.1 Enumerated. */ OF_SUBCLASSING_RESTRICTED @interface OFASN1Enumerated: OFObject { | | | | | | < | | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | /*! * @brief An ASN.1 Enumerated. */ OF_SUBCLASSING_RESTRICTED @interface OFASN1Enumerated: OFObject { long long _longLongValue; } /*! * @brief The integer value. */ @property (readonly, nonatomic) long long longLongValue; /*! * @brief Creates an ASN.1 Enumerated with the specified integer value. * * @param value The `long long` value of the Enumerated * @return A new, autoreleased OFASN1Enumerated */ + (instancetype)enumeratedWithLongLong: (long long)value; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Enumerated with the specified * integer value. * * @param value The `long long` value of the Enumerated * @return An initialized OFASN1Enumerated */ - (instancetype)initWithLongLong: (long long)value OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 Enumerated with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type |
︙ | ︙ |
Modified src/OFASN1Enumerated.m from [1b0ff0da1e] to [78253ff0bd].
︙ | ︙ | |||
19 20 21 22 23 24 25 | #import "OFASN1Enumerated.h" #import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" | | | | | | | | | | | | | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 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 | #import "OFASN1Enumerated.h" #import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" extern long long of_asn1_der_integer_parse(const unsigned char *buffer, size_t length); @implementation OFASN1Enumerated @synthesize longLongValue = _longLongValue; + (instancetype)enumeratedWithLongLong: (long long)value { return [[[self alloc] initWithLongLong: value] autorelease]; } - (instancetype)initWithLongLong: (long long)value { self = [super init]; _longLongValue = value; return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { long long value; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_ENUMERATED || constructed) @throw [OFInvalidArgumentException exception]; if (DEREncodedContents.itemSize != 1) @throw [OFInvalidArgumentException exception]; value = of_asn1_der_integer_parse( DEREncodedContents.items, DEREncodedContents.count); } @catch (id e) { [self release]; @throw e; } return [self initWithLongLong: value]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (bool)isEqual: (id)object { OFASN1Enumerated *enumerated; if (object == self) return true; if (![object isKindOfClass: [OFASN1Enumerated class]]) return false; enumerated = object; if (enumerated->_longLongValue != _longLongValue) return false; return true; } - (uint32_t)hash { return (uint32_t)_longLongValue; } - (OFString *)description { return [OFString stringWithFormat: @"<OFASN1Enumerated: %lld>", _longLongValue]; } @end |
Modified src/OFASN1Integer.h from [c737c6710d] to [ce3a4d009e].
︙ | ︙ | |||
22 23 24 25 26 27 28 | /*! * @brief An ASN.1 Integer. */ OF_SUBCLASSING_RESTRICTED @interface OFASN1Integer: OFObject { | | | | | | < | | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | /*! * @brief An ASN.1 Integer. */ OF_SUBCLASSING_RESTRICTED @interface OFASN1Integer: OFObject { long long _longLongValue; } /*! * @brief The Integer value. */ @property (readonly, nonatomic) long long longLongValue; /*! * @brief Creates an ASN.1 Integer with the specified integer value. * * @param value The `long long` value of the Integer * @return A new, autoreleased OFASN1Integer */ + (instancetype)integerWithLongLong: (long long)value; - (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated ASN.1 Integer with the specified * integer value. * * @param value The `long long` value of the Integer * @return An initialized OFASN1Integer */ - (instancetype)initWithLongLong: (long long)value OF_DESIGNATED_INITIALIZER; /*! * @brief Initializes an already allocated ASN.1 Integer with the specified * arguments. * * @param tagClass The tag class of the value's type * @param tagNumber The tag number of the value's type |
︙ | ︙ |
Modified src/OFASN1Integer.m from [d8bb9bcba6] to [39a371a7d5].
︙ | ︙ | |||
21 22 23 24 25 26 27 | #import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" | | | | | | | | | | | | | | | | | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 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 118 119 120 121 122 123 124 125 126 | #import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" long long of_asn1_der_integer_parse(const unsigned char *buffer, size_t length) { unsigned long long value = 0; /* TODO: Support for big numbers */ if (length > sizeof(unsigned long long) && (length != sizeof(unsigned long long) + 1 || buffer[0] != 0)) @throw [OFOutOfRangeException exception]; if (length >= 2 && ((buffer[0] == 0 && !(buffer[1] & 0x80)) || (buffer[0] == 0xFF && buffer[1] & 0x80))) @throw [OFInvalidFormatException exception]; if (length >= 1 && buffer[0] & 0x80) value = ~0ull; while (length--) value = (value << 8) | *buffer++; return value; } @implementation OFASN1Integer @synthesize longLongValue = _longLongValue; + (instancetype)integerWithLongLong: (long long)value { return [[[self alloc] initWithLongLong: value] autorelease]; } - (instancetype)initWithLongLong: (long long)value { self = [super init]; _longLongValue = value; return self; } - (instancetype)initWithTagClass: (of_asn1_tag_class_t)tagClass tagNumber: (of_asn1_tag_number_t)tagNumber constructed: (bool)constructed DEREncodedContents: (OFData *)DEREncodedContents { long long value; @try { if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_INTEGER || constructed) @throw [OFInvalidArgumentException exception]; if (DEREncodedContents.itemSize != 1) @throw [OFInvalidArgumentException exception]; value = of_asn1_der_integer_parse( DEREncodedContents.items, DEREncodedContents.count); } @catch (id e) { [self release]; @throw e; } return [self initWithLongLong: value]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (bool)isEqual: (id)object { OFASN1Integer *integer; if (object == self) return true; if (![object isKindOfClass: [OFASN1Integer class]]) return false; integer = object; if (integer->_longLongValue != _longLongValue) return false; return true; } - (uint32_t)hash { return (uint32_t)_longLongValue; } - (OFString *)description { return [OFString stringWithFormat: @"<OFASN1Integer: %lld>", _longLongValue]; } @end |
Modified src/OFASN1ObjectIdentifier.m from [64757d3fa2] to [13ae15fdce].
︙ | ︙ | |||
42 43 44 45 46 47 48 | { self = [super init]; @try { if (subidentifiers.count < 1) @throw [OFInvalidFormatException exception]; | | | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | { self = [super init]; @try { if (subidentifiers.count < 1) @throw [OFInvalidFormatException exception]; switch ([[subidentifiers objectAtIndex: 0] longLongValue]) { case 0: case 1: case 2: break; default: @throw [OFInvalidFormatException exception]; } |
︙ | ︙ | |||
71 72 73 74 75 76 77 | { void *pool = objc_autoreleasePoolPush(); OFMutableArray OF_GENERIC(OFNumber *) *subidentifiers; @try { const unsigned char *items = DEREncodedContents.items; size_t count = DEREncodedContents.count; | | | | | | | | 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 118 119 120 121 122 123 124 125 126 127 | { void *pool = objc_autoreleasePoolPush(); OFMutableArray OF_GENERIC(OFNumber *) *subidentifiers; @try { const unsigned char *items = DEREncodedContents.items; size_t count = DEREncodedContents.count; unsigned long long value = 0; uint_fast8_t bits = 0; if (tagClass != OF_ASN1_TAG_CLASS_UNIVERSAL || tagNumber != OF_ASN1_TAG_NUMBER_OBJECT_IDENTIFIER || constructed) @throw [OFInvalidArgumentException exception]; if (DEREncodedContents.itemSize != 1 || count == 0) @throw [OFInvalidArgumentException exception]; subidentifiers = [OFMutableArray array]; for (size_t i = 0; i < count; i++) { if (bits == 0 && items[i] == 0x80) @throw [OFInvalidFormatException exception]; value = (value << 7) | (items[i] & 0x7F); bits += 7; if (bits > sizeof(unsigned long long) * 8) @throw [OFOutOfRangeException exception]; if (items[i] & 0x80) continue; if (subidentifiers.count == 0) { if (value < 40) [subidentifiers addObject: [OFNumber numberWithInt: 0]]; else if (value < 80) { [subidentifiers addObject: [OFNumber numberWithInt: 1]]; value -= 40; } else { [subidentifiers addObject: [OFNumber numberWithInt: 2]]; value -= 80; } } [subidentifiers addObject: [OFNumber numberWithUnsignedLongLong: value]]; value = 0; bits = 0; } if (items[count - 1] & 0x80) @throw [OFInvalidFormatException exception]; |
︙ | ︙ |
Modified src/OFData.m from [9637aa54ff] to [1f025529e1].
︙ | ︙ | |||
180 181 182 183 184 185 186 | return self; } #ifdef OF_HAVE_FILES - (instancetype)initWithContentsOfFile: (OFString *)path { char *buffer = NULL; | | | | 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | return self; } #ifdef OF_HAVE_FILES - (instancetype)initWithContentsOfFile: (OFString *)path { char *buffer = NULL; unsigned long long size; @try { OFFile *file; size = [[OFFileManager defaultManager] attributesOfItemAtPath: path].fileSize; # if ULLONG_MAX > SIZE_MAX if (size > SIZE_MAX) @throw [OFOutOfRangeException exception]; # endif if ((buffer = malloc((size_t)size)) == NULL) @throw [OFOutOfMemoryException exceptionWithRequestedSize: (size_t)size]; |
︙ | ︙ |
Modified src/OFFileManager.h from [832085a76a] to [fff729036e].
︙ | ︙ | |||
574 575 576 577 578 579 580 | @interface OFDictionary (FileAttributes) /*! * @brief The @ref of_file_attribute_key_size key from the dictionary. * * Raises an @ref OFUndefinedKeyException if the key is missing. */ | | | 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 | @interface OFDictionary (FileAttributes) /*! * @brief The @ref of_file_attribute_key_size key from the dictionary. * * Raises an @ref OFUndefinedKeyException if the key is missing. */ @property (readonly, nonatomic) unsigned long long fileSize; /*! * @brief The @ref of_file_attribute_key_type key from the dictionary. * * Raises an @ref OFUndefinedKeyException if the key is missing. */ @property (readonly, nonatomic) of_file_type_t fileType; |
︙ | ︙ |
Modified src/OFFileManager.m from [c5306f3b5d] to [942505065c].
︙ | ︙ | |||
934 935 936 937 938 939 940 | - (unsigned int)retainCount { return OF_RETAIN_COUNT_MAX; } @end @implementation OFDictionary (FileAttributes) | | | | 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 | - (unsigned int)retainCount { return OF_RETAIN_COUNT_MAX; } @end @implementation OFDictionary (FileAttributes) - (unsigned long long)fileSize { return [attributeForKeyOrException(self, of_file_attribute_key_size) unsignedLongLongValue]; } - (of_file_type_t)fileType { return attributeForKeyOrException(self, of_file_attribute_key_type); } |
︙ | ︙ |
Modified src/OFFileURLHandler.m from [b404d9c716] to [469f3d6619].
︙ | ︙ | |||
616 617 618 619 620 621 622 | @throw [OFRetrieveItemAttributesFailedException exceptionWithURL: URL errNo: errno]; if (s.st_size < 0) @throw [OFOutOfRangeException exception]; | | | 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 | @throw [OFRetrieveItemAttributesFailedException exceptionWithURL: URL errNo: errno]; if (s.st_size < 0) @throw [OFOutOfRangeException exception]; [ret setObject: [NSNumber numberWithUnsignedLongLong: s.st_size] forKey: of_file_attribute_key_size]; setTypeAttribute(ret, &s); [ret setObject: [NSNumber numberWithUInt16: s.st_mode & 07777] forKey: of_file_attribute_key_posix_permissions]; |
︙ | ︙ |
Modified src/OFLocale.m from [2f0ab9defe] to [80430a2785].
︙ | ︙ | |||
211 212 213 214 215 216 217 | else if ([token isEqual: @">="]) var = [OFNumber numberWithBool: [first compare: second] != OF_ORDERED_ASCENDING]; else if ([token isEqual: @"+"]) var = [OFNumber numberWithDouble: [first doubleValue] + [second doubleValue]]; else if ([token isEqual: @"%"]) | | > | | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | else if ([token isEqual: @">="]) var = [OFNumber numberWithBool: [first compare: second] != OF_ORDERED_ASCENDING]; else if ([token isEqual: @"+"]) var = [OFNumber numberWithDouble: [first doubleValue] + [second doubleValue]]; else if ([token isEqual: @"%"]) var = [OFNumber numberWithLongLong: [first longLongValue] % [second longLongValue]]; else if ([token isEqual: @"&&"]) var = [OFNumber numberWithBool: [first boolValue] && [second boolValue]]; else if ([token isEqual: @"||"]) var = [OFNumber numberWithBool: [first boolValue] || [second boolValue]]; else |
︙ | ︙ | |||
234 235 236 237 238 239 240 | first = stack.lastObject; if ([token isEqual: @"!"]) var = [OFNumber numberWithBool: ![first boolValue]]; else if ([token isEqual: @"is_real"]) var = [OFNumber numberWithBool: | | > | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | first = stack.lastObject; if ([token isEqual: @"!"]) var = [OFNumber numberWithBool: ![first boolValue]]; else if ([token isEqual: @"is_real"]) var = [OFNumber numberWithBool: ([first doubleValue] != [first longLongValue])]; else OF_ENSURE(0); [stack replaceObjectAtIndex: stackSize - 1 withObject: var]; } else [stack addObject: token]; |
︙ | ︙ |
Modified src/OFNumber.h from [8668a7987f] to [66f566bece].
︙ | ︙ | |||
45 46 47 48 49 50 51 | #ifndef OF_NUMBER_M OF_SUBCLASSING_RESTRICTED #endif @interface OFNumber: OFValue <OFComparing, OFSerialization, OFJSONRepresentation, OFMessagePackRepresentation> { union of_number_value { | | | | | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #ifndef OF_NUMBER_M OF_SUBCLASSING_RESTRICTED #endif @interface OFNumber: OFValue <OFComparing, OFSerialization, OFJSONRepresentation, OFMessagePackRepresentation> { union of_number_value { double float_; long long signed_; unsigned long long unsigned_; } _value; enum of_number_type { OF_NUMBER_TYPE_FLOAT = 1, OF_NUMBER_TYPE_SIGNED, OF_NUMBER_TYPE_UNSIGNED } _type; const char *_typeEncoding; |
︙ | ︙ | |||
162 163 164 165 166 167 168 | @property (readonly, nonatomic) size_t sizeValue; /*! * @brief The OFNumber as an `ssize_t`. */ @property (readonly, nonatomic) ssize_t sSizeValue; | < < < < < < < < < < | 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | @property (readonly, nonatomic) size_t sizeValue; /*! * @brief The OFNumber as an `ssize_t`. */ @property (readonly, nonatomic) ssize_t sSizeValue; /*! * @brief The OFNumber as a `ptrdiff_t`. */ @property (readonly, nonatomic) ptrdiff_t ptrDiffValue; /*! * @brief The OFNumber as an `intptr_t`. |
︙ | ︙ | |||
216 217 218 219 220 221 222 | + (instancetype)valueWithDimension: (of_dimension_t)dimension OF_UNAVAILABLE; + (instancetype)valueWithRectangle: (of_rectangle_t)rectangle OF_UNAVAILABLE; #endif /*! * @brief Creates a new OFNumber with the specified `bool`. * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < < < < < < < < < < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < < < < < < < < < < < < < | | | | | | | | | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 | + (instancetype)valueWithDimension: (of_dimension_t)dimension OF_UNAVAILABLE; + (instancetype)valueWithRectangle: (of_rectangle_t)rectangle OF_UNAVAILABLE; #endif /*! * @brief Creates a new OFNumber with the specified `bool`. * * @param value The `bool` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithBool: (bool)value; /*! * @brief Creates a new OFNumber with the specified `signed char`. * * @param value The `signed char` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithChar: (signed char)value; /*! * @brief Creates a new OFNumber with the specified `short`. * * @param value The `short` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithShort: (short)value; /*! * @brief Creates a new OFNumber with the specified `int`. * * @param value The `int` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithInt: (int)value; /*! * @brief Creates a new OFNumber with the specified `long`. * * @param value The `long` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithLong: (long)value; /*! * @brief Creates a new OFNumber with the specified `long long`. * * @param value The `long long` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithLongLong: (long long)value; /*! * @brief Creates a new OFNumber with the specified `unsigned char`. * * @param value The `unsigned char` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUnsignedChar: (unsigned char)value; /*! * @brief Creates a new OFNumber with the specified `unsigned short`. * * @param value The `unsigned short` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUnsignedShort: (unsigned short)value; /*! * @brief Creates a new OFNumber with the specified `unsigned int`. * * @param value The `unsigned int` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUnsignedInt: (unsigned int)value; /*! * @brief Creates a new OFNumber with the specified `unsigned long`. * * @param value The `unsigned long` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUnsignedLong: (unsigned long)value; /*! * @brief Creates a new OFNumber with the specified `unsigned long long`. * * @param value The `unsigned long long` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUnsignedLongLong: (unsigned long long)value; /*! * @brief Creates a new OFNumber with the specified `int8_t`. * * @param value The `int8_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithInt8: (int8_t)value; /*! * @brief Creates a new OFNumber with the specified `int16_t`. * * @param value The `int16_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithInt16: (int16_t)value; /*! * @brief Creates a new OFNumber with the specified `int32_t`. * * @param value The `int32_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithInt32: (int32_t)value; /*! * @brief Creates a new OFNumber with the specified `int64_t`. * * @param value The `int64_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithInt64: (int64_t)value; /*! * @brief Creates a new OFNumber with the specified `uint8_t`. * * @param value The `uint8_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUInt8: (uint8_t)value; /*! * @brief Creates a new OFNumber with the specified `uint16_t`. * * @param value The `uint16_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUInt16: (uint16_t)value; /*! * @brief Creates a new OFNumber with the specified `uint32_t`. * * @param value The `uint32_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUInt32: (uint32_t)value; /*! * @brief Creates a new OFNumber with the specified `uint64_t`. * * @param value The `uint64_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUInt64: (uint64_t)value; /*! * @brief Creates a new OFNumber with the specified `size_t`. * * @param value The `size_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithSize: (size_t)value; /*! * @brief Creates a new OFNumber with the specified `ssize_t`. * * @param value The `ssize_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithSSize: (ssize_t)value; /*! * @brief Creates a new OFNumber with the specified `ptrdiff_t`. * * @param value The `ptrdiff_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithPtrDiff: (ptrdiff_t)value; /*! * @brief Creates a new OFNumber with the specified `intptr_t`. * * @param value The `intptr_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithIntPtr: (intptr_t)value; /*! * @brief Creates a new OFNumber with the specified `uintptr_t`. * * @param value The `uintptr_t` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithUIntPtr: (uintptr_t)value; /*! * @brief Creates a new OFNumber with the specified `float`. * * @param value The `float` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithFloat: (float)value; /*! * @brief Creates a new OFNumber with the specified `double`. * * @param value The `double` value which the OFNumber should contain * @return A new autoreleased OFNumber */ + (instancetype)numberWithDouble: (double)value; - (instancetype)init OF_UNAVAILABLE; #ifdef OF_HAVE_UNAVAILABLE - (instancetype)initWithBytes: (const void *)bytes objCType: (const char *)objCType OF_UNAVAILABLE; - (instancetype)initWithPointer: (const void *)pointer OF_UNAVAILABLE; - (instancetype)initWithNonretainedObject: (id)object OF_UNAVAILABLE; - (instancetype)initWithRange: (of_range_t)range OF_UNAVAILABLE; - (instancetype)initWithPoint: (of_point_t)point OF_UNAVAILABLE; - (instancetype)initWithDimension: (of_dimension_t)dimension OF_UNAVAILABLE; - (instancetype)initWithRectangle: (of_rectangle_t)rectangle OF_UNAVAILABLE; #endif /*! * @brief Initializes an already allocated OFNumber with the specified `bool`. * * @param value The `bool` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithBool: (bool)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `signed char`. * * @param value The `signed char` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithChar: (signed char)value; /*! * @brief Initializes an already allocated OFNumber with the specified `short`. * * @param value The `short` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithShort: (short)value; /*! * @brief Initializes an already allocated OFNumber with the specified `int`. * * @param value The `int` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithInt: (int)value; /*! * @brief Initializes an already allocated OFNumber with the specified `long`. * * @param value The `long` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithLong: (long)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `long long`. * * @param value The `long long` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithLongLong: (long long)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `unsigned char`. * * @param value The `unsigned char` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUnsignedChar: (unsigned char)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `unsigned short`. * * @param value The `unsigned short` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUnsignedShort: (unsigned short)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `unsigned int`. * * @param value The `unsigned int` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUnsignedInt: (unsigned int)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `unsigned long`. * * @param value The `unsigned long` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUnsignedLong: (unsigned long)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `unsigned long long`. * * @param value The `unsigned long long` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUnsignedLongLong: (unsigned long long)value; /*! * @brief Initializes an already allocated OFNumber with the specified `int8_t`. * * @param value The `int8_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithInt8: (int8_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `int16_t`. * * @param value The `int16_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithInt16: (int16_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `int32_t`. * * @param value The `int32_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithInt32: (int32_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `int64_t`. * * @param value The `int64_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithInt64: (int64_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `uint8_t`. * * @param value The `uint8_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUInt8: (uint8_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `uint16_t`. * * @param value The `uint16_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUInt16: (uint16_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `uint32_t`. * * @param value The `uint32_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUInt32: (uint32_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `uint64_t`. * * @param value The `uint64_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUInt64: (uint64_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified `size_t`. * * @param value The `size_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithSize: (size_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `ssize_t`. * * @param value The `ssize_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithSSize: (ssize_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `ptrdiff_t`. * * @param value The `ptrdiff_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithPtrDiff: (ptrdiff_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `intptr_t`. * * @param value The `intptr_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithIntPtr: (intptr_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified * `uintptr_t`. * * @param value The `uintptr_t` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithUIntPtr: (uintptr_t)value; /*! * @brief Initializes an already allocated OFNumber with the specified `float`. * * @param value The `float` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithFloat: (float)value; /*! * @brief Initializes an already allocated OFNumber with the specified `double`. * * @param value The `double` value which the OFNumber should contain * @return An initialized OFNumber */ - (instancetype)initWithDouble: (double)value; @end OF_ASSUME_NONNULL_END #if !defined(NSINTEGER_DEFINED) && !__has_feature(modules) /* Required for number literals to work */ @compatibility_alias NSNumber OFNumber; #endif |
Modified src/OFNumber.m from [bbb46f4d11] to [a978c1217d].
︙ | ︙ | |||
77 78 79 80 81 82 83 | static void initFalseNumber(void) { falseNumber = [[OFNumberSingleton alloc] initWithBool: false]; } @implementation OFNumberPlaceholder | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < | < < | | | | | | < < | | | | | | | | | | | | | | < < | | < | | | | < < < | | | | | | | | | | | | < < | | | | < < | | | | > | | | | | | | | | | | | | | | | | | | > | | | | | | > | | | | | | 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 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 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 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 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 | static void initFalseNumber(void) { falseNumber = [[OFNumberSingleton alloc] initWithBool: false]; } @implementation OFNumberPlaceholder - (instancetype)initWithBool: (bool)value { if (value) { static of_once_t once; of_once(&once, initTrueNumber); return (id)trueNumber; } else { static of_once_t once; of_once(&once, initFalseNumber); return (id)falseNumber; } } - (instancetype)initWithChar: (signed char)value { if (value >= 0) return [self initWithUnsignedChar: value]; return (id)[[OFNumber of_alloc] initWithChar: value]; } - (instancetype)initWithShort: (short)value { if (value >= 0) return [self initWithUnsignedShort: value]; if (value >= SCHAR_MIN) return [self initWithChar: (signed char)value]; return (id)[[OFNumber of_alloc] initWithShort: value]; } - (instancetype)initWithInt: (int)value { if (value >= 0) return [self initWithUnsignedInt: value]; if (value >= SHRT_MIN) return [self initWithShort: (short)value]; return (id)[[OFNumber of_alloc] initWithInt: value]; } - (instancetype)initWithLong: (long)value { if (value >= 0) return [self initWithUnsignedLong: value]; if (value >= INT_MIN) return [self initWithShort: (int)value]; return (id)[[OFNumber of_alloc] initWithLong: value]; } - (instancetype)initWithLongLong: (long long)value { if (value >= 0) return [self initWithUnsignedLongLong: value]; if (value >= LONG_MIN) return [self initWithLong: (long)value]; return (id)[[OFNumber of_alloc] initWithLongLong: value]; } - (instancetype)initWithUnsignedChar: (unsigned char)value { switch (value) { case 0: { static of_once_t once = OF_ONCE_INIT; of_once(&once, initZeroNumber); return (id)zeroNumber; } case 1: { static of_once_t once = OF_ONCE_INIT; of_once(&once, initOneNumber); return (id)oneNumber; } case 2: { static of_once_t once = OF_ONCE_INIT; of_once(&once, initTwoNumber); return (id)twoNumber; } } return (id)[[OFNumber of_alloc] initWithUnsignedChar: value]; } - (instancetype)initWithUnsignedShort: (unsigned short)value { if (value <= UCHAR_MAX) return [self initWithUnsignedChar: (unsigned char)value]; return (id)[[OFNumber of_alloc] initWithUnsignedShort: value]; } - (instancetype)initWithUnsignedInt: (unsigned int)value { if (value <= USHRT_MAX) return [self initWithUnsignedShort: (unsigned short)value]; return (id)[[OFNumber of_alloc] initWithUnsignedInt: value]; } - (instancetype)initWithUnsignedLong: (unsigned long)value { if (value <= UINT_MAX) return [self initWithUnsignedInt: (unsigned int)value]; return (id)[[OFNumber of_alloc] initWithUnsignedLong: value]; } - (instancetype)initWithUnsignedLongLong: (unsigned long long)value { if (value <= ULONG_MAX) return [self initWithUnsignedLong: (unsigned long)value]; return (id)[[OFNumber of_alloc] initWithUnsignedLongLong: value]; } - (instancetype)initWithInt8: (int8_t)value { if (value >= 0) return [self initWithUInt8: value]; return (id)[[OFNumber of_alloc] initWithInt8: value]; } - (instancetype)initWithInt16: (int16_t)value { if (value >= 0) return [self initWithUInt16: value]; if (value >= INT8_MIN) return [self initWithInt8: (int8_t)value]; return (id)[[OFNumber of_alloc] initWithInt16: value]; } - (instancetype)initWithInt32: (int32_t)value { if (value >= 0) return [self initWithUInt32: value]; if (value >= INT16_MIN) return [self initWithInt16: (int16_t)value]; return (id)[[OFNumber of_alloc] initWithInt32: value]; } - (instancetype)initWithInt64: (int64_t)value { if (value >= 0) return [self initWithUInt64: value]; if (value >= INT32_MIN) return [self initWithInt32: (int32_t)value]; return (id)[[OFNumber of_alloc] initWithInt64: value]; } - (instancetype)initWithUInt8: (uint8_t)value { return (id)[[OFNumber of_alloc] initWithUInt8: value]; } - (instancetype)initWithUInt16: (uint16_t)value { if (value <= UINT8_MAX) return [self initWithUInt8: (uint8_t)value]; return (id)[[OFNumber of_alloc] initWithUInt16: value]; } - (instancetype)initWithUInt32: (uint32_t)value { if (value <= UINT16_MAX) return [self initWithUInt16: (uint16_t)value]; return (id)[[OFNumber of_alloc] initWithUInt32: value]; } - (instancetype)initWithUInt64: (uint64_t)value { if (value <= UINT32_MAX) return [self initWithUInt32: (uint32_t)value]; return (id)[[OFNumber of_alloc] initWithUInt64: value]; } - (instancetype)initWithSize: (size_t)value { if (value <= ULONG_MAX) return [self initWithUnsignedLong: (unsigned long)value]; return (id)[[OFNumber of_alloc] initWithSize: value]; } - (instancetype)initWithSSize: (ssize_t)value { if (value >= 0) return [self initWithSize: value]; if (value <= LONG_MIN) return [self initWithLong: (long)value]; return (id)[[OFNumber of_alloc] initWithSSize: value]; } #ifdef __clang__ /* * This warning should probably not exist at all, as it prevents checking * whether one type fits into another in a portable way. */ # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wtautological-constant-out-of-range-compare" #endif - (instancetype)initWithPtrDiff: (ptrdiff_t)value { if (value >= LLONG_MIN && value <= LLONG_MAX) return [self initWithLongLong: (long long)value]; return (id)[[OFNumber of_alloc] initWithPtrDiff: value]; } - (instancetype)initWithIntPtr: (intptr_t)value { if (value >= 0) return [self initWithUIntPtr: value]; if (value >= LLONG_MIN) return [self initWithLongLong: (long long)value]; return (id)[[OFNumber of_alloc] initWithIntPtr: value]; } - (instancetype)initWithUIntPtr: (uintptr_t)value { if (value <= ULLONG_MAX) return [self initWithUnsignedLongLong: (unsigned long long)value]; return (id)[[OFNumber of_alloc] initWithUIntPtr: value]; } #ifdef __clang__ # pragma clang diagnostic pop #endif - (instancetype)initWithFloat: (float)value { if (value == (unsigned long long)value) return [self initWithUnsignedLongLong: (unsigned long long)value]; if (value == (long long)value) return [self initWithLongLong: (long long)value]; return (id)[[OFNumber of_alloc] initWithFloat: value]; } - (instancetype)initWithDouble: (double)value { if (value == (unsigned long long)value) return [self initWithUnsignedLongLong: (unsigned long long)value]; if (value == (long long)value) return [self initWithLongLong: (long long)value]; if (value == (float)value) return [self initWithFloat: (float)value]; return (id)[[OFNumber of_alloc] initWithDouble: value]; } - (instancetype)initWithSerialization: (OFXMLElement *)element { return (id)[[OFNumber of_alloc] initWithSerialization: element]; } @end |
︙ | ︙ | |||
406 407 408 409 410 411 412 | { if (self == [OFNumber class]) return (id)&placeholder; return [super alloc]; } | | | | | | | | | | | | | | < < < | < < | | | | | | | | | | | | | | | | | | | | | | | | | < < < < | < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | < < < < < < < < < < < < < < < < < < < < < < | | | | | | | | | | | 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 | { if (self == [OFNumber class]) return (id)&placeholder; return [super alloc]; } + (instancetype)numberWithBool: (bool)value { return [[[self alloc] initWithBool: value] autorelease]; } + (instancetype)numberWithChar: (signed char)value { return [[[self alloc] initWithChar: value] autorelease]; } + (instancetype)numberWithShort: (short)value { return [[[self alloc] initWithShort: value] autorelease]; } + (instancetype)numberWithInt: (int)value { return [[[self alloc] initWithInt: value] autorelease]; } + (instancetype)numberWithLong: (long)value { return [[[self alloc] initWithLong: value] autorelease]; } + (instancetype)numberWithLongLong: (long long)value { return [[[self alloc] initWithLongLong: value] autorelease]; } + (instancetype)numberWithUnsignedChar: (unsigned char)value { return [[[self alloc] initWithUnsignedChar: value] autorelease]; } + (instancetype)numberWithUnsignedShort: (unsigned short)value { return [[[self alloc] initWithUnsignedShort: value] autorelease]; } + (instancetype)numberWithUnsignedInt: (unsigned int)value { return [[[self alloc] initWithUnsignedInt: value] autorelease]; } + (instancetype)numberWithUnsignedLong: (unsigned long)value { return [[[self alloc] initWithUnsignedLong: value] autorelease]; } + (instancetype)numberWithUnsignedLongLong: (unsigned long long)value { return [[[self alloc] initWithUnsignedLongLong: value] autorelease]; } + (instancetype)numberWithInt8: (int8_t)value { return [[[self alloc] initWithInt8: value] autorelease]; } + (instancetype)numberWithInt16: (int16_t)value { return [[[self alloc] initWithInt16: value] autorelease]; } + (instancetype)numberWithInt32: (int32_t)value { return [[[self alloc] initWithInt32: value] autorelease]; } + (instancetype)numberWithInt64: (int64_t)value { return [[[self alloc] initWithInt64: value] autorelease]; } + (instancetype)numberWithUInt8: (uint8_t)value { return [[[self alloc] initWithUInt8: value] autorelease]; } + (instancetype)numberWithUInt16: (uint16_t)value { return [[[self alloc] initWithUInt16: value] autorelease]; } + (instancetype)numberWithUInt32: (uint32_t)value { return [[[self alloc] initWithUInt32: value] autorelease]; } + (instancetype)numberWithUInt64: (uint64_t)value { return [[[self alloc] initWithUInt64: value] autorelease]; } + (instancetype)numberWithSize: (size_t)value { return [[[self alloc] initWithSize: value] autorelease]; } + (instancetype)numberWithSSize: (ssize_t)value { return [[[self alloc] initWithSSize: value] autorelease]; } + (instancetype)numberWithPtrDiff: (ptrdiff_t)value { return [[[self alloc] initWithPtrDiff: value] autorelease]; } + (instancetype)numberWithIntPtr: (intptr_t)value { return [[[self alloc] initWithIntPtr: value] autorelease]; } + (instancetype)numberWithUIntPtr: (uintptr_t)value { return [[[self alloc] initWithUIntPtr: value] autorelease]; } + (instancetype)numberWithFloat: (float)value { return [[[self alloc] initWithFloat: value] autorelease]; } + (instancetype)numberWithDouble: (double)value { return [[[self alloc] initWithDouble: value] autorelease]; } - (instancetype)init { OF_INVALID_INIT_METHOD } - (instancetype)initWithBool: (bool)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(bool); return self; } - (instancetype)initWithChar: (signed char)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(signed char); return self; } - (instancetype)initWithShort: (short)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(short); return self; } - (instancetype)initWithInt: (int)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(int); return self; } - (instancetype)initWithLong: (long)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(long); return self; } - (instancetype)initWithLongLong: (long long)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(long long); return self; } - (instancetype)initWithUnsignedChar: (unsigned char)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(unsigned long); return self; } - (instancetype)initWithUnsignedShort: (unsigned short)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(unsigned short); return self; } - (instancetype)initWithUnsignedInt: (unsigned int)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(unsigned int); return self; } - (instancetype)initWithUnsignedLong: (unsigned long)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(unsigned long); return self; } - (instancetype)initWithUnsignedLongLong: (unsigned long long)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(unsigned long long); return self; } - (instancetype)initWithInt8: (int8_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(int8_t); return self; } - (instancetype)initWithInt16: (int16_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(int16_t); return self; } - (instancetype)initWithInt32: (int32_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(int32_t); return self; } - (instancetype)initWithInt64: (int64_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(int64_t); return self; } - (instancetype)initWithUInt8: (uint8_t)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(uint8_t); return self; } - (instancetype)initWithUInt16: (uint16_t)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(uint16_t); return self; } - (instancetype)initWithUInt32: (uint32_t)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(uint32_t); return self; } - (instancetype)initWithUInt64: (uint64_t)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(uint64_t); return self; } - (instancetype)initWithSize: (size_t)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(size_t); return self; } - (instancetype)initWithSSize: (ssize_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(ssize_t); return self; } - (instancetype)initWithPtrDiff: (ptrdiff_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(ptrdiff_t); return self; } - (instancetype)initWithIntPtr: (intptr_t)value { self = [super init]; _value.signed_ = value; _type = OF_NUMBER_TYPE_SIGNED; _typeEncoding = @encode(intptr_t); return self; } - (instancetype)initWithUIntPtr: (uintptr_t)value { self = [super init]; _value.unsigned_ = value; _type = OF_NUMBER_TYPE_UNSIGNED; _typeEncoding = @encode(uintptr_t); return self; } - (instancetype)initWithFloat: (float)value { self = [super init]; _value.float_ = value; _type = OF_NUMBER_TYPE_FLOAT; _typeEncoding = @encode(float); return self; } - (instancetype)initWithDouble: (double)value { self = [super init]; _value.float_ = value; _type = OF_NUMBER_TYPE_FLOAT; _typeEncoding = @encode(double); return self; } - (instancetype)initWithSerialization: (OFXMLElement *)element |
︙ | ︙ | |||
1061 1062 1063 1064 1065 1066 1067 | } - (ssize_t)sSizeValue { RETURN_AS(ssize_t) } | < < < < < < < < < < | 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 | } - (ssize_t)sSizeValue { RETURN_AS(ssize_t) } - (ptrdiff_t)ptrDiffValue { RETURN_AS(ptrdiff_t) } - (intptr_t)intPtrValue { |
︙ | ︙ | |||
1124 1125 1126 1127 1128 1129 1130 | return false; return (value1 == value2); } if (_type == OF_NUMBER_TYPE_SIGNED || number->_type == OF_NUMBER_TYPE_SIGNED) | | | | 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 | return false; return (value1 == value2); } if (_type == OF_NUMBER_TYPE_SIGNED || number->_type == OF_NUMBER_TYPE_SIGNED) return (number.longLongValue == self.longLongValue); return (number.unsignedLongLongValue == self.unsignedLongLongValue); } - (of_comparison_result_t)compare: (id <OFComparing>)object { OFNumber *number; if (![(id)object isKindOfClass: [OFNumber class]]) |
︙ | ︙ | |||
1151 1152 1153 1154 1155 1156 1157 | return OF_ORDERED_DESCENDING; if (double1 < double2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; } else if (_type == OF_NUMBER_TYPE_SIGNED || number->_type == OF_NUMBER_TYPE_SIGNED) { | | | | | | 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 | return OF_ORDERED_DESCENDING; if (double1 < double2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; } else if (_type == OF_NUMBER_TYPE_SIGNED || number->_type == OF_NUMBER_TYPE_SIGNED) { long long int1 = self.longLongValue; long long int2 = number.longLongValue; if (int1 > int2) return OF_ORDERED_DESCENDING; if (int1 < int2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; } else { unsigned long long uint1 = self.unsignedLongLongValue; unsigned long long uint2 = number.unsignedLongLongValue; if (uint1 > uint2) return OF_ORDERED_DESCENDING; if (uint1 < uint2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; |
︙ | ︙ | |||
1191 1192 1193 1194 1195 1196 1197 | return 0; d = OF_BSWAP_DOUBLE_IF_BE(self.doubleValue); for (uint_fast8_t i = 0; i < sizeof(double); i++) OF_HASH_ADD(hash, ((char *)&d)[i]); } else if (type == OF_NUMBER_TYPE_SIGNED) { | | | | | | | | | | 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 | return 0; d = OF_BSWAP_DOUBLE_IF_BE(self.doubleValue); for (uint_fast8_t i = 0; i < sizeof(double); i++) OF_HASH_ADD(hash, ((char *)&d)[i]); } else if (type == OF_NUMBER_TYPE_SIGNED) { long long value = self.longLongValue * -1; while (value != 0) { OF_HASH_ADD(hash, value & 0xFF); value >>= 8; } OF_HASH_ADD(hash, 1); } else if (type == OF_NUMBER_TYPE_UNSIGNED) { unsigned long long value = self.unsignedLongLongValue; while (value != 0) { OF_HASH_ADD(hash, value & 0xFF); value >>= 8; } } else @throw [OFInvalidFormatException exception]; OF_HASH_FINALIZE(hash); return hash; |
︙ | ︙ | |||
1231 1232 1233 1234 1235 1236 1237 | - (OFString *)stringValue { if (*_typeEncoding == 'B') return (_value.unsigned_ ? @"true" : @"false"); if (_type == OF_NUMBER_TYPE_FLOAT) return [OFString stringWithFormat: @"%g", _value.float_]; if (_type == OF_NUMBER_TYPE_SIGNED) | | | | 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 | - (OFString *)stringValue { if (*_typeEncoding == 'B') return (_value.unsigned_ ? @"true" : @"false"); if (_type == OF_NUMBER_TYPE_FLOAT) return [OFString stringWithFormat: @"%g", _value.float_]; if (_type == OF_NUMBER_TYPE_SIGNED) return [OFString stringWithFormat: @"%lld", _value.signed_]; if (_type == OF_NUMBER_TYPE_UNSIGNED) return [OFString stringWithFormat: @"%llu", _value.unsigned_]; @throw [OFInvalidFormatException exception]; } - (OFXMLElement *)XMLElementBySerializing { void *pool = objc_autoreleasePoolPush(); |
︙ | ︙ | |||
1337 1338 1339 1340 1341 1342 1343 | data = [OFMutableData dataWithItemSize: 1 capacity: 9]; [data addItem: &type]; [data addItems: &tmp count: sizeof(tmp)]; } else if (_type == OF_NUMBER_TYPE_SIGNED) { | | | 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 | data = [OFMutableData dataWithItemSize: 1 capacity: 9]; [data addItem: &type]; [data addItems: &tmp count: sizeof(tmp)]; } else if (_type == OF_NUMBER_TYPE_SIGNED) { long long value = self.longLongValue; if (value >= -32 && value < 0) { uint8_t tmp = 0xE0 | ((uint8_t)(value - 32) & 0x1F); data = [OFMutableData dataWithItems: &tmp count: 1]; } else if (value >= INT8_MIN && value <= INT8_MAX) { |
︙ | ︙ | |||
1386 1387 1388 1389 1390 1391 1392 | [data addItem: &type]; [data addItems: &tmp count: sizeof(tmp)]; } else @throw [OFOutOfRangeException exception]; } else if (_type == OF_NUMBER_TYPE_UNSIGNED) { | | | 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 | [data addItem: &type]; [data addItems: &tmp count: sizeof(tmp)]; } else @throw [OFOutOfRangeException exception]; } else if (_type == OF_NUMBER_TYPE_UNSIGNED) { unsigned long long value = self.unsignedLongLongValue; if (value <= 127) { uint8_t tmp = ((uint8_t)value & 0x7F); data = [OFMutableData dataWithItems: &tmp count: 1]; } else if (value <= UINT8_MAX) { |
︙ | ︙ |
Modified src/OFString.h from [0749f31524] to [9976ca688e].
︙ | ︙ | |||
174 175 176 177 178 179 180 | * @brief The decimal value of the string as a `long long`. * * Leading and trailing whitespaces are ignored. * * If the string contains any non-number characters, an * @ref OFInvalidFormatException is thrown. * | | | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | * @brief The decimal value of the string as a `long long`. * * Leading and trailing whitespaces are ignored. * * If the string contains any non-number characters, an * @ref OFInvalidFormatException is thrown. * * If the number is too big to fit into a `long long`, an * @ref OFOutOfRangeException is thrown. */ @property (readonly, nonatomic) long long longLongValue; /*! * @brief The decimal value of the string as an `unsigned long long`. * |
︙ | ︙ | |||
1016 1017 1018 1019 1020 1021 1022 | * @brief The value of the string in the specified base as a `long long`. * * Leading and trailing whitespaces are ignored. * * If the string contains any non-number characters, an * @ref OFInvalidFormatException is thrown. * | | | 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 | * @brief The value of the string in the specified base as a `long long`. * * Leading and trailing whitespaces are ignored. * * If the string contains any non-number characters, an * @ref OFInvalidFormatException is thrown. * * If the number is too big to fit into a `long long`, an * @ref OFOutOfRangeException is thrown. * * @param base The base to use. If the base is 0, base 16 is assumed if the * string starts with 0x (after stripping white spaces). If the * string starts with 0, base 8 is assumed. Otherwise, base 10 is * assumed. * @return The value of the string in the specified base |
︙ | ︙ |
Modified src/OFString.m from [d974e2e6b6] to [a680f97b80].
︙ | ︙ | |||
987 988 989 990 991 992 993 | encoding: OF_STRING_ENCODING_UTF_8]; } - (instancetype)initWithContentsOfFile: (OFString *)path encoding: (of_string_encoding_t)encoding { char *tmp; | | | | 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 | encoding: OF_STRING_ENCODING_UTF_8]; } - (instancetype)initWithContentsOfFile: (OFString *)path encoding: (of_string_encoding_t)encoding { char *tmp; unsigned long long fileSize; @try { void *pool = objc_autoreleasePoolPush(); OFFile *file = nil; @try { fileSize = [[OFFileManager defaultManager] attributesOfItemAtPath: path].fileSize; } @catch (OFRetrieveItemAttributesFailedException *e) { @throw [OFOpenItemFailedException exceptionWithPath: path mode: @"r" errNo: e.errNo]; } objc_autoreleasePoolPop(pool); # if ULLONG_MAX > SIZE_MAX if (fileSize > SIZE_MAX) @throw [OFOutOfRangeException exception]; #endif /* * We need one extra byte for the terminating zero if we want * to use -[initWithUTF8StringNoCopy:length:freeWhenDone:]. |
︙ | ︙ |
Modified src/OFTarArchiveEntry.m from [66844c18ae] to [91482cd774].
︙ | ︙ | |||
103 104 105 106 107 108 109 | _GID = (uint32_t)octalValueFromBuffer( header + 116, 8, UINT32_MAX); _size = (uint64_t)octalValueFromBuffer( header + 124, 12, UINT64_MAX); _modificationDate = [[OFDate alloc] initWithTimeIntervalSince1970: (of_time_interval_t)octalValueFromBuffer( | | | 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | _GID = (uint32_t)octalValueFromBuffer( header + 116, 8, UINT32_MAX); _size = (uint64_t)octalValueFromBuffer( header + 124, 12, UINT64_MAX); _modificationDate = [[OFDate alloc] initWithTimeIntervalSince1970: (of_time_interval_t)octalValueFromBuffer( header + 136, 12, ULLONG_MAX)]; _type = header[156]; targetFileName = stringFromBuffer(header + 157, 100, encoding); if (targetFileName.length > 0) _targetFileName = [targetFileName copy]; if (_type == '\0') |
︙ | ︙ |
Modified tests/OFASN1DERValueTests.m from [668efc201f] to [97c3e5f307].
︙ | ︙ | |||
52 53 54 55 56 57 58 | EXPECT_EXCEPTION(@"Detection of truncated boolean", OFTruncatedDataException, [[OFData dataWithItems: "\x01\x01" count: 2] ASN1DERValue]) /* Integer */ TEST(@"Parsing of integer", [[[OFData dataWithItems: "\x02\x00" | | | | | | > | | > | | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | EXPECT_EXCEPTION(@"Detection of truncated boolean", OFTruncatedDataException, [[OFData dataWithItems: "\x01\x01" count: 2] ASN1DERValue]) /* Integer */ TEST(@"Parsing of integer", [[[OFData dataWithItems: "\x02\x00" count: 2] ASN1DERValue] longLongValue] == 0 && [[[OFData dataWithItems: "\x02\x01\x01" count: 3] ASN1DERValue] longLongValue] == 1 && [[[OFData dataWithItems: "\x02\x02\x01\x04" count: 4] ASN1DERValue] longLongValue] == 260 && [[[OFData dataWithItems: "\x02\x01\xFF" count: 3] ASN1DERValue] longLongValue] == -1 && [[[OFData dataWithItems: "\x02\x03\xFF\x00\x00" count: 5] ASN1DERValue] longLongValue] == -65536 && (unsigned long long)[[[OFData dataWithItems: "\x02\x09\x00\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF" "\xFF" count: 11] ASN1DERValue] longLongValue] == ULLONG_MAX) EXPECT_EXCEPTION(@"Detection of invalid integer #1", OFInvalidFormatException, [[OFData dataWithItems: "\x02\x02\x00\x00" count: 4] ASN1DERValue]) EXPECT_EXCEPTION(@"Detection of invalid integer #2", OFInvalidFormatException, [[OFData dataWithItems: "\x02\x02\x00\x7F" |
︙ | ︙ | |||
174 175 176 177 178 179 180 | count: 3] ASN1DERValue]) /* Object Identifier */ TEST(@"Parsing of Object Identifier", (array = [[[OFData dataWithItems: "\x06\x01\x27" count: 3] ASN1DERValue] subidentifiers]) && array.count == 2 && | | | | | | | | | | | | | | | 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 | count: 3] ASN1DERValue]) /* Object Identifier */ TEST(@"Parsing of Object Identifier", (array = [[[OFData dataWithItems: "\x06\x01\x27" count: 3] ASN1DERValue] subidentifiers]) && array.count == 2 && [[array objectAtIndex: 0] unsignedLongLongValue] == 0 && [[array objectAtIndex: 1] unsignedLongLongValue] == 39 && (array = [[[OFData dataWithItems: "\x06\x01\x4F" count: 3] ASN1DERValue] subidentifiers]) && array.count == 2 && [[array objectAtIndex: 0] unsignedLongLongValue] == 1 && [[array objectAtIndex: 1] unsignedLongLongValue] == 39 && (array = [[[OFData dataWithItems: "\x06\x02\x88\x37" count: 4] ASN1DERValue] subidentifiers]) && array.count == 2 && [[array objectAtIndex: 0] unsignedLongLongValue] == 2 && [[array objectAtIndex: 1] unsignedLongLongValue] == 999 && (array = [[[OFData dataWithItems: "\x06\x09\x2A\x86\x48\x86\xF7\x0D" "\x01\x01\x0B" count: 11] ASN1DERValue] subidentifiers]) && array.count == 7 && [[array objectAtIndex: 0] unsignedLongLongValue] == 1 && [[array objectAtIndex: 1] unsignedLongLongValue] == 2 && [[array objectAtIndex: 2] unsignedLongLongValue] == 840 && [[array objectAtIndex: 3] unsignedLongLongValue] == 113549 && [[array objectAtIndex: 4] unsignedLongLongValue] == 1 && [[array objectAtIndex: 5] unsignedLongLongValue] == 1 && [[array objectAtIndex: 6] unsignedLongLongValue] == 11) EXPECT_EXCEPTION(@"Detection of invalid Object Identifier #1", OFInvalidFormatException, [[OFData dataWithItems: "\x06\x01\x81" count: 3] ASN1DERValue]) EXPECT_EXCEPTION(@"Detection of invalid Object Identifier #2", OFInvalidFormatException, [[OFData dataWithItems: "\x06\x02\x80\x01" |
︙ | ︙ | |||
219 220 221 222 223 224 225 | EXPECT_EXCEPTION(@"Detection of truncated Object Identifier", OFTruncatedDataException, [[OFData dataWithItems: "\x06\x02\x00" count: 3] ASN1DERValue]) /* Enumerated */ TEST(@"Parsing of enumerated", [[[OFData dataWithItems: "\x0A\x00" | | | | | | > | | > | | | 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | EXPECT_EXCEPTION(@"Detection of truncated Object Identifier", OFTruncatedDataException, [[OFData dataWithItems: "\x06\x02\x00" count: 3] ASN1DERValue]) /* Enumerated */ TEST(@"Parsing of enumerated", [[[OFData dataWithItems: "\x0A\x00" count: 2] ASN1DERValue] longLongValue] == 0 && [[[OFData dataWithItems: "\x0A\x01\x01" count: 3] ASN1DERValue] longLongValue] == 1 && [[[OFData dataWithItems: "\x0A\x02\x01\x04" count: 4] ASN1DERValue] longLongValue] == 260 && [[[OFData dataWithItems: "\x0A\x01\xFF" count: 3] ASN1DERValue] longLongValue] == -1 && [[[OFData dataWithItems: "\x0A\x03\xFF\x00\x00" count: 5] ASN1DERValue] longLongValue] == -65536 && (unsigned long long)[[[OFData dataWithItems: "\x0A\x09\x00\xFF\xFF" "\xFF\xFF\xFF\xFF\xFF" "\xFF" count: 11] ASN1DERValue] longLongValue] == ULLONG_MAX) EXPECT_EXCEPTION(@"Detection of invalid enumerated #1", OFInvalidFormatException, [[OFData dataWithItems: "\x0A\x02\x00\x00" count: 4] ASN1DERValue]) EXPECT_EXCEPTION(@"Detection of invalid enumerated #2", OFInvalidFormatException, [[OFData dataWithItems: "\x0A\x02\x00\x7F" |
︙ | ︙ | |||
303 304 305 306 307 308 309 | TEST(@"Parsing of sequence", (array = [[OFData dataWithItems: "\x30\x00" count: 2] ASN1DERValue]) && [array isKindOfClass: [OFArray class]] && array.count == 0 && (array = [[OFData dataWithItems: "\x30\x09\x02\x01\x7B\x0C\x04Test" count: 11] ASN1DERValue]) && [array isKindOfClass: [OFArray class]] && array.count == 2 && | | | | 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | TEST(@"Parsing of sequence", (array = [[OFData dataWithItems: "\x30\x00" count: 2] ASN1DERValue]) && [array isKindOfClass: [OFArray class]] && array.count == 0 && (array = [[OFData dataWithItems: "\x30\x09\x02\x01\x7B\x0C\x04Test" count: 11] ASN1DERValue]) && [array isKindOfClass: [OFArray class]] && array.count == 2 && [[array objectAtIndex: 0] longLongValue] == 123 && [[[array objectAtIndex: 1] stringValue] isEqual: @"Test"]) EXPECT_EXCEPTION(@"Detection of truncated sequence #1", OFTruncatedDataException, [[OFData dataWithItems: "\x30\x01" count: 2] ASN1DERValue]) EXPECT_EXCEPTION(@"Detection of truncated sequence #2", OFTruncatedDataException, [[OFData dataWithItems: "\x30\x04\x02\x01\x01\x00\x00" count: 7] ASN1DERValue]) /* Set */ TEST(@"Parsing of set", (set = [[OFData dataWithItems: "\x31\x00" count: 2] ASN1DERValue]) && [set isKindOfClass: [OFSet class]] && set.count == 0 && (set = [[OFData dataWithItems: "\x31\x09\x02\x01\x7B\x0C\x04Test" count: 11] ASN1DERValue]) && [set isKindOfClass: [OFSet class]] && set.count == 2 && (enumerator = [set objectEnumerator]) && [[enumerator nextObject] longLongValue] == 123 && [[[enumerator nextObject] stringValue] isEqual: @"Test"]) EXPECT_EXCEPTION(@"Detection of invalid set", OFInvalidFormatException, [[OFData dataWithItems: "\x31\x06\x02\x01\x02\x02\x01\x01" count: 8] ASN1DERValue]) |
︙ | ︙ |
Modified tests/OFNumberTests.m from [dde130d271] to [05bc33864e].
︙ | ︙ | |||
23 24 25 26 27 28 29 | @implementation TestsAppDelegate (OFNumberTests) - (void)numberTests { void *pool = objc_autoreleasePoolPush(); OFNumber *num; | | | | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | @implementation TestsAppDelegate (OFNumberTests) - (void)numberTests { void *pool = objc_autoreleasePoolPush(); OFNumber *num; TEST(@"+[numberWithLongLong:]", (num = [OFNumber numberWithLongLong: 123456789])) TEST(@"-[isEqual:]", [num isEqual: [OFNumber numberWithUInt32: 123456789]]) TEST(@"-[hash]", num.hash == 0x82D8BC42) TEST(@"-[charValue]", num.charValue == 21) TEST(@"-[doubleValue]", num.doubleValue == 123456789.L) objc_autoreleasePoolPop(pool); } @end |
Modified utils/ofarc/LHAArchive.m from [b717d78c4a] to [c25e61eb57].
︙ | ︙ | |||
485 486 487 488 489 490 491 | if ([type isEqual: of_file_type_directory]) entry.compressionMethod = @"-lhd-"; output = [_archive streamForWritingEntry: entry]; if ([type isEqual: of_file_type_regular]) { | > | | 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 | if ([type isEqual: of_file_type_directory]) entry.compressionMethod = @"-lhd-"; output = [_archive streamForWritingEntry: entry]; if ([type isEqual: of_file_type_regular]) { unsigned long long written = 0; unsigned long long size = attributes.fileSize; int8_t percent = -1, newPercent; OFFile *input = [OFFile fileWithPath: fileName mode: @"r"]; while (!input.atEndOfStream) { ssize_t length = [app |
︙ | ︙ |
Modified utils/ofarc/ZIPArchive.m from [251b5d4973] to [b0e2928e0d].
︙ | ︙ | |||
417 418 419 420 421 422 423 | for (OFString *localFileName in files) { void *pool = objc_autoreleasePoolPush(); OFArray OF_GENERIC (OFString *) *components; OFString *fileName; of_file_attributes_t attributes; bool isDirectory = false; OFMutableZIPArchiveEntry *entry; | | | 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 | for (OFString *localFileName in files) { void *pool = objc_autoreleasePoolPush(); OFArray OF_GENERIC (OFString *) *components; OFString *fileName; of_file_attributes_t attributes; bool isDirectory = false; OFMutableZIPArchiveEntry *entry; unsigned long long size; OFStream *output; components = localFileName.pathComponents; fileName = [components componentsJoinedByString: @"/"]; attributes = [fileManager attributesOfItemAtPath: localFileName]; |
︙ | ︙ | |||
454 455 456 457 458 459 460 | entry.modificationDate = attributes.fileModificationDate; [entry makeImmutable]; output = [_archive streamForWritingEntry: entry]; if (!isDirectory) { | | | 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 | entry.modificationDate = attributes.fileModificationDate; [entry makeImmutable]; output = [_archive streamForWritingEntry: entry]; if (!isDirectory) { unsigned long long written = 0; int8_t percent = -1, newPercent; OFFile *input = [OFFile fileWithPath: fileName mode: @"r"]; while (!input.atEndOfStream) { ssize_t length = [app |
︙ | ︙ |
Modified utils/ofhttp/OFHTTP.m from [e499272015] to [636026cd3b].
︙ | ︙ | |||
330 331 332 333 334 335 336 | if ([path isEqual: @"-"]) _body = [of_stdin copy]; else { _body = [[OFFile alloc] initWithPath: path mode: @"r"]; @try { | > | | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | if ([path isEqual: @"-"]) _body = [of_stdin copy]; else { _body = [[OFFile alloc] initWithPath: path mode: @"r"]; @try { unsigned long long fileSize = [[OFFileManager defaultManager] attributesOfItemAtPath: path].fileSize; contentLength = [OFString stringWithFormat: @"%ju", fileSize]; [_clientHeaders setObject: contentLength forKey: @"Content-Length"]; } @catch (OFRetrieveItemAttributesFailedException *e) { |
︙ | ︙ | |||
1006 1007 1008 1009 1010 1011 1012 | _currentFileName = [_outputPath copy]; if (_currentFileName == nil) _currentFileName = [URL.path.lastPathComponent copy]; if (_continue) { @try { | > | | 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 | _currentFileName = [_outputPath copy]; if (_currentFileName == nil) _currentFileName = [URL.path.lastPathComponent copy]; if (_continue) { @try { unsigned long long size = [[OFFileManager defaultManager] attributesOfItemAtPath: _currentFileName].fileSize; OFString *range; if (size > ULLONG_MAX) @throw [OFOutOfRangeException exception]; _resumedFrom = (unsigned long long)size; |
︙ | ︙ |
Modified utils/ofhttp/ProgressBar.h from [a9cb283e4e] to [187685081a].
︙ | ︙ | |||
20 21 22 23 24 25 26 | @class OFDate; @class OFTimer; #define BPS_WINDOW_SIZE 10 @interface ProgressBar: OFObject { | | | | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | @class OFDate; @class OFTimer; #define BPS_WINDOW_SIZE 10 @interface ProgressBar: OFObject { unsigned long long _received, _lastReceived, _length, _resumedFrom; OFDate *_startDate, *_lastReceivedDate; OFTimer *_drawTimer, *_BPSTimer; bool _stopped; float _BPS; double _ETA; float _BPSWindow[BPS_WINDOW_SIZE]; size_t _BPSWindowIndex, _BPSWindowLength; } - (instancetype)initWithLength: (unsigned long long)length resumedFrom: (unsigned long long)resumedFrom; - (void)setReceived: (unsigned long long)received; - (void)draw; - (void)calculateBPSAndETA; - (void)stop; @end |
Modified utils/ofhttp/ProgressBar.m from [530e773cf6] to [ab819ab9fe].
︙ | ︙ | |||
29 30 31 32 33 34 35 | #define GIBIBYTE (1024 * 1024 * 1024) #define MEBIBYTE (1024 * 1024) #define KIBIBYTE (1024) #define UPDATE_INTERVAL 0.1 @implementation ProgressBar | | | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #define GIBIBYTE (1024 * 1024 * 1024) #define MEBIBYTE (1024 * 1024) #define KIBIBYTE (1024) #define UPDATE_INTERVAL 0.1 @implementation ProgressBar - (instancetype)initWithLength: (unsigned long long)length resumedFrom: (unsigned long long)resumedFrom { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); _length = length; |
︙ | ︙ | |||
74 75 76 77 78 79 80 | [_lastReceivedDate release]; [_drawTimer release]; [_BPSTimer release]; [super dealloc]; } | | | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | [_lastReceivedDate release]; [_drawTimer release]; [_BPSTimer release]; [super dealloc]; } - (void)setReceived: (unsigned long long)received { _received = received; } - (void)_drawProgress { float bars, percent; |
︙ | ︙ |