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

