567 static PyObject *
568 urj_pyc_addpart (urj_pychain_t *self, PyObject *args)
569 {
570 urj_chain_t *urc = self->urchain;
571 long unsigned len;
572
573 if (!PyArg_ParseTuple (args, "i", &len))
when PyArg_ParseTuple() succeeds
taking False path
574 return NULL;
575
576 if (!urj_pyc_precheck (urc, UPRC_CBL))
when considering value == (int)0 from chain.c:576
taking True path
577 return NULL;
578
579 if (urj_tap_manual_add (urc, len) < 0)
580 {
581 PyErr_SetString (PyExc_RuntimeError,
582 _("urj_tap_manual_add failed"));
583 return NULL;
584 }
585
586 if (urc->parts == NULL)
587 {
588 PyErr_SetString (PyExc_RuntimeError,
589 _("addpart: internal error; no parts."));
590 return NULL;
591 }
592
593 // @@@@ RFHH this cannot be
594 if (urc->parts->len == 0)
595 {
596 urj_part_parts_free (urc->parts);
597 self->urchain->parts = NULL;
598 PyErr_SetString (PyExc_RuntimeError,
599 _("addpart: internal error; parts->len==0."));
600 return NULL;
601 }
602
603 urj_part_parts_set_instruction (urc->parts, "BYPASS");
604 urj_tap_chain_shift_instructions (urc);
605 return Py_BuildValue ("");
606 }
returning (PyObject*)NULL without setting an exception