190 static PyObject* cdrom_open(PyObject *self, PyObject *args)
191 {
192 int cdrom_fd;
193 FILE *cdrom_file;
194 char *cdrom_device = CDDB_DEFAULT_CDROM_DEVICE;
195 int cdrom_open_flags = CDDB_DEFAULT_CDROM_FLAGS;
196
197 PyObject *cdrom_file_object;
198
199 if (!PyArg_ParseTuple(args, "|si", &cdrom_device, &cdrom_open_flags))
200 return NULL;
when PyArg_ParseTuple() succeeds
taking False path
201
202 cdrom_fd = open(cdrom_device, cdrom_open_flags);
203
204 if (cdrom_fd == -1) {
205 PyErr_SetFromErrno(cdrom_error);
when considering range: -0x80000000 <= value <= -2
taking False path
206 return NULL;
207 }
208
209 cdrom_file = fdopen(cdrom_fd, "r");
210
211 if (cdrom_file == NULL) {
212 PyErr_SetFromErrno(cdrom_error);
when treating unknown struct FILE * from src/disc/cdrommodule.c:210 as non-NULL
taking False path
213 return NULL;
214 }
215
216 cdrom_file_object = PyFile_FromFile(cdrom_file, cdrom_device, "r", cdrom_close);
217
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
218 if (cdrom_file_object == NULL) {
219 PyErr_SetString(cdrom_error, "Internal conversion from file pointer to Python object failed");
taking False path
220 fclose(cdrom_file);
221 return NULL;
222 }
223
224 return Py_BuildValue("O", cdrom_file_object);
225 }
when Py_BuildValue() succeeds
ob_refcnt is now refs: 1 + N where N >= 1
226