~ubuntu-branches/ubuntu/wily/python-imaging/wily

« back to all changes in this revision

Viewing changes to Sane/_sane.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-01-31 20:49:20 UTC
  • mfrom: (27.1.1 raring-proposed)
  • Revision ID: package-import@ubuntu.com-20130131204920-b5zshy6vgfvdionl
Tags: 1.1.7+1.7.8-1ubuntu1
Rewrite build dependencies to allow cross builds.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
#include <sys/time.h>
30
30
 
 
31
#if PY_MAJOR_VERSION >= 3
 
32
  #define PyInt_AsLong PyLong_AsLong
 
33
  #define PyInt_FromLong PyLong_FromLong
 
34
  #define PyInt_Check PyLong_Check
 
35
#endif
 
36
 
31
37
static PyObject *ErrorObject;
32
38
 
33
39
typedef struct {
51
57
  return NULL;
52
58
}
53
59
 
54
 
staticforward PyTypeObject SaneDev_Type;
 
60
static PyTypeObject SaneDev_Type;
55
61
 
56
 
#define SaneDevObject_Check(v)  ((v)->ob_type == &SaneDev_Type)
 
62
#define SaneDevObject_Check(v)  (Py_TYPE(v) == &SaneDev_Type)
57
63
 
58
64
static SaneDevObject *
59
65
newSaneDevObject(void)
60
66
{
61
67
        SaneDevObject *self;
 
68
 
 
69
    if (PyType_Ready(&SaneDev_Type) < 0)
 
70
        return NULL;
 
71
 
62
72
        self = PyObject_NEW(SaneDevObject, &SaneDev_Type);
63
73
        if (self == NULL)
64
74
                return NULL;
233
243
              constraint=PyList_New(0);
234
244
              for(j=0; d->constraint.string_list[j]!=NULL; j++)
235
245
                PyList_Append(constraint, 
 
246
#if PY_MAJOR_VERSION >= 3
 
247
                              PyUnicode_DecodeLatin1(d->constraint.string_list[j], strlen(d->constraint.string_list[j]), NULL));
 
248
#else
236
249
                              PyString_FromString(d->constraint.string_list[j]));
 
250
#endif
237
251
              break;
238
252
            }
239
253
          value=Py_BuildValue("isssiiiiO", i, d->name, d->title, d->desc, 
284
298
      value=Py_BuildValue("d", SANE_UNFIX((*((SANE_Fixed*)v))) );
285
299
      break;
286
300
    case(SANE_TYPE_STRING):
 
301
#if PY_MAJOR_VERSION >= 3
 
302
      value=PyUnicode_DecodeLatin1((const char *) v, strlen((const char *) v), NULL);
 
303
#else
287
304
      value=Py_BuildValue("s", v);
 
305
#endif
288
306
      break;
289
307
    case(SANE_TYPE_BUTTON):
290
308
    case(SANE_TYPE_GROUP):
345
363
      *( (SANE_Fixed*)v) = SANE_FIX(PyFloat_AsDouble(value));
346
364
      break;
347
365
    case(SANE_TYPE_STRING):
348
 
      if (!PyString_Check(value)) 
 
366
#if PY_MAJOR_VERSION >= 3
 
367
      if (!PyUnicode_Check(value))
 
368
        {
 
369
          PyErr_SetString(PyExc_TypeError, "SANE_STRING requires a string");
 
370
          free(v);
 
371
          return NULL;
 
372
        }
 
373
      {
 
374
        PyObject *encoded = PyUnicode_AsLatin1String(value);
 
375
 
 
376
        if (!encoded)
 
377
          return NULL;
 
378
 
 
379
        strncpy(v, PyBytes_AsString(encoded), d->size-1);
 
380
        ((char*)v)[d->size-1] = 0;
 
381
        Py_DECREF(encoded);
 
382
      }
 
383
#else
 
384
      if (!PyString_Check(value))
349
385
        {
350
386
          PyErr_SetString(PyExc_TypeError, "SANE_STRING requires a string");
351
387
          free(v);
353
389
        }
354
390
      strncpy(v, PyString_AsString(value), d->size-1);
355
391
      ((char*)v)[d->size-1] = 0;
 
392
#endif
356
393
      break;
357
394
    case(SANE_TYPE_BUTTON): 
358
395
    case(SANE_TYPE_GROUP):
1095
1132
        {NULL,          NULL}           /* sentinel */
1096
1133
};
1097
1134
 
1098
 
static PyObject *
1099
 
SaneDev_getattr(SaneDevObject *self, char *name)
1100
 
{
1101
 
        return Py_FindMethod(SaneDev_methods, (PyObject *)self, name);
1102
 
}
1103
 
 
1104
 
staticforward PyTypeObject SaneDev_Type = {
1105
 
        PyObject_HEAD_INIT(&PyType_Type)
1106
 
        0,                      /*ob_size*/
 
1135
static PyTypeObject SaneDev_Type = {
 
1136
        PyVarObject_HEAD_INIT(NULL, 0)
1107
1137
        "SaneDev",                      /*tp_name*/
1108
1138
        sizeof(SaneDevObject),  /*tp_basicsize*/
1109
1139
        0,                      /*tp_itemsize*/
1110
1140
        /* methods */
1111
1141
        (destructor)SaneDev_dealloc, /*tp_dealloc*/
1112
1142
        0,                      /*tp_print*/
1113
 
        (getattrfunc)SaneDev_getattr, /*tp_getattr*/
1114
 
        0, /*tp_setattr*/
1115
 
        0,                      /*tp_compare*/
1116
 
        0,                      /*tp_repr*/
1117
 
        0,                      /*tp_as_number*/
1118
 
        0,                      /*tp_as_sequence*/
1119
 
        0,                      /*tp_as_mapping*/
1120
 
        0,                      /*tp_hash*/
 
1143
    0,                          /*tp_getattr*/
 
1144
    0,                          /*tp_setattr*/
 
1145
    0,                          /*tp_compare*/
 
1146
    0,                          /*tp_repr*/
 
1147
    0,                          /*tp_as_number */
 
1148
    0,                          /*tp_as_sequence */
 
1149
    0,                          /*tp_as_mapping */
 
1150
    0,                          /*tp_hash*/
 
1151
    0,                          /*tp_call*/
 
1152
    0,                          /*tp_str*/
 
1153
    0,                          /*tp_getattro*/
 
1154
    0,                          /*tp_setattro*/
 
1155
    0,                          /*tp_as_buffer*/
 
1156
    Py_TPFLAGS_DEFAULT,         /*tp_flags*/
 
1157
    0,                          /*tp_doc*/
 
1158
    0,                          /*tp_traverse*/
 
1159
    0,                          /*tp_clear*/
 
1160
    0,                          /*tp_richcompare*/
 
1161
    0,                          /*tp_weaklistoffset*/
 
1162
    0,                          /*tp_iter*/
 
1163
    0,                          /*tp_iternext*/
 
1164
    SaneDev_methods,            /*tp_methods*/
 
1165
    0,                          /*tp_members*/
 
1166
    0,                          /*tp_getset*/
1121
1167
};
1122
1168
 
1123
1169
/* --------------------------------------------------------------------- */
1152
1198
static PyObject *
1153
1199
PySane_get_devices(PyObject *self, PyObject *args)
1154
1200
{
1155
 
  SANE_Device **devlist;
1156
 
  SANE_Device *dev;
 
1201
  const SANE_Device **devlist;
 
1202
  const SANE_Device *dev;
1157
1203
  SANE_Status st;
1158
1204
  PyObject *list;
1159
1205
  int local_only, i;
1163
1209
      return NULL;
1164
1210
    }
1165
1211
  
 
1212
  Py_BEGIN_ALLOW_THREADS
1166
1213
  st=sane_get_devices(&devlist, local_only);
 
1214
  Py_END_ALLOW_THREADS
1167
1215
  if (st) return PySane_Error(st);
1168
1216
  if (!(list = PyList_New(0)))
1169
1217
            return NULL;
1191
1239
        rv = newSaneDevObject();
1192
1240
        if ( rv == NULL )
1193
1241
            return NULL;
 
1242
        Py_BEGIN_ALLOW_THREADS
1194
1243
        st = sane_open(name, &(rv->h));
 
1244
        Py_END_ALLOW_THREADS
1195
1245
        if (st) 
1196
1246
          {
1197
1247
            Py_DECREF(rv);
1248
1298
        Py_DECREF(v);
1249
1299
}
1250
1300
 
1251
 
void
 
1301
#if PY_MAJOR_VERSION >= 3
 
1302
static struct PyModuleDef PySane_moduledef = {
 
1303
        PyModuleDef_HEAD_INIT,
 
1304
        "_sane",
 
1305
        NULL,
 
1306
        0,
 
1307
        PySane_methods,
 
1308
        NULL,
 
1309
        NULL,
 
1310
        NULL,
 
1311
        NULL
 
1312
};
 
1313
 
 
1314
PyMODINIT_FUNC
 
1315
PyInit__sane(void)
 
1316
{
 
1317
    /* Create the module and add the functions */
 
1318
    PyObject *m = PyModule_Create(&PySane_moduledef);
 
1319
    if(!m)
 
1320
        return NULL;
 
1321
#else /* if PY_MAJOR_VERSION < 3 */
 
1322
 
 
1323
PyMODINIT_FUNC
1252
1324
init_sane(void)
1253
1325
{
1254
 
        PyObject *m, *d;
1255
 
 
1256
 
        /* Create the module and add the functions */
1257
 
        m = Py_InitModule("_sane", PySane_methods);
 
1326
    /* Create the module and add the functions */
 
1327
    PyObject *m = Py_InitModule("_sane", PySane_methods);
 
1328
    if(!m)
 
1329
        return;
 
1330
#endif
1258
1331
 
1259
1332
        /* Add some symbolic constants to the module */
1260
 
        d = PyModule_GetDict(m);
1261
 
        ErrorObject = PyString_FromString("_sane.error");
 
1333
        PyObject *d = PyModule_GetDict(m);
 
1334
        ErrorObject = PyErr_NewException("_sane.error", NULL, NULL);
1262
1335
        PyDict_SetItemString(d, "error", ErrorObject);
1263
1336
 
1264
1337
        insint(d, "INFO_INEXACT", SANE_INFO_INEXACT);
1322
1395
          NUMARRAY_IMPORTED = 1;
1323
1396
 
1324
1397
#endif /* WITH_NUMARRAY */
 
1398
#if PY_MAJOR_VERSION >= 3
 
1399
    return m;
 
1400
#endif
1325
1401
}