EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Server Code Submissions (https://www.eqemulator.org/forums/forumdisplay.php?f=669)
-   -   FreeBSD compile fix (https://www.eqemulator.org/forums/showthread.php?t=28133)

erde 05-07-2009 03:38 AM

FreeBSD compile fix
 
Tested with Freebsd 7.0.1 i386 and OS X

Code:

Index: common/Mutex.cpp
===================================================================
--- common/Mutex.cpp        (Revision 473)
+++ common/Mutex.cpp        (Arbeitskopie)
@@ -74,7 +74,7 @@
 #else
        pthread_mutexattr_t attr;
        pthread_mutexattr_init(&attr);
-#if defined(__CYGWIN__) || defined(__APPLE__)
+#if defined(__CYGWIN__) || defined(__APPLE__) || defined(FREEBSD)
        pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
 #else
        pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
Index: zone/client.cpp
===================================================================
--- zone/client.cpp        (Revision 473)
+++ zone/client.cpp        (Arbeitskopie)
@@ -40,7 +40,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include "../common/unix.h"
-#define abs64 abs
+#define abs64 labs
 #endif
 
 extern volatile bool RunLoops;


erde 10-02-2009 02:18 PM

Hi

tested this patch with FreeBSD-7.2 still works fine and is needed ;)

amraist 10-14-2009 01:43 PM

I've been running on my server on FreeBSD 7.2(amd64&i386) for a few months now thanks to your autobuild script, and yes this patch is required to compile. However it will not run without an additional fix. The fix is below. The problem is that when it tries load the shared memory stuff, there is a undefined reference, which returns an error. If I remember correctly, the reference is to 'nss_cache_cycle_prevention_func', or something similar. I don't understand the details of where this error is originating, or why, so I wasn't able to fix this properly. This patch simply skips checking for errors,
so I wouldn't recommend it. And for some reason the emu code checks for an error, but does not log it, which made tracking this down fun. Maybe someone else can shed some light on how to write a proper fix.


Code:

--- common/SharedLibrary.cpp  2009-09-01 18:00:13.000000000 +0000
+++ common/SharedLibrary.cpp.new      2009-09-01 18:08:17.000000000 +0000
@@ -83,10 +83,10 @@
                return(NULL);
     
        void *r = GetProcAddress(hDLL, name);
-
+#ifndef FREEBSD
        if(GetError() != NULL)
                r = NULL;
-
+#endif
        return(r);
 }


amraist 10-19-2009 12:19 PM

Actually my first patch is ok, but this is probably a better one.
Code:

@@ -83,10 +83,10 @@
                return(NULL);

        void *r = GetProcAddress(hDLL, name);
-
-      if(GetError() != NULL)
-              r = NULL;
-
+      if ( r == NULL ) {
+              const char *load_error = GetError();
+              fprintf(stderr, "[Error] Shared Library GetSym: '%s' failed.  Error=%s\n", name, load_error?load_error:"Null Return, no error");
+      }
        return(r);
 }



All times are GMT -4. The time now is 10:32 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.