All pastes #27137 Raw Edit

Untitled

public text v1 · immutable
#27137 ·published 2005-10-31 16:27 UTC
rendered paste body
/* Set the environmnent required by the SWT Browser widget to bind to Mozilla.
 * The SWT Browser widget relies on Mozilla on Linux. The LD_LIBRARY_PATH
 * and the Mozilla environment variable MOZILLA_FIVE_HOME must point
 * to the installation directory of Mozilla.
 *
 * 1. Use the location set by MOZILLA_FIVE_HOME if it is defined
 * 2. Parse the file /etc/gre.conf if it is defined. This file is
 *    set by the RedtHat RPM manager.
 */
#ifdef MOZILLA_FIX
void fixEnvForMozilla() {
    static int fixed = 0;
    if (fixed) return;
    {
        char *ldPath = (char*)getenv("LD_LIBRARY_PATH");
        char *mozillaFiveHome = (char*)getenv("MOZILLA_FIVE_HOME");
        char *grePath = NULL; /* Gecko Runtime Environment Location */
        char *XPCOM_LIB = "libxpcom.so";
        fixed = 1;
        /* Always dup the string so we can free later */
        if (ldPath != NULL) ldPath = strdup(ldPath);
        else ldPath = strdup("");

        /* MOZILLA_FIVE_HOME (if defined) points to the Mozilla
         * install directory. Don't look any further if it is set.
         */
        if (mozillaFiveHome != NULL)
        {
            grePath = strdup(mozillaFiveHome);
        }

        /* The file gre.conf (if available) points to the
         * Mozilla install directory. Don't look any further if
         * it is set.
         */
        if (grePath == NULL)
        {
            struct stat buf;
            FILE *file = NULL;
#if defined(__amd64__) || defined(__x86_64__)
            if (stat("/etc/gre64.conf", &buf) == 0)
            {
                file = fopen("/etc/gre64.conf", "r");
            }
            else if (stat("/etc/gre.d/gre64.conf", &buf) == 0)
            {
                file = fopen("/etc/gre.d/gre64.conf", "r");
            } else
#endif
            if (stat("/etc/gre.conf", &buf) == 0)
            {
                file = fopen("/etc/gre.conf", "r");
            }
            else if (stat("/etc/gre.d/gre.conf", &buf) == 0)
            {
                file = fopen("/etc/gre.d/gre.conf", "r");
            }
            if (file != NULL)
            {
                char buffer[1024];
                char path[1024];
                while (fgets(buffer, 1024, file) != NULL)
                {
                    if (sscanf(buffer, "GRE_PATH=%s", path) == 1)
                    {
                        grePath = strdup(path);
                        break;
                    }
                }
                fclose(file);
            }
        }

        if (grePath != NULL)
        {
            ldPath = (char*)realloc(ldPath, strlen(ldPath) + strlen(grePath) + 2);
            if (strlen(ldPath) > 0) strcat(ldPath, ":");
            strcat(ldPath, grePath);
            setenv("LD_LIBRARY_PATH", ldPath, 1);

            if (mozillaFiveHome == NULL) setenv("MOZILLA_FIVE_HOME", grePath, 1);
            free(grePath);
        }
        free(ldPath);
    }
}
#endif /* MOZILLA_FIX */