qsort_tmpl_strcmp-patch

application/octet-stream

Filename: qsort_tmpl_strcmp-patch
Type: application/octet-stream
Part: 0
Message: Re: A qsort template
diff --git a/src/backend/tsearch/ts_utils.c b/src/backend/tsearch/ts_utils.c
index ed16a2e25a..920fbaafc4 100644
--- a/src/backend/tsearch/ts_utils.c
+++ b/src/backend/tsearch/ts_utils.c
@@ -134,7 +134,16 @@ readstoplist(const char *fname, StopList *s, char *(*wordop) (const char *))

        /* Sort to allow binary searching */
        if (s->stop && s->len > 0)
-               qsort(s->stop, s->len, sizeof(char *), pg_qsort_strcmp);
+               qsort_strcmp(s->stop, s->len, sizeof(char *));
+}
+
+/*
+ * qsort comparator wrapper for strcmp.
+ */
+static int
+strcmp_cmp(const void *a, const void *b)
+{
+       return strcmp(*(const char *const *) a, *(const char *const *) b);
 }

 bool
@@ -142,5 +151,5 @@ searchstoplist(StopList *s, char *key)
 {
        return (s->stop && s->len > 0 &&
                        bsearch(&key, s->stop, s->len,
-                                       sizeof(char *), pg_qsort_strcmp)) ? true : false;
+                                       sizeof(char *), strcmp_cmp)) ? true : false;
 }
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index 7885a169bb..7f0719b64c 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -1072,7 +1072,7 @@ ParseConfigDirectory(const char *includedir,
        {
                int                     i;

-               qsort(filenames, num_filenames, sizeof(char *), pg_qsort_strcmp);
+               qsort_strcmp(filenames, num_filenames, sizeof(char *));
                for (i = 0; i < num_filenames; i++)
                {
                        if (!ParseConfigFile(filenames[i], true,
diff --git a/src/include/port.h b/src/include/port.h
index 6486db9fdd..441f0c485d 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -496,9 +496,10 @@ extern int pqGethostbyname(const char *name,
                                                        struct hostent **result,
                                                        int *herrno);

+/* port/qsort.c */
 extern void pg_qsort(void *base, size_t nel, size_t elsize,
                                         int (*cmp) (const void *, const void *));
-extern int     pg_qsort_strcmp(const void *a, const void *b);
+extern void qsort_strcmp(void *base, size_t nel, size_t elsize);

 #define qsort(a,b,c,d) pg_qsort(a,b,c,d)

diff --git a/src/port/qsort.c b/src/port/qsort.c
index 7879e6cd56..ca30df5bc6 100644
--- a/src/port/qsort.c
+++ b/src/port/qsort.c
@@ -12,11 +12,11 @@
 #define ST_DEFINE
 #include "lib/sort_template.h"

-/*
- * qsort comparator wrapper for strcmp.
- */
-int
-pg_qsort_strcmp(const void *a, const void *b)
-{
-       return strcmp(*(const char *const *) a, *(const char *const *) b);
-}
+#define ST_SORT qsort_strcmp
+#define ST_ELEMENT_TYPE_VOID
+#define ST_COMPARE(a, b) \
+       strcmp(*(const char *const *) (a), *(const char *const *) (b))
+#define ST_SCOPE extern
+#define ST_DECLARE
+#define ST_DEFINE
+#include "lib/sort_template.h"