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/Python/dynload_next.c

    r2 r391  
    1010
    1111const struct filedescr _PyImport_DynLoadFiletab[] = {
    12         {".so", "rb", C_EXTENSION},
    13         {"module.so", "rb", C_EXTENSION},
    14         {0, 0}
     12    {".so", "rb", C_EXTENSION},
     13    {"module.so", "rb", C_EXTENSION},
     14    {0, 0}
    1515};
    1616
     
    3030#else
    3131#define LINKOPTIONS NSLINKMODULE_OPTION_BINDNOW| \
    32         NSLINKMODULE_OPTION_RETURN_ON_ERROR|NSLINKMODULE_OPTION_PRIVATE
     32    NSLINKMODULE_OPTION_RETURN_ON_ERROR|NSLINKMODULE_OPTION_PRIVATE
    3333#endif
    3434dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
    35                                         const char *pathname, FILE *fp)
     35                                        const char *pathname, FILE *fp)
    3636{
    37         dl_funcptr p = NULL;
    38         char funcname[258];
    39         NSObjectFileImageReturnCode rc;
    40         NSObjectFileImage image;
    41         NSModule newModule;
    42         NSSymbol theSym;
    43         const char *errString;
    44         char errBuf[512];
     37    dl_funcptr p = NULL;
     38    char funcname[258];
     39    NSObjectFileImageReturnCode rc;
     40    NSObjectFileImage image;
     41    NSModule newModule;
     42    NSSymbol theSym;
     43    const char *errString;
     44    char errBuf[512];
    4545
    46         PyOS_snprintf(funcname, sizeof(funcname), "_init%.200s", shortname);
     46    PyOS_snprintf(funcname, sizeof(funcname), "_init%.200s", shortname);
    4747
    4848#ifdef USE_DYLD_GLOBAL_NAMESPACE
    49         if (NSIsSymbolNameDefined(funcname)) {
    50                 theSym = NSLookupAndBindSymbol(funcname);
    51                 p = (dl_funcptr)NSAddressOfSymbol(theSym);
    52                 return p;
    53         }
     49    if (NSIsSymbolNameDefined(funcname)) {
     50        theSym = NSLookupAndBindSymbol(funcname);
     51        p = (dl_funcptr)NSAddressOfSymbol(theSym);
     52        return p;
     53    }
    5454#endif
    55         rc = NSCreateObjectFileImageFromFile(pathname, &image);
    56         switch(rc) {
    57                 default:
    58                 case NSObjectFileImageFailure:
    59                 case NSObjectFileImageFormat:
    60                         /* for these a message is printed on stderr by dyld */
    61                         errString = "Can't create object file image";
    62                 break;
    63                 case NSObjectFileImageSuccess:
    64                         errString = NULL;
    65                         break;
    66                 case NSObjectFileImageInappropriateFile:
    67                         errString = "Inappropriate file type for dynamic loading";
    68                         break;
    69                 case NSObjectFileImageArch:
    70                         errString = "Wrong CPU type in object file";
    71                         break;
    72                 case NSObjectFileImageAccess:
    73                         errString = "Can't read object file (no access)";
    74                         break;
    75         }
    76         if (errString == NULL) {
    77                 newModule = NSLinkModule(image, pathname, LINKOPTIONS);
    78                 if (newModule == NULL) {
    79                         int errNo;
    80                         const char *fileName, *moreErrorStr;
    81                         NSLinkEditErrors c;
    82                         NSLinkEditError( &c, &errNo, &fileName, &moreErrorStr );
    83                         PyOS_snprintf(errBuf, 512, "Failure linking new module: %s: %s",
    84                                         fileName, moreErrorStr);
    85                         errString = errBuf;
    86                 }
    87         }
    88         if (errString != NULL) {
    89                 PyErr_SetString(PyExc_ImportError, errString);
    90                 return NULL;
    91         }
     55    rc = NSCreateObjectFileImageFromFile(pathname, &image);
     56    switch(rc) {
     57        default:
     58        case NSObjectFileImageFailure:
     59        case NSObjectFileImageFormat:
     60            /* for these a message is printed on stderr by dyld */
     61            errString = "Can't create object file image";
     62        break;
     63        case NSObjectFileImageSuccess:
     64            errString = NULL;
     65            break;
     66        case NSObjectFileImageInappropriateFile:
     67            errString = "Inappropriate file type for dynamic loading";
     68            break;
     69        case NSObjectFileImageArch:
     70            errString = "Wrong CPU type in object file";
     71            break;
     72        case NSObjectFileImageAccess:
     73            errString = "Can't read object file (no access)";
     74            break;
     75    }
     76    if (errString == NULL) {
     77        newModule = NSLinkModule(image, pathname, LINKOPTIONS);
     78        if (newModule == NULL) {
     79            int errNo;
     80            const char *fileName, *moreErrorStr;
     81            NSLinkEditErrors c;
     82            NSLinkEditError( &c, &errNo, &fileName, &moreErrorStr );
     83            PyOS_snprintf(errBuf, 512, "Failure linking new module: %s: %s",
     84                            fileName, moreErrorStr);
     85            errString = errBuf;
     86        }
     87    }
     88    if (errString != NULL) {
     89        PyErr_SetString(PyExc_ImportError, errString);
     90        return NULL;
     91    }
    9292#ifdef USE_DYLD_GLOBAL_NAMESPACE
    93         if (!NSIsSymbolNameDefined(funcname)) {
    94                 /* UnlinkModule() isn't implemented in current versions, but calling it does no harm */
    95                 /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */
    96                 PyErr_Format(PyExc_ImportError,
    97                                 "Loaded module does not contain symbol %.200s",
    98                                 funcname);
    99                 return NULL;
    100         }
    101         theSym = NSLookupAndBindSymbol(funcname);
     93    if (!NSIsSymbolNameDefined(funcname)) {
     94        /* UnlinkModule() isn't implemented in current versions, but calling it does no harm */
     95        /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */
     96        PyErr_Format(PyExc_ImportError,
     97                        "Loaded module does not contain symbol %.200s",
     98                        funcname);
     99        return NULL;
     100    }
     101    theSym = NSLookupAndBindSymbol(funcname);
    102102#else
    103         theSym = NSLookupSymbolInModule(newModule, funcname);
    104         if ( theSym == NULL ) {
    105                 /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */
    106                 PyErr_Format(PyExc_ImportError,
    107                                 "Loaded module does not contain symbol %.200s",
    108                                 funcname);
    109                 return NULL;
    110         }
     103    theSym = NSLookupSymbolInModule(newModule, funcname);
     104    if ( theSym == NULL ) {
     105        /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */
     106        PyErr_Format(PyExc_ImportError,
     107                        "Loaded module does not contain symbol %.200s",
     108                        funcname);
     109        return NULL;
     110    }
    111111#endif
    112         p = (dl_funcptr)NSAddressOfSymbol(theSym);
    113         return p;
     112    p = (dl_funcptr)NSAddressOfSymbol(theSym);
     113    return p;
    114114}
Note: See TracChangeset for help on using the changeset viewer.