Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/PC/import_nt.c

    r2 r391  
    11/********************************************************************
    22
    3  import_nt.c 
     3 import_nt.c
    44
    55  Win32 specific import code.
     
    1717
    1818FILE *PyWin_FindRegisteredModule(const char *moduleName,
    19                                 struct filedescr **ppFileDesc,
    20                                 char *pathBuf,
    21                                 Py_ssize_t pathLen)
     19                                struct filedescr **ppFileDesc,
     20                                char *pathBuf,
     21                                Py_ssize_t pathLen)
    2222{
    23         char *moduleKey;
    24         const char keyPrefix[] = "Software\\Python\\PythonCore\\";
    25         const char keySuffix[] = "\\Modules\\";
     23    char *moduleKey;
     24    const char keyPrefix[] = "Software\\Python\\PythonCore\\";
     25    const char keySuffix[] = "\\Modules\\";
    2626#ifdef _DEBUG
    27         /* In debugging builds, we _must_ have the debug version
    28         * registered.
    29         */
    30         const char debugString[] = "\\Debug";
     27    /* In debugging builds, we _must_ have the debug version
     28    * registered.
     29    */
     30    const char debugString[] = "\\Debug";
    3131#else
    32         const char debugString[] = "";
     32    const char debugString[] = "";
    3333#endif
    34         struct filedescr *fdp = NULL;
    35         FILE *fp;
    36         HKEY keyBase = HKEY_CURRENT_USER;
    37         int modNameSize;
    38         long regStat;
     34    struct filedescr *fdp = NULL;
     35    FILE *fp;
     36    HKEY keyBase = HKEY_CURRENT_USER;
     37    int modNameSize;
     38    long regStat;
    3939
    40         /* Calculate the size for the sprintf buffer.
    41         * Get the size of the chars only, plus 1 NULL.
    42         */
    43         size_t bufSize = sizeof(keyPrefix)-1 +
    44                          strlen(PyWin_DLLVersionString) +
    45                          sizeof(keySuffix) +
    46                          strlen(moduleName) +
    47                          sizeof(debugString) - 1;
    48         /* alloca == no free required, but memory only local to fn,
    49         * also no heap fragmentation!
    50         */
    51         moduleKey = alloca(bufSize);
    52         PyOS_snprintf(moduleKey, bufSize,
    53                       "Software\\Python\\PythonCore\\%s\\Modules\\%s%s",
    54                       PyWin_DLLVersionString, moduleName, debugString);
     40    /* Calculate the size for the sprintf buffer.
     41    * Get the size of the chars only, plus 1 NULL.
     42    */
     43    size_t bufSize = sizeof(keyPrefix)-1 +
     44                     strlen(PyWin_DLLVersionString) +
     45                     sizeof(keySuffix) +
     46                     strlen(moduleName) +
     47                     sizeof(debugString) - 1;
     48    /* alloca == no free required, but memory only local to fn,
     49    * also no heap fragmentation!
     50    */
     51    moduleKey = alloca(bufSize);
     52    PyOS_snprintf(moduleKey, bufSize,
     53                  "Software\\Python\\PythonCore\\%s\\Modules\\%s%s",
     54                  PyWin_DLLVersionString, moduleName, debugString);
    5555
    56         assert(pathLen < INT_MAX);
    57         modNameSize = (int)pathLen;
    58         regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize);
    59         if (regStat != ERROR_SUCCESS) {
    60                 /* No user setting - lookup in machine settings */
    61                 keyBase = HKEY_LOCAL_MACHINE;
    62                 /* be anal - failure may have reset size param */
    63                 modNameSize = (int)pathLen;
    64                 regStat = RegQueryValue(keyBase, moduleKey,
    65                                         pathBuf, &modNameSize);
     56    assert(pathLen < INT_MAX);
     57    modNameSize = (int)pathLen;
     58    regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize);
     59    if (regStat != ERROR_SUCCESS) {
     60        /* No user setting - lookup in machine settings */
     61        keyBase = HKEY_LOCAL_MACHINE;
     62        /* be anal - failure may have reset size param */
     63        modNameSize = (int)pathLen;
     64        regStat = RegQueryValue(keyBase, moduleKey,
     65                                pathBuf, &modNameSize);
    6666
    67                 if (regStat != ERROR_SUCCESS)
    68                         return NULL;
    69         }
    70         /* use the file extension to locate the type entry. */
    71         for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
    72                 size_t extLen = strlen(fdp->suffix);
    73                 assert(modNameSize >= 0); /* else cast to size_t is wrong */
    74                 if ((size_t)modNameSize > extLen &&
    75                     strnicmp(pathBuf + ((size_t)modNameSize-extLen-1),
    76                              fdp->suffix,
    77                              extLen) == 0)
    78                         break;
    79         }
    80         if (fdp->suffix == NULL)
    81                 return NULL;
    82         fp = fopen(pathBuf, fdp->mode);
    83         if (fp != NULL)
    84                 *ppFileDesc = fdp;
    85         return fp;
     67        if (regStat != ERROR_SUCCESS)
     68            return NULL;
     69    }
     70    /* use the file extension to locate the type entry. */
     71    for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
     72        size_t extLen = strlen(fdp->suffix);
     73        assert(modNameSize >= 0); /* else cast to size_t is wrong */
     74        if ((size_t)modNameSize > extLen &&
     75            strnicmp(pathBuf + ((size_t)modNameSize-extLen-1),
     76                     fdp->suffix,
     77                     extLen) == 0)
     78            break;
     79    }
     80    if (fdp->suffix == NULL)
     81        return NULL;
     82    fp = fopen(pathBuf, fdp->mode);
     83    if (fp != NULL)
     84        *ppFileDesc = fdp;
     85    return fp;
    8686}
Note: See TracChangeset for help on using the changeset viewer.