From fca7c45a62542e0f625122222386cbee9b76243f Mon Sep 17 00:00:00 2001
From: athenian200 <athenian200@outlook.com>
Date: Wed, 2 Oct 2019 18:26:54 -0500
Subject: MoonchildProductions#1251 - Part 16: Resolve namespace conflicts with
 dbm on Solaris.

https://bugzilla.mozilla.org/show_bug.cgi?id=1513913

Mozilla's solution to this is arguably overkill, since the namespace issue on Solaris only required them to change (or temporarily undefine) __log2. Instead they changed ALL the functions to be something along the lines of dbm_log2. They haven't changed the external interface at all, though.

If you're unhappy with this patch, I think I could also use XP_SOLARIS ifdefs to undefine __log2 prior to where it's declared in the dbm headers. The good thing about Mozilla's solution is that it guarantees this namespace issue never occurs again on any platform, though.
---
 security/nss/lib/dbm/src/db.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

(limited to 'security/nss/lib/dbm/src/db.c')

diff --git a/security/nss/lib/dbm/src/db.c b/security/nss/lib/dbm/src/db.c
index 5c35bbd48..4b5810760 100644
--- a/security/nss/lib/dbm/src/db.c
+++ b/security/nss/lib/dbm/src/db.c
@@ -92,16 +92,16 @@ dbopen(const char *fname, int flags, int mode, DBTYPE type, const void *openinfo
 /* we don't need btree and recno right now */
 #if 0
             case DB_BTREE:
-                return (__bt_open(fname, flags & USE_OPEN_FLAGS,
+                return (dbm_bt_open(fname, flags & USE_OPEN_FLAGS,
                     mode, openinfo, flags & DB_FLAGS));
             case DB_RECNO:
-                return (__rec_open(fname, flags & USE_OPEN_FLAGS,
+                return (dbm_rec_open(fname, flags & USE_OPEN_FLAGS,
                     mode, openinfo, flags & DB_FLAGS));
 #endif
 
             case DB_HASH:
-                return (__hash_open(fname, flags & USE_OPEN_FLAGS,
-                                    mode, (const HASHINFO *)openinfo, flags & DB_FLAGS));
+                return (dbm_hash_open(fname, flags & USE_OPEN_FLAGS,
+                                      mode, (const HASHINFO *)openinfo, flags & DB_FLAGS));
             default:
                 break;
         }
@@ -110,7 +110,7 @@ dbopen(const char *fname, int flags, int mode, DBTYPE type, const void *openinfo
 }
 
 static int
-__dberr()
+dbm_dberr()
 {
     return (RET_ERROR);
 }
@@ -122,13 +122,14 @@ __dberr()
  *  dbp:    pointer to the DB structure.
  */
 void
-__dbpanic(DB *dbp)
+dbm_dbpanic(DB *dbp)
 {
     /* The only thing that can succeed is a close. */
-    dbp->del = (int (*)(const struct __db *, const DBT *, uint))__dberr;
-    dbp->fd = (int (*)(const struct __db *))__dberr;
-    dbp->get = (int (*)(const struct __db *, const DBT *, DBT *, uint))__dberr;
-    dbp->put = (int (*)(const struct __db *, DBT *, const DBT *, uint))__dberr;
-    dbp->seq = (int (*)(const struct __db *, DBT *, DBT *, uint))__dberr;
-    dbp->sync = (int (*)(const struct __db *, uint))__dberr;
+    dbp->del = (int (*)(const struct dbm_db *, const DBT *, uint))dbm_dberr;
+    dbp->fd = (int (*)(const struct dbm_db *))dbm_dberr;
+    dbp->get = (int (*)(const struct dbm_db *, const DBT *, DBT *, uint))dbm_dberr;
+    dbp->put = (int (*)(const struct dbm_db *, DBT *, const DBT *, uint))dbm_dberr;
+    dbp->seq = (int (*)(const struct dbm_db *, DBT *, DBT *, uint))dbm_dberr;
+    dbp->sync = (int (*)(const struct dbm_db *, uint))dbm_dberr;
+
 }
-- 
cgit v1.2.3