cinap_lenrekadd hg and python4bb9e2215 years agoHistory
694 lines · 20.2 KB · C
RawDownload
    }#endif /* HAVE_READLINK */     reduce(argv0_path);    /* At this point, argv0_path is guaranteed to be less than       MAXPATHLEN bytes long.    */     if (!(pfound = search_for_prefix(argv0_path, home))) {        if (!Py_FrozenFlag)            fprintf(stderr,                "Could not find platform independent libraries <prefix>\n");        strncpy(prefix, PREFIX, MAXPATHLEN);        joinpath(prefix, lib_python);    }    else        reduce(prefix);     strncpy(zip_path, prefix, MAXPATHLEN);    zip_path[MAXPATHLEN] = '\0';    if (pfound > 0) { /* Use the reduced prefix returned by Py_GetPrefix() */        reduce(zip_path);        reduce(zip_path);    }    else        strncpy(zip_path, PREFIX, MAXPATHLEN);    joinpath(zip_path, "lib/python00.zip");    bufsz = strlen(zip_path);	/* Replace "00" with version */    zip_path[bufsz - 6] = VERSION[0];    zip_path[bufsz - 5] = VERSION[2];     if (!(efound = search_for_exec_prefix(argv0_path, home))) {        if (!Py_FrozenFlag)            fprintf(stderr,                "Could not find platform dependent libraries <exec_prefix>\n");        strncpy(exec_prefix, EXEC_PREFIX, MAXPATHLEN);        joinpath(exec_prefix, "lib/lib-dynload");    }    /* If we found EXEC_PREFIX do *not* reduce it!  (Yet.) */     if ((!pfound || !efound) && !Py_FrozenFlag)        fprintf(stderr,                "Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]\n");     /* Calculate size of return buffer.     */    bufsz = 0;     if (rtpypath)        bufsz += strlen(rtpypath) + 1;     prefixsz = strlen(prefix) + 1;     while (1) {        char *delim = strchr(defpath, DELIM);         if (defpath[0] != SEP)            /* Paths are relative to prefix */            bufsz += prefixsz;         if (delim)            bufsz += delim - defpath + 1;        else {            bufsz += strlen(defpath) + 1;            break;        }        defpath = delim + 1;    }     bufsz += strlen(zip_path) + 1;    bufsz += strlen(exec_prefix) + 1;     /* This is the only malloc call in this file */    buf = (char *)PyMem_Malloc(bufsz);     if (buf == NULL) {        /* We can't exit, so print a warning and limp along */        fprintf(stderr, "Not enough memory for dynamic PYTHONPATH.\n");        fprintf(stderr, "Using default static PYTHONPATH.\n");        module_search_path = PYTHONPATH;    }    else {        /* Run-time value of $PYTHONPATH goes first */        if (rtpypath) {            strcpy(buf, rtpypath);            strcat(buf, delimiter);        }        else            buf[0] = '\0';         /* Next is the default zip path */        strcat(buf, zip_path);        strcat(buf, delimiter);         /* Next goes merge of compile-time $PYTHONPATH with         * dynamically located prefix.         */        defpath = pythonpath;        while (1) {            char *delim = strchr(defpath, DELIM);             if (defpath[0] != SEP) {                strcat(buf, prefix);                strcat(buf, separator);            }             if (delim) {                size_t len = delim - defpath + 1;                size_t end = strlen(buf) + len;                strncat(buf, defpath, len);                *(buf + end) = '\0';            }            else {                strcat(buf, defpath);                break;            }            defpath = delim + 1;        }        strcat(buf, delimiter);         /* Finally, on goes the directory for dynamic-load modules */        strcat(buf, exec_prefix);         /* And publish the results */        module_search_path = buf;    }     /* Reduce prefix and exec_prefix to their essence,     * e.g. /usr/local/lib/python1.5 is reduced to /usr/local.     * If we're loading relative to the build directory,     * return the compiled-in defaults instead.     */    if (pfound > 0) {        reduce(prefix);        reduce(prefix);	/* The prefix is the root directory, but reduce() chopped	 * off the "/". */	if (!prefix[0])		strcpy(prefix, separator);    }    else        strncpy(prefix, PREFIX, MAXPATHLEN);     if (efound > 0) {        reduce(exec_prefix);        reduce(exec_prefix);        reduce(exec_prefix);	if (!exec_prefix[0])		strcpy(exec_prefix, separator);    }    else        strncpy(exec_prefix, EXEC_PREFIX, MAXPATHLEN);}  /* External interface */ char *Py_GetPath(void){    if (!module_search_path)        calculate_path();    return module_search_path;} char *Py_GetPrefix(void){    if (!module_search_path)        calculate_path();    return prefix;} char *Py_GetExecPrefix(void){    if (!module_search_path)        calculate_path();    return exec_prefix;} char *Py_GetProgramFullPath(void){    if (!module_search_path)        calculate_path();    return progpath;}  #ifdef __cplusplus}#endif 

Lines 501–694 of 694. Previous lines