diff -ruN icu/source/common/messagepattern.cpp icu-haiku/source/common/messagepattern.cpp --- icu/source/common/messagepattern.cpp 2011-07-19 23:16:28.046137344 +0200 +++ icu-haiku/source/common/messagepattern.cpp 2011-08-19 15:48:48.211025920 +0200 @@ -88,8 +88,12 @@ int32_t length, UErrorCode &errorCode); UBool ensureCapacityForOneMore(int32_t oldLength, UErrorCode &errorCode); - UBool memEquals(const MessagePatternList &other, int32_t length) const { - return 0==uprv_memcmp(a.getAlias(), other.a.getAlias(), length*sizeof(T)); + UBool equals(const MessagePatternList &other, int32_t length) const { + for (int32_t i=0; i a; @@ -309,7 +313,7 @@ msg==other.msg && // parts.equals(o.parts) partsLength==other.partsLength && - (partsLength==0 || partsList->memEquals(*other.partsList, partsLength)); + (partsLength==0 || partsList->equals(*other.partsList, partsLength)); // No need to compare numericValues if msg and parts are the same. } diff -ruN icu/source/common/normalizer2.cpp icu-haiku/source/common/normalizer2.cpp --- icu/source/common/normalizer2.cpp 2011-07-19 23:16:24.008912896 +0200 +++ icu-haiku/source/common/normalizer2.cpp 2011-08-19 15:46:55.276824064 +0200 @@ -239,7 +239,7 @@ ReorderingBuffer &buffer, UErrorCode &errorCode) const { impl.decompose(src, limit, &buffer, errorCode); } - using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. +// using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. virtual void normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, UnicodeString &safeMiddle, @@ -250,7 +250,7 @@ spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const { return impl.decompose(src, limit, NULL, errorCode); } - using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. +// using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const { return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO; } @@ -270,7 +270,7 @@ ReorderingBuffer &buffer, UErrorCode &errorCode) const { impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode); } - using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. +// using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. virtual void normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, UnicodeString &safeMiddle, @@ -313,7 +313,7 @@ spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const { return impl.composeQuickCheck(src, limit, onlyContiguous, NULL); } - using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. +// using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const { return impl.getCompQuickCheck(impl.getNorm16(c)); } @@ -340,7 +340,7 @@ ReorderingBuffer &buffer, UErrorCode &errorCode) const { impl.makeFCD(src, limit, &buffer, errorCode); } - using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. +// using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. virtual void normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, UnicodeString &safeMiddle, @@ -351,7 +351,7 @@ spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const { return impl.makeFCD(src, limit, NULL, errorCode); } - using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. +// using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasFCDBoundaryBefore(c); } virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasFCDBoundaryAfter(c); } virtual UBool isInert(UChar32 c) const { return impl.isFCDInert(c); } diff -ruN icu/source/common/unicode/bytestrie.h icu-haiku/source/common/unicode/bytestrie.h --- icu/source/common/unicode/bytestrie.h 2011-07-19 23:16:16.052953088 +0200 +++ icu-haiku/source/common/unicode/bytestrie.h 2011-08-19 15:46:55.331874304 +0200 @@ -338,6 +338,9 @@ // but the code looks more confusing that way.) UVector32 *stack_; }; +#if (__GNUC__ == 2) + friend class Iterator; +#endif private: friend class BytesTrieBuilder; diff -ruN icu/source/common/unicode/bytestriebuilder.h icu-haiku/source/common/unicode/bytestriebuilder.h --- icu/source/common/unicode/bytestriebuilder.h 2011-07-19 23:16:16.053477376 +0200 +++ icu-haiku/source/common/unicode/bytestriebuilder.h 2011-08-19 15:46:55.333185024 +0200 @@ -141,6 +141,9 @@ private: const char *s; }; +#if (__GNUC__ == 2) + friend class BTLinearMatchNode; +#endif virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length, Node *nextNode) const; diff -ruN icu/source/common/unicode/platform.h.in icu-haiku/source/common/unicode/platform.h.in --- icu/source/common/unicode/platform.h.in 2011-07-19 23:16:18.055574528 +0200 +++ icu-haiku/source/common/unicode/platform.h.in 2011-08-19 15:46:55.346554368 +0200 @@ -299,7 +299,7 @@ #ifdef U_STATIC_IMPLEMENTATION #define U_EXPORT -#elif @U_USE_GCC_VISIBILITY_ATTRIBUTE@ +#elif (@U_USE_GCC_VISIBILITY_ATTRIBUTE@) && (__GNUC__ > 2) #define U_EXPORT __attribute__((visibility("default"))) #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) diff -ruN icu/source/common/unicode/stringtriebuilder.h icu-haiku/source/common/unicode/stringtriebuilder.h --- icu/source/common/unicode/stringtriebuilder.h 2011-07-19 23:16:18.056623104 +0200 +++ icu-haiku/source/common/unicode/stringtriebuilder.h 2011-08-19 15:46:55.336068608 +0200 @@ -245,6 +245,9 @@ protected: int32_t value; }; +#if (__GNUC__ == 2) + friend class FinalValueNode; +#endif /** @internal */ class ValueNode : public Node { @@ -272,6 +275,9 @@ protected: Node *next; }; +#if (__GNUC__ == 2) + friend class IntermediateValueNode; +#endif /** @internal */ class LinearMatchNode : public ValueNode { @@ -323,6 +329,9 @@ int32_t values[kMaxBranchLinearSubNodeLength]; UChar units[kMaxBranchLinearSubNodeLength]; }; +#if (__GNUC__ == 2) + friend class ListBranchNode; +#endif /** @internal */ class SplitBranchNode : public BranchNode { @@ -339,6 +348,9 @@ Node *lessThan; Node *greaterOrEqual; }; +#if (__GNUC__ == 2) + friend class SplitBranchNode; +#endif // Branch head node, for writing the actual node lead unit. /** @internal */ @@ -354,6 +366,9 @@ int32_t length; Node *next; // A branch sub-node. }; +#if (__GNUC__ == 2) + friend class BranchHeadNode; +#endif /** @internal */ virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length, diff -ruN icu/source/common/unicode/ucharstrie.h icu-haiku/source/common/unicode/ucharstrie.h --- icu/source/common/unicode/ucharstrie.h 2011-07-19 23:16:18.058720256 +0200 +++ icu-haiku/source/common/unicode/ucharstrie.h 2011-08-19 15:46:55.338165760 +0200 @@ -368,6 +368,9 @@ // but the code looks more confusing that way.) UVector32 *stack_; }; +#if (__GNUC__ == 2) + friend class Iterator; +#endif private: friend class UCharsTrieBuilder; diff -ruN icu/source/common/unicode/ucharstriebuilder.h icu-haiku/source/common/unicode/ucharstriebuilder.h --- icu/source/common/unicode/ucharstriebuilder.h 2011-07-19 23:16:18.059244544 +0200 +++ icu-haiku/source/common/unicode/ucharstriebuilder.h 2011-08-19 15:46:55.339738624 +0200 @@ -145,6 +145,9 @@ private: const UChar *s; }; +#if (__GNUC__ == 2) + friend class UCTLinearMatchNode; +#endif virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length, Node *nextNode) const; diff -ruN icu/source/config/mh-haiku icu-haiku/source/config/mh-haiku --- icu/source/config/mh-haiku 2011-07-19 23:16:46.026214400 +0200 +++ icu-haiku/source/config/mh-haiku 2011-08-19 15:46:55.328990720 +0200 @@ -17,6 +17,9 @@ LIBCPPFLAGS = THREADSCPPFLAGS = +# +CPPFLAGS += -D__STDC_ISO_10646__ -DU_CHARSET_IS_UTF8=1 + ## Compiler switch to embed a runtime search path LD_RPATH= LD_RPATH_PRE = -Wl,-rpath, @@ -31,35 +34,35 @@ ## Compilation rules %.$(STATIC_O): $(srcdir)/%.c - $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $< + $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $< %.o: $(srcdir)/%.c - $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< + $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< %.$(STATIC_O): $(srcdir)/%.cpp - $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< + $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< %.o: $(srcdir)/%.cpp - $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< + $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< ## Dependency rules %.d: $(srcdir)/%.c - @echo "generating dependency information for $<" - @$(SHELL) -ec '$(GEN_DEPS.c) $< \ - | sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \ - [ -s $@ ] || rm -f $@' + @echo "generating dependency information for $<" + @$(SHELL) -ec '$(GEN_DEPS.c) $< \ + | sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \ + [ -s $@ ] || rm -f $@' %.d: $(srcdir)/%.cpp - @echo "generating dependency information for $<" - @$(SHELL) -ec '$(GEN_DEPS.cc) $< \ - | sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \ - [ -s $@ ] || rm -f $@' + @echo "generating dependency information for $<" + @$(SHELL) -ec '$(GEN_DEPS.cc) $< \ + | sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \ + [ -s $@ ] || rm -f $@' ## Versioned libraries rules %.$(SO).$(SO_TARGET_VERSION_MAJOR): %.$(SO).$(SO_TARGET_VERSION) - $(RM) $@ && ln -s ${(preferenceSorting.elementAt(psIndex)); + UnicodeString item = *static_cast(preferenceSorting.elementAt(psIndex)); // TODO: Since preferenceSorting was originally populated from the contents of a UnicodeSet, // is it even possible for duplicates to show up in this check? if (labelSet.contains(item)) { @@ -240,7 +240,7 @@ int32_t count = 0; int32_t old = -1; for (int32_t srcIndex=0; srcIndexsize(); srcIndex++) { - const UnicodeString *str = static_cast(labels_->elementAt(srcIndex)); + const UnicodeString *str = static_cast(labels_->elementAt(srcIndex)); ++count; const int32_t bump = count * maxLabelCount_ / size; if (bump == old) { @@ -528,7 +528,7 @@ const UnicodeString &AlphabeticIndex::getOverflowComparisonString(const UnicodeString &lowerLimit, UErrorCode &/*status*/) { for (int32_t i=0; isize(); i++) { const UnicodeString *s = - static_cast(firstScriptCharacters_->elementAt(i)); + const_cast(static_cast(firstScriptCharacters_->elementAt(i))); if (collator_->compare(*s, lowerLimit) > 0) { return *s; } @@ -735,8 +735,10 @@ sortCollateComparator(const void *context, const void *left, const void *right) { const UHashTok *leftTok = static_cast(left); const UHashTok *rightTok = static_cast(right); - const UnicodeString *leftString = static_cast(leftTok->pointer); - const UnicodeString *rightString = static_cast(rightTok->pointer); + const UnicodeString *leftString + = const_cast(static_cast(leftTok->pointer)); + const UnicodeString *rightString + = const_cast(static_cast(rightTok->pointer)); const Collator *col = static_cast(context); if (leftString == rightString) { @@ -760,8 +762,10 @@ recordCompareFn(const void *context, const void *left, const void *right) { const UHashTok *leftTok = static_cast(left); const UHashTok *rightTok = static_cast(right); - const AlphabeticIndex::Record *leftRec = static_cast(leftTok->pointer); - const AlphabeticIndex::Record *rightRec = static_cast(rightTok->pointer); + const AlphabeticIndex::Record *leftRec + = const_cast(static_cast(leftTok->pointer)); + const AlphabeticIndex::Record *rightRec + = const_cast(static_cast(rightTok->pointer)); const Collator *col = static_cast(context); Collator::EComparisonResult r = col->compare(leftRec->sortingName_, rightRec->sortingName_); @@ -1087,8 +1091,8 @@ PreferenceComparator(const void *context, const void *left, const void *right) { const UHashTok *leftTok = static_cast(left); const UHashTok *rightTok = static_cast(right); - const UnicodeString *s1 = static_cast(leftTok->pointer); - const UnicodeString *s2 = static_cast(rightTok->pointer); + const UnicodeString *s1 = const_cast(static_cast(leftTok->pointer)); + const UnicodeString *s2 = const_cast(static_cast(rightTok->pointer)); UErrorCode &status = *(UErrorCode *)(context); // Cast off both static and const. if (s1 == s2) { return 0; diff -ruN icu/source/i18n/currfmt.h icu-haiku/source/i18n/currfmt.h --- icu/source/i18n/currfmt.h 2011-07-19 23:16:00.058720256 +0200 +++ icu-haiku/source/i18n/currfmt.h 2011-08-19 15:46:55.293339136 +0200 @@ -63,7 +63,9 @@ virtual Format* clone() const; +#if (__GNUC__ > 2) using MeasureFormat::format; +#endif /** * Override Format API. diff -ruN icu/source/i18n/digitlst.cpp icu-haiku/source/i18n/digitlst.cpp --- icu/source/i18n/digitlst.cpp 2011-07-19 23:16:00.050593792 +0200 +++ icu-haiku/source/i18n/digitlst.cpp 2011-08-19 15:46:55.295698432 +0200 @@ -37,7 +37,9 @@ #include #include #include +#if (__GNUC__ > 2) #include +#endif // *************************************************************************** // class DigitList @@ -423,11 +425,15 @@ nonConstThis->fDouble /= -1; } } else if (isInfinite()) { +#if (__GNUC__ > 2) if (std::numeric_limits::has_infinity) { nonConstThis->fDouble = std::numeric_limits::infinity(); } else { nonConstThis->fDouble = std::numeric_limits::max(); } +#else + nonConstThis->fDouble = DBL_MAX; +#endif if (!isPositive()) { nonConstThis->fDouble = -fDouble; } diff -ruN icu/source/i18n/reldtfmt.h icu-haiku/source/i18n/reldtfmt.h --- icu/source/i18n/reldtfmt.h 2011-07-19 23:16:06.034078720 +0200 +++ icu-haiku/source/i18n/reldtfmt.h 2011-08-19 15:46:55.297533440 +0200 @@ -79,7 +79,9 @@ virtual UBool operator==(const Format& other) const; +#if (__GNUC__ > 2) using DateFormat::format; +#endif /** * Format a date or time, which is the standard millis since 24:00 GMT, Jan diff -ruN icu/source/i18n/unicode/alphaindex.h icu-haiku/source/i18n/unicode/alphaindex.h --- icu/source/i18n/unicode/alphaindex.h 2011-07-19 23:15:52.042467328 +0200 +++ icu-haiku/source/i18n/unicode/alphaindex.h 2011-08-19 15:46:55.344719360 +0200 @@ -588,6 +588,9 @@ Record(AlphabeticIndex *alphaIndex, const UnicodeString &name, const void *data); ~Record(); }; +#if (__GNUC__ == 2) + friend struct Record; +#endif /** * Holds all user records before they are distributed into buckets. diff -ruN icu/source/i18n/unicode/choicfmt.h icu-haiku/source/i18n/unicode/choicfmt.h --- icu/source/i18n/unicode/choicfmt.h 2011-07-19 23:15:52.038797312 +0200 +++ icu-haiku/source/i18n/unicode/choicfmt.h 2011-08-19 15:46:55.300154880 +0200 @@ -352,7 +352,9 @@ virtual const UnicodeString* getFormats(int32_t& count) const; +#if (__GNUC__ > 2) using NumberFormat::format; +#endif /** * Formats a double number using this object's choices. diff -ruN icu/source/i18n/unicode/datefmt.h icu-haiku/source/i18n/unicode/datefmt.h --- icu/source/i18n/unicode/datefmt.h 2011-07-19 23:15:52.035389440 +0200 +++ icu-haiku/source/i18n/unicode/datefmt.h 2011-08-19 15:46:55.302514176 +0200 @@ -212,7 +212,9 @@ virtual UBool operator==(const Format&) const; +#if (__GNUC__ > 2) using Format::format; +#endif /** * Format an object to produce a string. This method handles Formattable diff -ruN icu/source/i18n/unicode/decimfmt.h icu-haiku/source/i18n/unicode/decimfmt.h --- icu/source/i18n/unicode/decimfmt.h 2011-07-19 23:15:54.040370176 +0200 +++ icu-haiku/source/i18n/unicode/decimfmt.h 2011-08-19 15:46:55.305397760 +0200 @@ -834,7 +834,16 @@ virtual UBool operator==(const Format& other) const; +#if (__GNUC__ > 2) using NumberFormat::format; +#else + virtual UnicodeString& format(const Formattable& obj, + UnicodeString& appendTo, + FieldPositionIterator* posIter, + UErrorCode& status) const { + return NumberFormat::format(obj, appendTo, posIter, status); + } +#endif /** * Format a double or long number using base-10 representation. diff -ruN icu/source/i18n/unicode/dtitvfmt.h icu-haiku/source/i18n/unicode/dtitvfmt.h --- icu/source/i18n/unicode/dtitvfmt.h 2011-07-19 23:15:54.042467328 +0200 +++ icu-haiku/source/i18n/unicode/dtitvfmt.h 2011-08-19 15:46:55.307757056 +0200 @@ -363,7 +363,9 @@ UBool operator!=(const Format& other) const; +#if (__GNUC__ > 2) using Format::format; +#endif /** * Format an object to produce a string. This method handles Formattable diff -ruN icu/source/i18n/unicode/msgfmt.h icu-haiku/source/i18n/unicode/msgfmt.h --- icu/source/i18n/unicode/msgfmt.h 2011-07-19 23:15:54.041156608 +0200 +++ icu-haiku/source/i18n/unicode/msgfmt.h 2011-08-19 15:46:55.310116352 +0200 @@ -615,7 +615,9 @@ virtual const Format** getFormats(int32_t& count) const; +#if (__GNUC__ > 2) using Format::format; +#endif /** * Formats the given array of arguments into a user-readable string. diff -ruN icu/source/i18n/unicode/numfmt.h icu-haiku/source/i18n/unicode/numfmt.h --- icu/source/i18n/unicode/numfmt.h 2011-07-19 23:15:54.039059456 +0200 +++ icu-haiku/source/i18n/unicode/numfmt.h 2011-08-19 15:46:55.312213504 +0200 @@ -212,8 +212,9 @@ */ virtual UBool operator==(const Format& other) const; - +#if (__GNUC__ > 2) using Format::format; +#endif /** * Format an object to produce a string. This method handles diff -ruN icu/source/i18n/unicode/plurfmt.h icu-haiku/source/i18n/unicode/plurfmt.h --- icu/source/i18n/unicode/plurfmt.h 2011-07-19 23:15:52.044040192 +0200 +++ icu-haiku/source/i18n/unicode/plurfmt.h 2011-08-19 15:46:55.314310656 +0200 @@ -281,7 +281,9 @@ void applyPattern(const UnicodeString& pattern, UErrorCode& status); +#if (__GNUC__ > 2) using Format::format; +#endif /** * Formats a plural message for a given number. diff -ruN icu/source/i18n/unicode/rbnf.h icu-haiku/source/i18n/unicode/rbnf.h --- icu/source/i18n/unicode/rbnf.h 2011-07-19 23:15:54.034340864 +0200 +++ icu-haiku/source/i18n/unicode/rbnf.h 2011-08-19 15:46:55.316932096 +0200 @@ -722,7 +722,9 @@ const Locale& locale = Locale::getDefault()); +#if (__GNUC__ > 2) using NumberFormat::format; +#endif /** * Formats the specified 32-bit number using the default ruleset. diff -ruN icu/source/i18n/unicode/selfmt.h icu-haiku/source/i18n/unicode/selfmt.h --- icu/source/i18n/unicode/selfmt.h 2011-07-19 23:15:52.042991616 +0200 +++ icu-haiku/source/i18n/unicode/selfmt.h 2011-08-19 15:46:55.318767104 +0200 @@ -219,7 +219,9 @@ void applyPattern(const UnicodeString& pattern, UErrorCode& status); +#if (__GNUC__ > 2) using Format::format; +#endif /** * Selects the phrase for the given keyword diff -ruN icu/source/i18n/unicode/smpdtfmt.h icu-haiku/source/i18n/unicode/smpdtfmt.h --- icu/source/i18n/unicode/smpdtfmt.h 2011-07-19 23:15:52.035127296 +0200 +++ icu-haiku/source/i18n/unicode/smpdtfmt.h 2011-08-19 15:46:55.321126400 +0200 @@ -369,7 +369,9 @@ virtual UBool operator==(const Format& other) const; +#if (__GNUC__ > 2) using DateFormat::format; +#endif /** * Format a date or time, which is the standard millis since 24:00 GMT, Jan diff -ruN icu/source/i18n/unicode/tmutfmt.h icu-haiku/source/i18n/unicode/tmutfmt.h --- icu/source/i18n/unicode/tmutfmt.h 2011-07-19 23:15:54.039583744 +0200 +++ icu-haiku/source/i18n/unicode/tmutfmt.h 2011-08-19 15:46:55.322961408 +0200 @@ -162,7 +162,16 @@ void setNumberFormat(const NumberFormat& format, UErrorCode& status); +#if (__GNUC__ > 2) using MeasureFormat::format; +#else + virtual UnicodeString& format(const Formattable& obj, + UnicodeString& appendTo, + FieldPositionIterator* posIter, + UErrorCode& status) const { + return MeasureFormat::format(obj, appendTo, posIter, status); + } +#endif /** * Format a TimeUnitAmount. diff -ruN icu/source/tools/pkgdata/pkgdata.cpp icu-haiku/source/tools/pkgdata/pkgdata.cpp --- icu/source/tools/pkgdata/pkgdata.cpp 2011-07-19 23:16:36.003670016 +0200 +++ icu-haiku/source/tools/pkgdata/pkgdata.cpp 2011-08-19 15:46:55.326107136 +0200 @@ -476,7 +476,7 @@ static int runCommand(const char* command, UBool specialHandling) { char *cmd = NULL; - char cmdBuffer[SMALL_BUFFER_MAX_SIZE]; + char cmdBuffer[64000]; int32_t len = strlen(command); if (len == 0) {