diff --git a/ChangeLog b/ChangeLog index 495d99ccc..477dc2a8a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,10 @@ 2016-02-29 Richard Frith-Macdonald - * Based on testplant patch, fix bug with ownership when copying - subdirectories. + * Source/NSFileManager.m: Based on testplant patch, fix bug with + ownership when copying subdirectories. + * Source/NSTask.m OSX compatibility tweak .. raise an exception if + the task can't be launched. + * Source/NSNumberFormatter.m: Fixes for symbol indexes. 2016-02-26 Niels Grewe diff --git a/Source/NSDateFormatter.m b/Source/NSDateFormatter.m index d9635afee..e44d4c9f3 100644 --- a/Source/NSDateFormatter.m +++ b/Source/NSDateFormatter.m @@ -63,8 +63,8 @@ @interface NSDateFormatter (PrivateMethods) - (void) _resetUDateFormat; -- (void) _setSymbols: (NSArray *) array : (NSInteger) symbol; -- (NSArray *) _getSymbols: (NSInteger) symbol; +- (void) _setSymbols: (NSArray *)array : (NSInteger)symbol; +- (NSArray *) _getSymbols: (NSInteger)symbol; @end static inline NSInteger @@ -297,7 +297,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return _defaultBehavior; } -+ (void) setDefaultFormatterBehavior: (NSDateFormatterBehavior) behavior ++ (void) setDefaultFormatterBehavior: (NSDateFormatterBehavior)behavior { _defaultBehavior = behavior; } @@ -307,7 +307,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return internal->_behavior; } -- (void) setFormatterBehavior: (NSDateFormatterBehavior) behavior +- (void) setFormatterBehavior: (NSDateFormatterBehavior)behavior { internal->_behavior = behavior; } @@ -317,7 +317,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return NO; // FIXME } -- (void) setGeneratesCalendarDates: (BOOL) flag +- (void) setGeneratesCalendarDates: (BOOL)flag { return; // FIXME } @@ -331,7 +331,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setLenient: (BOOL) flag +- (void) setLenient: (BOOL)flag { #if GS_USE_ICU == 1 udat_setLenient (internal->_formatter, flag); @@ -408,7 +408,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return NO; // FIXME } -- (void) setDateFormat: (NSString *) string +- (void) setDateFormat: (NSString *)string { #if GS_USE_ICU == 1 UChar *pattern; @@ -430,7 +430,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return internal->_dateStyle; } -- (void) setDateStyle: (NSDateFormatterStyle) style +- (void) setDateStyle: (NSDateFormatterStyle)style { internal->_dateStyle = style; [self _resetUDateFormat]; @@ -441,7 +441,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return internal->_timeStyle; } -- (void) setTimeStyle: (NSDateFormatterStyle) style +- (void) setTimeStyle: (NSDateFormatterStyle)style { internal->_timeStyle = style; [self _resetUDateFormat]; @@ -452,7 +452,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return [internal->_locale objectForKey: NSLocaleCalendar]; } -- (void) setCalendar: (NSCalendar *) calendar +- (void) setCalendar: (NSCalendar *)calendar { NSMutableDictionary *dict; NSLocale *locale; @@ -474,7 +474,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return nil; // FIXME } -- (void) setDefaultDate: (NSDate *) date +- (void) setDefaultDate: (NSDate *)date { return; // FIXME } @@ -484,7 +484,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return internal->_locale; } -- (void) setLocale: (NSLocale *) locale +- (void) setLocale: (NSLocale *)locale { if (locale == internal->_locale) return; @@ -499,7 +499,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return internal->_tz; } -- (void) setTimeZone: (NSTimeZone *) tz +- (void) setTimeZone: (NSTimeZone *)tz { if (tz == internal->_tz) return; @@ -520,7 +520,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setTwoDigitStartDate: (NSDate *) date +- (void) setTwoDigitStartDate: (NSDate *)date { #if GS_USE_ICU == 1 UErrorCode err = U_ZERO_ERROR; @@ -560,7 +560,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setPMSymbol: (NSString *) string +- (void) setPMSymbol: (NSString *)string { return; } @@ -574,7 +574,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setWeekdaySymbols: (NSArray *) array +- (void) setWeekdaySymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_WEEKDAYS]; @@ -592,10 +592,10 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setShortWeekdaySymbols: (NSArray *) array +- (void) setShortWeekdaySymbols: (NSArray *)array { #if GS_USE_ICU == 1 - [self _getSymbols: UDAT_SHORT_WEEKDAYS]; + [self _setSymbols: array : UDAT_SHORT_WEEKDAYS]; #else return; #endif @@ -610,10 +610,10 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setMonthSymbols: (NSArray *) array +- (void) setMonthSymbols: (NSArray *)array { #if GS_USE_ICU == 1 - [self _getSymbols: UDAT_MONTHS]; + [self _setSymbols: array : UDAT_MONTHS]; #else return; #endif @@ -628,10 +628,10 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setShortMonthSymbols: (NSArray *) array +- (void) setShortMonthSymbols: (NSArray *)array { #if GS_USE_ICU == 1 - [self _getSymbols: UDAT_SHORT_MONTHS]; + [self _setSymbols: array : UDAT_SHORT_MONTHS]; #else return; #endif @@ -646,7 +646,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setEraSymbols: (NSArray *) array +- (void) setEraSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_ERAS]; @@ -660,7 +660,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return nil; } -- (void) setGregorianStartDate: (NSDate *) date +- (void) setGregorianStartDate: (NSDate *)date { return; } @@ -674,7 +674,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setLongEraSymbols: (NSArray *) array +- (void) setLongEraSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_ERA_NAMES]; @@ -693,7 +693,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setQuarterSymbols: (NSArray *) array +- (void) setQuarterSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_QUARTERS]; @@ -711,7 +711,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setShortQuarterSymbols: (NSArray *) array +- (void) setShortQuarterSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_SHORT_QUARTERS]; @@ -729,7 +729,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setStandaloneQuarterSymbols: (NSArray *) array +- (void) setStandaloneQuarterSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_QUARTERS]; @@ -747,7 +747,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setShortStandaloneQuarterSymbols: (NSArray *) array +- (void) setShortStandaloneQuarterSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_SHORT_QUARTERS]; @@ -765,7 +765,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setShortStandaloneMonthSymbols: (NSArray *) array +- (void) setShortStandaloneMonthSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_SHORT_MONTHS]; @@ -783,7 +783,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setStandaloneMonthSymbols: (NSArray *) array +- (void) setStandaloneMonthSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_MONTHS]; @@ -801,7 +801,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setVeryShortMonthSymbols: (NSArray *) array +- (void) setVeryShortMonthSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_NARROW_MONTHS]; @@ -819,7 +819,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setVeryShortStandaloneMonthSymbols: (NSArray *) array +- (void) setVeryShortStandaloneMonthSymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_NARROW_MONTHS]; @@ -837,7 +837,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setShortStandaloneWeekdaySymbols: (NSArray *) array +- (void) setShortStandaloneWeekdaySymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_SHORT_WEEKDAYS]; @@ -855,7 +855,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setStandaloneWeekdaySymbols: (NSArray *) array +- (void) setStandaloneWeekdaySymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_WEEKDAYS]; @@ -873,7 +873,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setVeryShortWeekdaySymbols: (NSArray *) array +- (void) setVeryShortWeekdaySymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_SHORT_WEEKDAYS]; @@ -891,7 +891,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) setVeryShortStandaloneWeekdaySymbols: (NSArray *) array +- (void) setVeryShortStandaloneWeekdaySymbols: (NSArray *)array { #if GS_USE_ICU == 1 [self _setSymbols: array : UDAT_STANDALONE_NARROW_WEEKDAYS]; @@ -955,7 +955,7 @@ static NSDateFormatterBehavior _defaultBehavior = 0; return (internal->_dateStyle & FormatterDoesRelativeDateFormatting) ? YES : NO; } -- (void) setDoesRelativeDateFormatting: (BOOL) flag +- (void) setDoesRelativeDateFormatting: (BOOL)flag { internal->_dateStyle |= FormatterDoesRelativeDateFormatting; } @@ -1006,56 +1006,79 @@ static NSDateFormatterBehavior _defaultBehavior = 0; #endif } -- (void) _setSymbols: (NSArray *) array : (NSInteger) symbol +static inline void +symbolRange(NSInteger symbol, int *from) { -#if GS_USE_ICU == 1 - int idx = 0; - int count = udat_countSymbols (internal->_formatter, symbol); - - if ([array count] != count) - return; - - while (idx < count) + switch (symbol) { - int length; - UChar *value; - UErrorCode err = U_ZERO_ERROR; - NSString *string = [array objectAtIndex: idx]; - - length = [string length]; - value = malloc(sizeof(unichar) * length); - [string getCharacters: value range: NSMakeRange(0, length)]; - udat_setSymbols (internal->_formatter, symbol, idx, value, length, &err); - free(value); - - ++idx; + case UDAT_SHORT_WEEKDAYS: + case UDAT_STANDALONE_NARROW_WEEKDAYS: + case UDAT_STANDALONE_SHORT_WEEKDAYS: + case UDAT_STANDALONE_WEEKDAYS: + case UDAT_WEEKDAYS: + /* In ICU days of the week number from 1 rather than zero. + */ + *from = 1; + break; + + default: + *from = 0; + break; } -#else - return; -#endif } -- (NSArray *) _getSymbols: (NSInteger) symbol +- (void) _setSymbols: (NSArray*)array : (NSInteger)symbol { #if GS_USE_ICU == 1 - NSMutableArray *mArray; - int idx = 0; + int idx; int count = udat_countSymbols (internal->_formatter, symbol); - mArray = [NSMutableArray arrayWithCapacity: count]; + symbolRange(symbol, &idx); + if ([array count] == count - idx) + { + while (idx < count) + { + int length; + UChar *value; + UErrorCode err = U_ZERO_ERROR; + NSString *string = [array objectAtIndex: idx]; + + length = [string length]; + value = malloc(sizeof(unichar) * length); + [string getCharacters: value range: NSMakeRange(0, length)]; + udat_setSymbols(internal->_formatter, symbol, idx, + value, length, &err); + free(value); + ++idx; + } + } +#endif + return; +} + +- (NSArray *) _getSymbols: (NSInteger)symbol +{ +#if GS_USE_ICU == 1 + NSMutableArray *mArray; + int idx; + int count; + + count = udat_countSymbols(internal->_formatter, symbol); + symbolRange(symbol, &idx); + mArray = [NSMutableArray arrayWithCapacity: count - idx]; while (idx < count) { - int length; - unichar *value; - NSString *str; - NSZone *z = [self zone]; - UErrorCode err = U_ERROR_LIMIT; + int length; + unichar *value; + NSString *str; + NSZone *z = [self zone]; + UErrorCode err = U_ERROR_LIMIT; length - = udat_getSymbols (internal->_formatter, symbol, idx, NULL, 0, &err); - value = NSZoneMalloc (z, sizeof(unichar) * (length + 1)); + = udat_getSymbols(internal->_formatter, symbol, idx, NULL, 0, &err); + value = NSZoneMalloc(z, sizeof(unichar) * (length + 1)); err = U_ZERO_ERROR; - udat_getSymbols (internal->_formatter, symbol, idx, value, length, &err); + udat_getSymbols(internal->_formatter, symbol, idx, value, length, &err); if (U_SUCCESS(err)) { str = [[NSString allocWithZone: z] diff --git a/Source/NSTask.m b/Source/NSTask.m index ab73abd9b..c8abdccd0 100644 --- a/Source/NSTask.m +++ b/Source/NSTask.m @@ -1263,10 +1263,10 @@ quotedFromString(NSString *aString) SetHandleInformation(hErr, HANDLE_FLAG_INHERIT, 0); [tasksLock unlock]; - if (result == 0) + if (0 == result) { - NSLog(@"Error launching task: %@ ... %@", lpath, last); - return; + [NSException raise: NSInvalidArgumentException + format: @"NSTask - Error launching task: %@ ... %@", lpath, last]; } _taskId = procInfo.dwProcessId;