firebird/firebird-2.1.4-gcc-4.7.patch

432 lines
14 KiB
Diff

Index: Firebird-2.1.4.18393-0/src/common/classes/array.h
===================================================================
--- Firebird-2.1.4.18393-0.orig/src/common/classes/array.h
+++ Firebird-2.1.4.18393-0/src/common/classes/array.h
@@ -347,7 +347,7 @@ public:
size_t add(const Value& item) {
size_t pos;
find(KeyOfValue::generate(this, item), pos);
- insert(pos, item);
+ this->insert(pos, item);
return pos;
}
};
Index: Firebird-2.1.4.18393-0/src/common/classes/stack.h
===================================================================
--- Firebird-2.1.4.18393-0.orig/src/common/classes/stack.h
+++ Firebird-2.1.4.18393-0/src/common/classes/stack.h
@@ -48,7 +48,7 @@ namespace Firebird {
Entry(Object e, Entry* stk)
: inherited(), next(stk)
{
- add(e);
+ this->add(e);
}
Entry(Entry* stk) : inherited(), next(stk) { }
@@ -62,7 +62,7 @@ namespace Firebird {
{
if (inherited::getCount() < this->getCapacity())
{
- add(e);
+ this->add(e);
return this;
}
Entry* newEntry = FB_NEW(p) Entry(e, this);
Index: Firebird-2.1.4.18393-0/src/common/classes/vector.h
===================================================================
--- Firebird-2.1.4.18393-0.orig/src/common/classes/vector.h
+++ Firebird-2.1.4.18393-0/src/common/classes/vector.h
@@ -135,7 +135,7 @@ public:
size_t add(const Value& item) {
size_t pos;
find(KeyOfValue::generate(this, item), pos);
- insert(pos, item);
+ this->insert(pos, item);
return pos;
}
};
Index: Firebird-2.1.4.18393-0/src/jrd/Collation.cpp
===================================================================
--- Firebird-2.1.4.18393-0.orig/src/jrd/Collation.cpp
+++ Firebird-2.1.4.18393-0/src/jrd/Collation.cpp
@@ -191,157 +191,55 @@ bool MATCHESNAME(Jrd::thread_db* tdbb, J
template <class SLEUTHTYPE>
-bool SLEUTHNAME(Jrd::thread_db* tdbb_dummy, Jrd::TextType* obj, USHORT flags,
- const SLEUTHTYPE* search, SLONG search_len,
- const SLEUTHTYPE* match, SLONG match_len)
-{
-/**************************************
- *
- * E V L _ ? ? _ s l e u t h _ c h e c k
- *
- **************************************
- *
- * Functional description
- * Evaluate the "sleuth" search operator.
- *
- * Turn the (pointer, byte length) input parameters into
- * (pointer, end_pointer) for use in SLEUTH_AUX
- *
- **************************************/
- fb_assert((match_len % sizeof(SLEUTHTYPE)) == 0);
- fb_assert((search_len % sizeof(SLEUTHTYPE)) == 0);
- fb_assert(obj->getCanonicalWidth() == sizeof(SLEUTHTYPE));
-
- const SLEUTHTYPE* const end_match = match + (match_len / sizeof(SLEUTHTYPE));
- const SLEUTHTYPE* const end_search = search + (search_len / sizeof(SLEUTHTYPE));
-
- return SLEUTH_AUX(obj, flags, search, end_search, match, end_match);
-}
-
-
-template <class SLEUTHTYPE>
-ULONG SLEUTH_MERGE_NAME(Jrd::thread_db* tdbb_dummy, Jrd::TextType* obj,
- const SLEUTHTYPE* match, SLONG match_bytes,
- const SLEUTHTYPE* control, SLONG control_bytes,
- SLEUTHTYPE* combined, SLONG combined_bytes)
+static bool SLEUTH_CLASS_NAME(
+ Jrd::TextType* obj,
+ USHORT flags,
+ const SLEUTHTYPE* char_class,
+ const SLEUTHTYPE* const end_class,
+ SLEUTHTYPE character)
{
/**************************************
*
- * E V L _ ? ? _ s l e u t h _ m e r g e
+ * s l e u t h _ c l a s s
*
**************************************
*
* Functional description
- * Merge the matching pattern and control strings to give a cannonical
- * matching pattern. Return the length of the combined string.
- *
- * What this routine does is to take the language template, strip off
- * the prefix and put it in the output string, then parse the definitions
- * into an array of character pointers. The index array is the defined
- * character. The routine then takes the actual match pattern and uses
- * the characters in it to index into the definitions to produce an equivalent
- * pattern in the cannonical language.
- *
- * The silly loop setting *v++ to zero initializes the array up to the
- * highest character defined (also max_op). Believe it or not, that part
- * is not a bug.
+ * See if a character is a member of a class.
+ * Japanese version operates on short-based buffer,
+ * instead of SCHAR-based.
*
**************************************/
- fb_assert(match != NULL);
- fb_assert(control != NULL);
- fb_assert(combined != NULL);
-
- fb_assert((match_bytes % sizeof(SLEUTHTYPE)) == 0);
- fb_assert((control_bytes % sizeof(SLEUTHTYPE)) == 0);
+ fb_assert(char_class != NULL);
+ fb_assert(end_class != NULL);
+ fb_assert(char_class <= end_class);
fb_assert(obj->getCanonicalWidth() == sizeof(SLEUTHTYPE));
- const SLEUTHTYPE* const end_match = match + (match_bytes / sizeof(SLEUTHTYPE));
- const SLEUTHTYPE* const end_control = control + (control_bytes / sizeof(SLEUTHTYPE));
-
- SLEUTHTYPE max_op = 0;
- SLEUTHTYPE* comb = combined;
- SLEUTHTYPE* vector[256];
- SLEUTHTYPE** v = vector;
- SLEUTHTYPE temp[256];
- SLEUTHTYPE* t = temp;
-
-/* Parse control string into substitution strings and initializing string */
+ bool result = true;
- while (control < end_control) {
- SLEUTHTYPE c = *control++;
- if (*control == *(SLEUTHTYPE*)obj->getGdmlSubstituteCanonic()) {
- /* Note: don't allow substitution characters larger than vector */
- SLEUTHTYPE** const end_vector =
- vector + (((int)c < FB_NELEM(vector)) ? c : 0);
- while (v <= end_vector)
- *v++ = 0;
- *end_vector = t;
- ++control;
- while (control < end_control) {
- c = *control++;
- if ((t > temp && t[-1] == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic())
- || ((c != *(SLEUTHTYPE*)obj->getGdmlCommaCanonic()) && (c != *(SLEUTHTYPE*)obj->getGdmlRParenCanonic())))
- {
- *t++ = c;
- }
- else
- break;
- }
- *t++ = 0;
- }
- else if (c == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic() && control < end_control)
- *comb++ = *control++;
- else if (c == *(SLEUTHTYPE*)obj->getGdmlRParenCanonic())
- break;
- else if (c != *(SLEUTHTYPE*)obj->getGdmlLParenCanonic())
- *comb++ = c;
+ if (*char_class == *(SLEUTHTYPE*)obj->getGdmlNotCanonic()) {
+ ++char_class;
+ result = false;
}
- max_op = v - vector;
-
-/* Interpret matching string, substituting where appropriate */
-
- while (match < end_match) {
- const SLEUTHTYPE c = *match++;
-
- /* if we've got a defined character, slurp the definition */
-
- SLEUTHTYPE* p;
- if (c <= max_op && (p = vector[c])) {
- while (*p)
- *comb++ = *p++;
-
- /* if we've got the definition of a quote character,
- slurp the next character too */
-
- if (comb > combined && comb[-1] == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic() && *match)
- *comb++ = *match++;
+ while (char_class < end_class) {
+ const SLEUTHTYPE c = *char_class++;
+ if (c == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic()) {
+ if (*char_class++ == character)
+ return true;
}
-
- /* at this point we've got a non-match, but as it might be one of ours,
- quote it. */
-
- else {
- if ((((size_t) c) < FB_NELEM(special)) && special[c] &&
- comb > combined && comb[-1] != *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic())
- {
- *comb++ = *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic();
- }
- *comb++ = c;
+ else if (*char_class == *(SLEUTHTYPE*)obj->getGdmlRangeCanonic()) {
+ char_class += 2;
+ if (character >= c && character <= char_class[-1])
+ return result;
}
+ else if (character == c)
+ return result;
}
-/* Put in trailing stuff */
-
- while (control < end_control)
- *comb++ = *control++;
-
- /* YYY - need to add code watching for overflow of combined */
-
- return (comb - combined) * sizeof(SLEUTHTYPE);
+ return !result;
}
-
template <class SLEUTHTYPE>
static bool SLEUTH_AUX(
Jrd::TextType* obj,
@@ -472,57 +370,163 @@ static bool SLEUTH_AUX(
}
+
template <class SLEUTHTYPE>
-static bool SLEUTH_CLASS_NAME(
- Jrd::TextType* obj,
- USHORT flags,
- const SLEUTHTYPE* char_class,
- const SLEUTHTYPE* const end_class,
- SLEUTHTYPE character)
+bool SLEUTHNAME(Jrd::thread_db* tdbb_dummy, Jrd::TextType* obj, USHORT flags,
+ const SLEUTHTYPE* search, SLONG search_len,
+ const SLEUTHTYPE* match, SLONG match_len)
{
/**************************************
*
- * s l e u t h _ c l a s s
+ * E V L _ ? ? _ s l e u t h _ c h e c k
*
**************************************
*
* Functional description
- * See if a character is a member of a class.
- * Japanese version operates on short-based buffer,
- * instead of SCHAR-based.
+ * Evaluate the "sleuth" search operator.
+ *
+ * Turn the (pointer, byte length) input parameters into
+ * (pointer, end_pointer) for use in SLEUTH_AUX
*
**************************************/
- fb_assert(char_class != NULL);
- fb_assert(end_class != NULL);
- fb_assert(char_class <= end_class);
+ fb_assert((match_len % sizeof(SLEUTHTYPE)) == 0);
+ fb_assert((search_len % sizeof(SLEUTHTYPE)) == 0);
fb_assert(obj->getCanonicalWidth() == sizeof(SLEUTHTYPE));
- bool result = true;
+ const SLEUTHTYPE* const end_match = match + (match_len / sizeof(SLEUTHTYPE));
+ const SLEUTHTYPE* const end_search = search + (search_len / sizeof(SLEUTHTYPE));
- if (*char_class == *(SLEUTHTYPE*)obj->getGdmlNotCanonic()) {
- ++char_class;
- result = false;
+ return SLEUTH_AUX(obj, flags, search, end_search, match, end_match);
+}
+
+
+template <class SLEUTHTYPE>
+ULONG SLEUTH_MERGE_NAME(Jrd::thread_db* tdbb_dummy, Jrd::TextType* obj,
+ const SLEUTHTYPE* match, SLONG match_bytes,
+ const SLEUTHTYPE* control, SLONG control_bytes,
+ SLEUTHTYPE* combined, SLONG combined_bytes)
+{
+/**************************************
+ *
+ * E V L _ ? ? _ s l e u t h _ m e r g e
+ *
+ **************************************
+ *
+ * Functional description
+ * Merge the matching pattern and control strings to give a cannonical
+ * matching pattern. Return the length of the combined string.
+ *
+ * What this routine does is to take the language template, strip off
+ * the prefix and put it in the output string, then parse the definitions
+ * into an array of character pointers. The index array is the defined
+ * character. The routine then takes the actual match pattern and uses
+ * the characters in it to index into the definitions to produce an equivalent
+ * pattern in the cannonical language.
+ *
+ * The silly loop setting *v++ to zero initializes the array up to the
+ * highest character defined (also max_op). Believe it or not, that part
+ * is not a bug.
+ *
+ **************************************/
+ fb_assert(match != NULL);
+ fb_assert(control != NULL);
+ fb_assert(combined != NULL);
+
+ fb_assert((match_bytes % sizeof(SLEUTHTYPE)) == 0);
+ fb_assert((control_bytes % sizeof(SLEUTHTYPE)) == 0);
+ fb_assert(obj->getCanonicalWidth() == sizeof(SLEUTHTYPE));
+
+ const SLEUTHTYPE* const end_match = match + (match_bytes / sizeof(SLEUTHTYPE));
+ const SLEUTHTYPE* const end_control = control + (control_bytes / sizeof(SLEUTHTYPE));
+
+ SLEUTHTYPE max_op = 0;
+ SLEUTHTYPE* comb = combined;
+ SLEUTHTYPE* vector[256];
+ SLEUTHTYPE** v = vector;
+ SLEUTHTYPE temp[256];
+ SLEUTHTYPE* t = temp;
+
+/* Parse control string into substitution strings and initializing string */
+
+ while (control < end_control) {
+ SLEUTHTYPE c = *control++;
+ if (*control == *(SLEUTHTYPE*)obj->getGdmlSubstituteCanonic()) {
+ /* Note: don't allow substitution characters larger than vector */
+ SLEUTHTYPE** const end_vector =
+ vector + (((int)c < FB_NELEM(vector)) ? c : 0);
+ while (v <= end_vector)
+ *v++ = 0;
+ *end_vector = t;
+ ++control;
+ while (control < end_control) {
+ c = *control++;
+ if ((t > temp && t[-1] == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic())
+ || ((c != *(SLEUTHTYPE*)obj->getGdmlCommaCanonic()) && (c != *(SLEUTHTYPE*)obj->getGdmlRParenCanonic())))
+ {
+ *t++ = c;
+ }
+ else
+ break;
+ }
+ *t++ = 0;
+ }
+ else if (c == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic() && control < end_control)
+ *comb++ = *control++;
+ else if (c == *(SLEUTHTYPE*)obj->getGdmlRParenCanonic())
+ break;
+ else if (c != *(SLEUTHTYPE*)obj->getGdmlLParenCanonic())
+ *comb++ = c;
}
- while (char_class < end_class) {
- const SLEUTHTYPE c = *char_class++;
- if (c == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic()) {
- if (*char_class++ == character)
- return true;
+ max_op = v - vector;
+
+/* Interpret matching string, substituting where appropriate */
+
+ while (match < end_match) {
+ const SLEUTHTYPE c = *match++;
+
+ /* if we've got a defined character, slurp the definition */
+
+ SLEUTHTYPE* p;
+ if (c <= max_op && (p = vector[c])) {
+ while (*p)
+ *comb++ = *p++;
+
+ /* if we've got the definition of a quote character,
+ slurp the next character too */
+
+ if (comb > combined && comb[-1] == *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic() && *match)
+ *comb++ = *match++;
}
- else if (*char_class == *(SLEUTHTYPE*)obj->getGdmlRangeCanonic()) {
- char_class += 2;
- if (character >= c && character <= char_class[-1])
- return result;
+
+ /* at this point we've got a non-match, but as it might be one of ours,
+ quote it. */
+
+ else {
+ if ((((size_t) c) < FB_NELEM(special)) && special[c] &&
+ comb > combined && comb[-1] != *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic())
+ {
+ *comb++ = *(SLEUTHTYPE*)obj->getGdmlQuoteCanonic();
+ }
+ *comb++ = c;
}
- else if (character == c)
- return result;
}
- return !result;
+/* Put in trailing stuff */
+
+ while (control < end_control)
+ *comb++ = *control++;
+
+ /* YYY - need to add code watching for overflow of combined */
+
+ return (comb - combined) * sizeof(SLEUTHTYPE);
}
+
+
+
+
// Below are templates for functions used in Collation implementation
class NullStrConverter {