My (recently adopted) package kazehakase fails to build on GNU/Hurd:

mozilla.cpp: In function 'gboolean xulrunner_init()':
mozilla.cpp:132: error: 'PATH_MAX' was not declared in this scope
mozilla.cpp:135: error: 'xpcomPath' was not declared in this scope
make[6]: *** [gecko_la-mozilla.lo] Error 1

I prepared a patch, and I kindly ask you to confirm if it is sane.
Thanks in advance!

One more thing...  While looking at the implementation of
GRE_GetGREPathWithProperties, I noticed that the Mozilla guys use
MAXPATHLEN unconditionally.  I looked at xulrunner's .diff.gz and
found this:

--- xulrunner-1.9.0.13.orig/config/rules.mk
+++ xulrunner-1.9.0.13/config/rules.mk
...
@@ -541,6 +544,14 @@
 endif 
 
 #
+# GNU doesn't have path length limitation
+#
+
+ifeq ($(OS_ARCH),GNU)
+OS_CPPFLAGS += -DPATH_MAX=1024 -DMAXPATHLEN=1024
+endif
+
+# 

Is this a proper way to solve the problem?  Maybe it was just a quick
temporary fix as porting xulrunner is probably not trivial?  Anyway,
should I apply my patch or resort to a similar hack given the fact
that xulrunner has hardcoded PATH_MAX?  The latter doesn't look right
to me.

2009-08-20  Yavor Doganov  <[email protected]>

        Avoid PATH_MAX, which is undefined on GNU/Hurd.
        * module/embed/gecko/mozilla.cpp (xulrunner_init): Use a
        geometrically growing loop to allocate memory dynamically.


* local directory is at [email protected]/kazehakase--debian--1.0--patch-52
* comparing to [email protected]/kazehakase--debian--1.0--patch-52
M  module/embed/gecko/mozilla.cpp

* modified files

--- orig/module/embed/gecko/mozilla.cpp
+++ mod/module/embed/gecko/mozilla.cpp
@@ -136,32 +136,53 @@
                "1.9.1", PR_FALSE
        };
 
-       char xpcomPath[PATH_MAX];
+       char *xpcomPath, *lastSlash;
+       gsize allocated = 128;
+       nsresult rv;
+
+       while (1)
+               {
+                       xpcomPath = (char *) g_malloc0(allocated);
+
+                       rv = GRE_GetGREPathWithProperties(&greVersion, 1,
+                                                         nsnull, 0,
+                                                         xpcomPath,
+                                                         allocated);
+
+                       if (strlen(xpcomPath) < allocated - 1)
+                               break;
+
+                       g_free(xpcomPath);
+                       allocated *= 2;
+               }
 
-       nsresult rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0,
-                                                  xpcomPath, 
sizeof(xpcomPath));
        if (NS_FAILED(rv))
-               return FALSE;
+               goto out;
 
        rv = XPCOMGlueStartup(xpcomPath);
        if (NS_FAILED(rv))
-               return FALSE;
+               goto out;
 
        rv = GTKEmbedGlueStartup();
        if (NS_FAILED(rv))
-               return FALSE;
+               goto out;
 
        rv = GTKEmbedGlueStartupInternal();
        if (NS_FAILED(rv))
-               return FALSE;
+               goto out;
 
-       char *lastSlash = strrchr(xpcomPath, '/');
+       lastSlash = strrchr(xpcomPath, '/');
        if (lastSlash)
                *lastSlash = '\0';
 
        gtk_moz_embed_set_path(xpcomPath);
 
+       g_free(xpcomPath);
        return TRUE;
+
+ out:
+       g_free(xpcomPath);
+       return FALSE;
 }
 
 static nsresult



Reply via email to