344 static int pshoutobj_setattr(PyObject* self, char* name, PyObject* v) {
345 ShoutObject* me = (ShoutObject*)self;
346 ShoutObjectAttr* attr;
347
348 if (!me->attr && !(me->attr = PyDict_New()))
349 return -1;
when treating unknown struct PyObject * from shout.c:349 as NULL
taking True path
when PyDict_New() succeeds
taking False path
PyDictObject allocated at: if (!me->attr && !(me->attr = PyDict_New()))
ob_refcnt is now refs: 1 + N where N >= 0
350
351 if (v == NULL)
352 return -1;
taking False path
353
354 for (attr = ShoutObjectAttrs; attr->name; attr++) {
355 if (!strcmp(attr->name, name)) {
when treating unknown const char * from shout.c:355 as non-NULL
taking True path
when treating unknown const char * from shout.c:355 as NULL
taking False path
356 if (v != Py_None && attr->set(attr, me, v) != SHOUTERR_SUCCESS) {
when considering range: -0x80000000 <= value <= -1
taking False path
357 if (!PyErr_Occurred())
358 PyErr_SetString(ShoutError, shout_get_error(me->conn));
359 return -1;
360 }
361 break;
362 }
363 }
364
365 return PyDict_SetItemString(me->attr, name, v);
366 }
when treating unknown char * from shout.c:345 as non-NULL
when PyDict_SetItemString() succeeds
367