Home | History | Annotate | Download | only in Python
      1 
      2 /* Module support implementation */
      3 
      4 #include "Python.h"
      5 
      6 #define FLAG_SIZE_T 1
      7 typedef double va_double;
      8 
      9 static PyObject *va_build_value(const char *, va_list, int);
     10 
     11 /* Package context -- the full module name for package imports */
     12 char *_Py_PackageContext = NULL;
     13 
     14 /* Py_InitModule4() parameters:
     15    - name is the module name
     16    - methods is the list of top-level functions
     17    - doc is the documentation string
     18    - passthrough is passed as self to functions defined in the module
     19    - api_version is the value of PYTHON_API_VERSION at the time the
     20      module was compiled
     21 
     22    Return value is a borrowed reference to the module object; or NULL
     23    if an error occurred (in Python 1.4 and before, errors were fatal).
     24    Errors may still leak memory.
     25 */
     26 
     27 static char api_version_warning[] =
     28 "Python C API version mismatch for module %.100s:\
     29  This Python has API version %d, module %.100s has version %d.";
     30 
     31 PyObject *
     32 Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,
     33                PyObject *passthrough, int module_api_version)
     34 {
     35     PyObject *m, *d, *v, *n;
     36     PyMethodDef *ml;
     37     PyInterpreterState *interp = PyThreadState_Get()->interp;
     38     if (interp->modules == NULL)
     39         Py_FatalError("Python import machinery not initialized");
     40     if (module_api_version != PYTHON_API_VERSION) {
     41         char message[512];
     42         PyOS_snprintf(message, sizeof(message),
     43                       api_version_warning, name,
     44                       PYTHON_API_VERSION, name,
     45                       module_api_version);
     46         if (PyErr_Warn(PyExc_RuntimeWarning, message))
     47             return NULL;
     48     }
     49     /* Make sure name is fully qualified.
     50 
     51        This is a bit of a hack: when the shared library is loaded,
     52        the module name is "package.module", but the module calls
     53        Py_InitModule*() with just "module" for the name.  The shared
     54        library loader squirrels away the true name of the module in
     55        _Py_PackageContext, and Py_InitModule*() will substitute this
     56        (if the name actually matches).
     57     */
     58     if (_Py_PackageContext != NULL) {
     59         char *p = strrchr(_Py_PackageContext, '.');
     60         if (p != NULL && strcmp(name, p+1) == 0) {
     61             name = _Py_PackageContext;
     62             _Py_PackageContext = NULL;
     63         }
     64     }
     65     if ((m = PyImport_AddModule(name)) == NULL)
     66         return NULL;
     67     d = PyModule_GetDict(m);
     68     if (methods != NULL) {
     69         n = PyString_FromString(name);
     70         if (n == NULL)
     71             return NULL;
     72         for (ml = methods; ml->ml_name != NULL; ml++) {
     73             if ((ml->ml_flags & METH_CLASS) ||
     74                 (ml->ml_flags & METH_STATIC)) {
     75                 PyErr_SetString(PyExc_ValueError,
     76                                 "module functions cannot set"
     77                                 " METH_CLASS or METH_STATIC");
     78                 Py_DECREF(n);
     79                 return NULL;
     80             }
     81             v = PyCFunction_NewEx(ml, passthrough, n);
     82             if (v == NULL) {
     83                 Py_DECREF(n);
     84                 return NULL;
     85             }
     86             if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
     87                 Py_DECREF(v);
     88                 Py_DECREF(n);
     89                 return NULL;
     90             }
     91             Py_DECREF(v);
     92         }
     93         Py_DECREF(n);
     94     }
     95     if (doc != NULL) {
     96         v = PyString_FromString(doc);
     97         if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
     98             Py_XDECREF(v);
     99             return NULL;
    100         }
    101         Py_DECREF(v);
    102     }
    103     return m;
    104 }
    105 
    106 
    107 /* Helper for mkvalue() to scan the length of a format */
    108 
    109 static int
    110 countformat(const char *format, int endchar)
    111 {
    112     int count = 0;
    113     int level = 0;
    114     while (level > 0 || *format != endchar) {
    115         switch (*format) {
    116         case '\0':
    117             /* Premature end */
    118             PyErr_SetString(PyExc_SystemError,
    119                             "unmatched paren in format");
    120             return -1;
    121         case '(':
    122         case '[':
    123         case '{':
    124             if (level == 0)
    125                 count++;
    126             level++;
    127             break;
    128         case ')':
    129         case ']':
    130         case '}':
    131             level--;
    132             break;
    133         case '#':
    134         case '&':
    135         case ',':
    136         case ':':
    137         case ' ':
    138         case '\t':
    139             break;
    140         default:
    141             if (level == 0)
    142                 count++;
    143         }
    144         format++;
    145     }
    146     return count;
    147 }
    148 
    149 
    150 /* Generic function to create a value -- the inverse of getargs() */
    151 /* After an original idea and first implementation by Steven Miale */
    152 
    153 static PyObject *do_mktuple(const char**, va_list *, int, int, int);
    154 static PyObject *do_mklist(const char**, va_list *, int, int, int);
    155 static PyObject *do_mkdict(const char**, va_list *, int, int, int);
    156 static PyObject *do_mkvalue(const char**, va_list *, int);
    157 
    158 
    159 static PyObject *
    160 do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
    161 {
    162     PyObject *d;
    163     int i;
    164     int itemfailed = 0;
    165     if (n < 0)
    166         return NULL;
    167     if ((d = PyDict_New()) == NULL)
    168         return NULL;
    169     /* Note that we can't bail immediately on error as this will leak
    170        refcounts on any 'N' arguments. */
    171     for (i = 0; i < n; i+= 2) {
    172         PyObject *k, *v;
    173         int err;
    174         k = do_mkvalue(p_format, p_va, flags);
    175         if (k == NULL) {
    176             itemfailed = 1;
    177             Py_INCREF(Py_None);
    178             k = Py_None;
    179         }
    180         v = do_mkvalue(p_format, p_va, flags);
    181         if (v == NULL) {
    182             itemfailed = 1;
    183             Py_INCREF(Py_None);
    184             v = Py_None;
    185         }
    186         err = PyDict_SetItem(d, k, v);
    187         Py_DECREF(k);
    188         Py_DECREF(v);
    189         if (err < 0 || itemfailed) {
    190             Py_DECREF(d);
    191             return NULL;
    192         }
    193     }
    194     if (d != NULL && **p_format != endchar) {
    195         Py_DECREF(d);
    196         d = NULL;
    197         PyErr_SetString(PyExc_SystemError,
    198                         "Unmatched paren in format");
    199     }
    200     else if (endchar)
    201         ++*p_format;
    202     return d;
    203 }
    204 
    205 static PyObject *
    206 do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
    207 {
    208     PyObject *v;
    209     int i;
    210     int itemfailed = 0;
    211     if (n < 0)
    212         return NULL;
    213     v = PyList_New(n);
    214     if (v == NULL)
    215         return NULL;
    216     /* Note that we can't bail immediately on error as this will leak
    217        refcounts on any 'N' arguments. */
    218     for (i = 0; i < n; i++) {
    219         PyObject *w = do_mkvalue(p_format, p_va, flags);
    220         if (w == NULL) {
    221             itemfailed = 1;
    222             Py_INCREF(Py_None);
    223             w = Py_None;
    224         }
    225         PyList_SET_ITEM(v, i, w);
    226     }
    227 
    228     if (itemfailed) {
    229         /* do_mkvalue() should have already set an error */
    230         Py_DECREF(v);
    231         return NULL;
    232     }
    233     if (**p_format != endchar) {
    234         Py_DECREF(v);
    235         PyErr_SetString(PyExc_SystemError,
    236                         "Unmatched paren in format");
    237         return NULL;
    238     }
    239     if (endchar)
    240         ++*p_format;
    241     return v;
    242 }
    243 
    244 #ifdef Py_USING_UNICODE
    245 static int
    246 _ustrlen(Py_UNICODE *u)
    247 {
    248     int i = 0;
    249     Py_UNICODE *v = u;
    250     while (*v != 0) { i++; v++; }
    251     return i;
    252 }
    253 #endif
    254 
    255 static PyObject *
    256 do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
    257 {
    258     PyObject *v;
    259     int i;
    260     int itemfailed = 0;
    261     if (n < 0)
    262         return NULL;
    263     if ((v = PyTuple_New(n)) == NULL)
    264         return NULL;
    265     /* Note that we can't bail immediately on error as this will leak
    266        refcounts on any 'N' arguments. */
    267     for (i = 0; i < n; i++) {
    268         PyObject *w = do_mkvalue(p_format, p_va, flags);
    269         if (w == NULL) {
    270             itemfailed = 1;
    271             Py_INCREF(Py_None);
    272             w = Py_None;
    273         }
    274         PyTuple_SET_ITEM(v, i, w);
    275     }
    276     if (itemfailed) {
    277         /* do_mkvalue() should have already set an error */
    278         Py_DECREF(v);
    279         return NULL;
    280     }
    281     if (**p_format != endchar) {
    282         Py_DECREF(v);
    283         PyErr_SetString(PyExc_SystemError,
    284                         "Unmatched paren in format");
    285         return NULL;
    286     }
    287     if (endchar)
    288         ++*p_format;
    289     return v;
    290 }
    291 
    292 static PyObject *
    293 do_mkvalue(const char **p_format, va_list *p_va, int flags)
    294 {
    295     for (;;) {
    296         switch (*(*p_format)++) {
    297         case '(':
    298             return do_mktuple(p_format, p_va, ')',
    299                               countformat(*p_format, ')'), flags);
    300 
    301         case '[':
    302             return do_mklist(p_format, p_va, ']',
    303                              countformat(*p_format, ']'), flags);
    304 
    305         case '{':
    306             return do_mkdict(p_format, p_va, '}',
    307                              countformat(*p_format, '}'), flags);
    308 
    309         case 'b':
    310         case 'B':
    311         case 'h':
    312         case 'i':
    313             return PyInt_FromLong((long)va_arg(*p_va, int));
    314 
    315         case 'H':
    316             return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
    317 
    318         case 'I':
    319         {
    320             unsigned int n;
    321             n = va_arg(*p_va, unsigned int);
    322             if (n > (unsigned long)PyInt_GetMax())
    323                 return PyLong_FromUnsignedLong((unsigned long)n);
    324             else
    325                 return PyInt_FromLong(n);
    326         }
    327 
    328         case 'n':
    329 #if SIZEOF_SIZE_T!=SIZEOF_LONG
    330             return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
    331 #endif
    332             /* Fall through from 'n' to 'l' if Py_ssize_t is long */
    333         case 'l':
    334             return PyInt_FromLong(va_arg(*p_va, long));
    335 
    336         case 'k':
    337         {
    338             unsigned long n;
    339             n = va_arg(*p_va, unsigned long);
    340             if (n > (unsigned long)PyInt_GetMax())
    341                 return PyLong_FromUnsignedLong(n);
    342             else
    343                 return PyInt_FromLong(n);
    344         }
    345 
    346 #ifdef HAVE_LONG_LONG
    347         case 'L':
    348             return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
    349 
    350         case 'K':
    351             return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
    352 #endif
    353 #ifdef Py_USING_UNICODE
    354         case 'u':
    355         {
    356             PyObject *v;
    357             Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
    358             Py_ssize_t n;
    359             if (**p_format == '#') {
    360                 ++*p_format;
    361                 if (flags & FLAG_SIZE_T)
    362                     n = va_arg(*p_va, Py_ssize_t);
    363                 else
    364                     n = va_arg(*p_va, int);
    365             }
    366             else
    367                 n = -1;
    368             if (u == NULL) {
    369                 v = Py_None;
    370                 Py_INCREF(v);
    371             }
    372             else {
    373                 if (n < 0)
    374                     n = _ustrlen(u);
    375                 v = PyUnicode_FromUnicode(u, n);
    376             }
    377             return v;
    378         }
    379 #endif
    380         case 'f':
    381         case 'd':
    382             return PyFloat_FromDouble(
    383                 (double)va_arg(*p_va, va_double));
    384 
    385 #ifndef WITHOUT_COMPLEX
    386         case 'D':
    387             return PyComplex_FromCComplex(
    388                 *((Py_complex *)va_arg(*p_va, Py_complex *)));
    389 #endif /* WITHOUT_COMPLEX */
    390 
    391         case 'c':
    392         {
    393             char p[1];
    394             p[0] = (char)va_arg(*p_va, int);
    395             return PyString_FromStringAndSize(p, 1);
    396         }
    397 
    398         case 's':
    399         case 'z':
    400         {
    401             PyObject *v;
    402             char *str = va_arg(*p_va, char *);
    403             Py_ssize_t n;
    404             if (**p_format == '#') {
    405                 ++*p_format;
    406                 if (flags & FLAG_SIZE_T)
    407                     n = va_arg(*p_va, Py_ssize_t);
    408                 else
    409                     n = va_arg(*p_va, int);
    410             }
    411             else
    412                 n = -1;
    413             if (str == NULL) {
    414                 v = Py_None;
    415                 Py_INCREF(v);
    416             }
    417             else {
    418                 if (n < 0) {
    419                     size_t m = strlen(str);
    420                     if (m > PY_SSIZE_T_MAX) {
    421                         PyErr_SetString(PyExc_OverflowError,
    422                             "string too long for Python string");
    423                         return NULL;
    424                     }
    425                     n = (Py_ssize_t)m;
    426                 }
    427                 v = PyString_FromStringAndSize(str, n);
    428             }
    429             return v;
    430         }
    431 
    432         case 'N':
    433         case 'S':
    434         case 'O':
    435         if (**p_format == '&') {
    436             typedef PyObject *(*converter)(void *);
    437             converter func = va_arg(*p_va, converter);
    438             void *arg = va_arg(*p_va, void *);
    439             ++*p_format;
    440             return (*func)(arg);
    441         }
    442         else {
    443             PyObject *v;
    444             v = va_arg(*p_va, PyObject *);
    445             if (v != NULL) {
    446                 if (*(*p_format - 1) != 'N')
    447                     Py_INCREF(v);
    448             }
    449             else if (!PyErr_Occurred())
    450                 /* If a NULL was passed
    451                  * because a call that should
    452                  * have constructed a value
    453                  * failed, that's OK, and we
    454                  * pass the error on; but if
    455                  * no error occurred it's not
    456                  * clear that the caller knew
    457                  * what she was doing. */
    458                 PyErr_SetString(PyExc_SystemError,
    459                     "NULL object passed to Py_BuildValue");
    460             return v;
    461         }
    462 
    463         case ':':
    464         case ',':
    465         case ' ':
    466         case '\t':
    467             break;
    468 
    469         default:
    470             PyErr_SetString(PyExc_SystemError,
    471                 "bad format char passed to Py_BuildValue");
    472             return NULL;
    473 
    474         }
    475     }
    476 }
    477 
    478 
    479 PyObject *
    480 Py_BuildValue(const char *format, ...)
    481 {
    482     va_list va;
    483     PyObject* retval;
    484     va_start(va, format);
    485     retval = va_build_value(format, va, 0);
    486     va_end(va);
    487     return retval;
    488 }
    489 
    490 PyObject *
    491 _Py_BuildValue_SizeT(const char *format, ...)
    492 {
    493     va_list va;
    494     PyObject* retval;
    495     va_start(va, format);
    496     retval = va_build_value(format, va, FLAG_SIZE_T);
    497     va_end(va);
    498     return retval;
    499 }
    500 
    501 PyObject *
    502 Py_VaBuildValue(const char *format, va_list va)
    503 {
    504     return va_build_value(format, va, 0);
    505 }
    506 
    507 PyObject *
    508 _Py_VaBuildValue_SizeT(const char *format, va_list va)
    509 {
    510     return va_build_value(format, va, FLAG_SIZE_T);
    511 }
    512 
    513 static PyObject *
    514 va_build_value(const char *format, va_list va, int flags)
    515 {
    516     const char *f = format;
    517     int n = countformat(f, '\0');
    518     va_list lva;
    519 
    520 #ifdef VA_LIST_IS_ARRAY
    521     memcpy(lva, va, sizeof(va_list));
    522 #else
    523 #ifdef __va_copy
    524     __va_copy(lva, va);
    525 #else
    526     lva = va;
    527 #endif
    528 #endif
    529 
    530     if (n < 0)
    531         return NULL;
    532     if (n == 0) {
    533         Py_INCREF(Py_None);
    534         return Py_None;
    535     }
    536     if (n == 1)
    537         return do_mkvalue(&f, &lva, flags);
    538     return do_mktuple(&f, &lva, '\0', n, flags);
    539 }
    540 
    541 
    542 PyObject *
    543 PyEval_CallFunction(PyObject *obj, const char *format, ...)
    544 {
    545     va_list vargs;
    546     PyObject *args;
    547     PyObject *res;
    548 
    549     va_start(vargs, format);
    550 
    551     args = Py_VaBuildValue(format, vargs);
    552     va_end(vargs);
    553 
    554     if (args == NULL)
    555         return NULL;
    556 
    557     res = PyEval_CallObject(obj, args);
    558     Py_DECREF(args);
    559 
    560     return res;
    561 }
    562 
    563 
    564 PyObject *
    565 PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
    566 {
    567     va_list vargs;
    568     PyObject *meth;
    569     PyObject *args;
    570     PyObject *res;
    571 
    572     meth = PyObject_GetAttrString(obj, methodname);
    573     if (meth == NULL)
    574         return NULL;
    575 
    576     va_start(vargs, format);
    577 
    578     args = Py_VaBuildValue(format, vargs);
    579     va_end(vargs);
    580 
    581     if (args == NULL) {
    582         Py_DECREF(meth);
    583         return NULL;
    584     }
    585 
    586     res = PyEval_CallObject(meth, args);
    587     Py_DECREF(meth);
    588     Py_DECREF(args);
    589 
    590     return res;
    591 }
    592 
    593 int
    594 PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
    595 {
    596     PyObject *dict;
    597     if (!PyModule_Check(m)) {
    598         PyErr_SetString(PyExc_TypeError,
    599                     "PyModule_AddObject() needs module as first arg");
    600         return -1;
    601     }
    602     if (!o) {
    603         if (!PyErr_Occurred())
    604             PyErr_SetString(PyExc_TypeError,
    605                             "PyModule_AddObject() needs non-NULL value");
    606         return -1;
    607     }
    608 
    609     dict = PyModule_GetDict(m);
    610     if (dict == NULL) {
    611         /* Internal error -- modules must have a dict! */
    612         PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
    613                      PyModule_GetName(m));
    614         return -1;
    615     }
    616     if (PyDict_SetItemString(dict, name, o))
    617         return -1;
    618     Py_DECREF(o);
    619     return 0;
    620 }
    621 
    622 int
    623 PyModule_AddIntConstant(PyObject *m, const char *name, long value)
    624 {
    625     PyObject *o = PyInt_FromLong(value);
    626     if (!o)
    627         return -1;
    628     if (PyModule_AddObject(m, name, o) == 0)
    629         return 0;
    630     Py_DECREF(o);
    631     return -1;
    632 }
    633 
    634 int
    635 PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
    636 {
    637     PyObject *o = PyString_FromString(value);
    638     if (!o)
    639         return -1;
    640     if (PyModule_AddObject(m, name, o) == 0)
    641         return 0;
    642     Py_DECREF(o);
    643     return -1;
    644 }
    645