Ignore:
Timestamp:
Dec 22, 2009, 9:29:51 AM (13 years ago)
Author:
Sam Hocevar
Message:

Start porting the Python interpreter to Python 2.4/2.5.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/python/py_module.c

    r4047 r4165  
    4040static struct screen_list *screen_list;
    4141
    42 PyObject *PyInit_neercs(void);
    43 void removeTrailingStuff(char *b);
     42#if defined HAVE_PYTHON3
     43static PyObject *PyInit_neercs(void);
     44#else
     45static void PyInit_neercs(void);
     46#endif
     47static void removeTrailingStuff(char *b);
    4448
    4549
     
    5660    debug("py get '%s' to '%s'\n", varname,
    5761          get_config(configname)->get(screen_list));
    58 
    5962}
    6063
    61 void removeTrailingStuff(char *b)
     64static void removeTrailingStuff(char *b)
    6265{
    63         if(!b) return;
     66    if(!b)
     67        return;
    6468    if(b[0]=='\'')
    6569    {
    66         memmove(b, &b[1], strlen(b)-1);   
     70        memmove(b, &b[1], strlen(b)-1);   
    6771        b[strlen(b)-2] = 0;
    6872    }
     
    8993            /* Make sure it's a string */
    9094            char *err =
     95#if defined HAVE_PYTHON3
    9196                PyBytes_AS_STRING(PyUnicode_AsEncodedString
    9297                                  (str, "utf-8", "Error ~"));
    93                         /* FIXME leak leak leak */
     98#elif defined HAVE_PYTHON2
     99                PyString_AsString(str);
     100#endif
     101            /* FIXME leak leak leak */
    94102            char *s = strdup(err);
    95103
     
    116124    }
    117125}
    118 
    119126
    120127static PyObject *neercs_get(PyObject * self, PyObject * args)
     
    147154}
    148155
    149 static PyMethodDef NeercsMethods[] = {
    150     {"version", neercs_version, METH_NOARGS, "Return the neercs version."},
    151     {"get", neercs_get, METH_VARARGS,
    152      "Return the specified variable's value."},
    153     {NULL, NULL, 0, NULL}
     156static PyMethodDef NeercsMethods[] =
     157{
     158    { "version", neercs_version, METH_NOARGS, "Return the neercs version." },
     159    { "get", neercs_get, METH_VARARGS,
     160      "Return the specified variable's value." },
     161    { NULL, NULL, 0, NULL }
    154162};
    155163
    156 static PyModuleDef NeercsModule = {
    157     PyModuleDef_HEAD_INIT, "neercs", NULL, -1, NeercsMethods,
    158     NULL, NULL, NULL, NULL
    159 };
     164#if defined HAVE_PYTHON3
     165static PyObject *PyInit_neercs(void)
     166{
     167    static PyModuleDef NeercsModule =
     168    {
     169        PyModuleDef_HEAD_INIT, "neercs", NULL, -1, NeercsMethods,
     170        NULL, NULL, NULL, NULL
     171    };
    160172
    161 PyObject *PyInit_neercs(void)
     173    return PyModule_Create(&NeercsModule);
     174}
     175
     176#elif defined HAVE_PYTHON2
     177static void PyInit_neercs(void)
    162178{
    163     PyObject *o = PyModule_Create(&NeercsModule);
    164     PyImport_AppendInittab("neercs", &PyInit_neercs);
    165     return o;
     179    PyMethodDef *m = NeercsMethods;
     180    PyObject *mod = PyModule_New("neercs");
     181    PyModule_AddStringConstant(mod, "__file__", "<synthetic>");
     182
     183    for (m = NeercsMethods; m->ml_name; m++)
     184        PyModule_AddObject(mod, m->ml_name, PyCFunction_New(m, NULL));
    166185}
     186#endif
    167187
    168188void initNeercsModule(struct screen_list *sl)
    169189{
    170190    screen_list = sl;
    171     PyInit_neercs();
     191    PyImport_AppendInittab("neercs", &PyInit_neercs);
     192    Py_Initialize();
    172193}
    173194
    174 
    175 
    176195#endif
Note: See TracChangeset for help on using the changeset viewer.