pushed exception setting into the relevant function, removed redundant exceptions
The following functions set exceptions automatically: PyImport_ImportModule, PyObject_GetAttrString, PyArg_ParseTuple. All the exception setting functions in c_overviewer should act the same way and set their own exceptions before returning. Notably, PyDict_GetItemString does *not* set exceptions, so it is handled specially in render_mode_find_interface.
This commit is contained in:
@@ -45,47 +45,47 @@ PyObject *init_chunk_render(PyObject *self, PyObject *args) {
|
|||||||
textures = PyImport_ImportModule("overviewer_core.textures");
|
textures = PyImport_ImportModule("overviewer_core.textures");
|
||||||
/* ensure none of these pointers are NULL */
|
/* ensure none of these pointers are NULL */
|
||||||
if ((!textures)) {
|
if ((!textures)) {
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to import overviewer_core.textures");
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
chunk_mod = PyImport_ImportModule("overviewer_core.chunk");
|
chunk_mod = PyImport_ImportModule("overviewer_core.chunk");
|
||||||
/* ensure none of these pointers are NULL */
|
/* ensure none of these pointers are NULL */
|
||||||
if ((!chunk_mod)) {
|
if ((!chunk_mod)) {
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to import overviewer_core.chunk");
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
blockmap = PyObject_GetAttrString(textures, "blockmap");
|
blockmap = PyObject_GetAttrString(textures, "blockmap");
|
||||||
if (!blockmap)
|
if (!blockmap)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.blockmap");
|
return NULL;
|
||||||
|
|
||||||
tmp = PyObject_GetAttrString(textures, "max_blockid");
|
tmp = PyObject_GetAttrString(textures, "max_blockid");
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.max_blockid");
|
return NULL;
|
||||||
max_blockid = PyInt_AsLong(tmp);
|
max_blockid = PyInt_AsLong(tmp);
|
||||||
Py_DECREF(tmp);
|
Py_DECREF(tmp);
|
||||||
|
|
||||||
tmp = PyObject_GetAttrString(textures, "max_data");
|
tmp = PyObject_GetAttrString(textures, "max_data");
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.max_blockid");
|
return NULL;
|
||||||
max_data = PyInt_AsLong(tmp);
|
max_data = PyInt_AsLong(tmp);
|
||||||
Py_DECREF(tmp);
|
Py_DECREF(tmp);
|
||||||
|
|
||||||
/* assemble the property table */
|
/* assemble the property table */
|
||||||
known_blocks = PyObject_GetAttrString(textures, "known_blocks");
|
known_blocks = PyObject_GetAttrString(textures, "known_blocks");
|
||||||
if (!known_blocks)
|
if (!known_blocks)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.known_blocks");
|
return NULL;
|
||||||
transparent_blocks = PyObject_GetAttrString(textures, "transparent_blocks");
|
transparent_blocks = PyObject_GetAttrString(textures, "transparent_blocks");
|
||||||
if (!transparent_blocks)
|
if (!transparent_blocks)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.transparent_blocks");
|
return NULL;
|
||||||
solid_blocks = PyObject_GetAttrString(textures, "solid_blocks");
|
solid_blocks = PyObject_GetAttrString(textures, "solid_blocks");
|
||||||
if (!solid_blocks)
|
if (!solid_blocks)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.solid_blocks");
|
return NULL;
|
||||||
fluid_blocks = PyObject_GetAttrString(textures, "fluid_blocks");
|
fluid_blocks = PyObject_GetAttrString(textures, "fluid_blocks");
|
||||||
if (!fluid_blocks)
|
if (!fluid_blocks)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.fluid_blocks");
|
return NULL;
|
||||||
nospawn_blocks = PyObject_GetAttrString(textures, "nospawn_blocks");
|
nospawn_blocks = PyObject_GetAttrString(textures, "nospawn_blocks");
|
||||||
if (!nospawn_blocks)
|
if (!nospawn_blocks)
|
||||||
return PyErr_Format(PyExc_ImportError, "Failed to get textures.nospawn_blocks");
|
return NULL;
|
||||||
|
|
||||||
block_properties = calloc(max_blockid, sizeof(unsigned char));
|
block_properties = calloc(max_blockid, sizeof(unsigned char));
|
||||||
for (i = 0; i < max_blockid; i++) {
|
for (i = 0; i < max_blockid; i++) {
|
||||||
@@ -104,7 +104,7 @@ PyObject *init_chunk_render(PyObject *self, PyObject *args) {
|
|||||||
|
|
||||||
Py_DECREF(block);
|
Py_DECREF(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -362,7 +362,7 @@ chunk_render(PyObject *self, PyObject *args) {
|
|||||||
PyObject *t = NULL;
|
PyObject *t = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "OOiiO", &state.self, &state.img, &xoff, &yoff, &state.blockdata_expanded))
|
if (!PyArg_ParseTuple(args, "OOiiO", &state.self, &state.img, &xoff, &yoff, &state.blockdata_expanded))
|
||||||
return PyErr_Format(PyExc_ValueError, "Failed to ParseTuple");
|
return NULL;
|
||||||
|
|
||||||
/* fill in important modules */
|
/* fill in important modules */
|
||||||
state.textures = textures;
|
state.textures = textures;
|
||||||
|
|||||||
@@ -106,13 +106,13 @@ render_mode_find_interface(const char *mode) {
|
|||||||
/* check for custom modes */
|
/* check for custom modes */
|
||||||
custom = PyDict_GetItemString(custom_render_modes, mode);
|
custom = PyDict_GetItemString(custom_render_modes, mode);
|
||||||
if (custom == NULL)
|
if (custom == NULL)
|
||||||
return NULL;
|
return PyErr_Format(PyExc_RuntimeError, "Failed to find rendermode interface (custom not found)");
|
||||||
custom = PyDict_GetItemString(custom, "parent");
|
custom = PyDict_GetItemString(custom, "parent");
|
||||||
if (custom == NULL)
|
if (custom == NULL)
|
||||||
return NULL;
|
return PyErr_Format(PyExc_RuntimeError, "Failed to find rendermode interface (parent not found)");
|
||||||
custom_parent = PyString_AsString(custom);
|
custom_parent = PyString_AsString(custom);
|
||||||
if (custom_parent == NULL)
|
if (custom_parent == NULL)
|
||||||
return NULL;
|
return NULL; // PyString_AsString sets an exception
|
||||||
|
|
||||||
return render_mode_find_interface(custom_parent);
|
return render_mode_find_interface(custom_parent);
|
||||||
}
|
}
|
||||||
@@ -124,11 +124,11 @@ RenderMode *render_mode_create(const char *mode, RenderState *state) {
|
|||||||
|
|
||||||
iface = render_mode_find_interface(mode);
|
iface = render_mode_find_interface(mode);
|
||||||
if (iface == NULL)
|
if (iface == NULL)
|
||||||
return PyErr_Format(PyExc_RuntimeError, "Failed to find rendermode interface");
|
return NULL;
|
||||||
|
|
||||||
options = render_mode_create_options(mode);
|
options = render_mode_create_options(mode);
|
||||||
if (options == NULL)
|
if (options == NULL)
|
||||||
return PyErr_Format(PyExc_RuntimeError, "Failed to create rendermode options");
|
return NULL;
|
||||||
|
|
||||||
ret = calloc(1, sizeof(RenderMode));
|
ret = calloc(1, sizeof(RenderMode));
|
||||||
if (ret == NULL) {
|
if (ret == NULL) {
|
||||||
@@ -150,13 +150,13 @@ RenderMode *render_mode_create(const char *mode, RenderState *state) {
|
|||||||
Py_DECREF(options);
|
Py_DECREF(options);
|
||||||
free(ret->mode);
|
free(ret->mode);
|
||||||
free(ret);
|
free(ret);
|
||||||
return PyErr_Format(PyExc_RuntimeError, "Failed to start rendermode interface");
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_DECREF(options);
|
Py_DECREF(options);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void render_mode_destroy(RenderMode *self) {
|
void render_mode_destroy(RenderMode *self) {
|
||||||
self->iface->finish(self->mode, self->state);
|
self->iface->finish(self->mode, self->state);
|
||||||
free(self->mode);
|
free(self->mode);
|
||||||
|
|||||||
Reference in New Issue
Block a user