273 static PyObject* cdrom_open(PyObject *self, PyObject *args)
274 {
275 int cdrom_fd;
276 FILE *cdrom_file;
277 char *cdrom_device = CDDB_DEFAULT_CDROM_DEVICE;
278 int cdrom_open_flags = CDDB_DEFAULT_CDROM_FLAGS;
279
280 PyObject *cdrom_file_object;
281
282 if (!PyArg_ParseTuple(args, "|si", &cdrom_device, &cdrom_open_flags))
283 return NULL;
when PyArg_ParseTuple() succeeds
taking False path
284
285 cdrom_fd = open(cdrom_device, cdrom_open_flags);
286
287 if (cdrom_fd == -1) {
288 PyErr_SetFromErrno(cdrom_error);
when considering range: -0x80000000 <= value <= -2
taking False path
289 return NULL;
290 }
291
292 cdrom_file = fdopen(cdrom_fd, "r");
293
294 if (cdrom_file == NULL) {
295 PyErr_SetFromErrno(cdrom_error);
when treating unknown struct FILE * from unix/cdrommodule.c:293 as non-NULL
taking False path
296 return NULL;
297 }
298
299 cdrom_file_object = PyFile_FromFile(cdrom_file, cdrom_device, "r", cdrom_close);
300
when PyFile_FromFile() succeeds
new ref from (unknown) PyFile_FromFile allocated at: cdrom_file_object = PyFile_FromFile(cdrom_file, cdrom_device, "r", cdrom_close);
ob_refcnt is now refs: 1 + N where N >= 0
301 if (cdrom_file_object == NULL) {
302 PyErr_SetString(cdrom_error, "Internal conversion from file pointer to Python object failed");
taking False path
303 fclose(cdrom_file);
304 return NULL;
305 }
306
307 return Py_BuildValue("O", cdrom_file_object);
308 }
when Py_BuildValue() succeeds
ob_refcnt is now refs: 1 + N where N >= 1
309