mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-01 10:27:03 +03:00
31 lines
1.1 KiB
Plaintext
31 lines
1.1 KiB
Plaintext
|
Error handling
|
||
|
==============
|
||
|
|
||
|
This section describes error handling in the code.
|
||
|
|
||
|
The most common serious error is memory exhaustion. If malloc(), strdup(), etc.
|
||
|
fails, clean up and free any partially complete structures leaving data in a
|
||
|
consistent state, and return a value which indicates failure, eg. 0 for
|
||
|
functions which return a pointer (document the value in the function
|
||
|
documentation). The caller should then propagate the failure up in the same way.
|
||
|
At some point, the error should stop being passed up and be reported to the user
|
||
|
using
|
||
|
|
||
|
warn_user("NoMemory", 0);
|
||
|
|
||
|
The other common error is one returned by a RISC OS SWI. Always use "X" SWIs,
|
||
|
something like this:
|
||
|
|
||
|
os_error *error;
|
||
|
error = xwimp_get_pointer_info(&pointer);
|
||
|
if (error) {
|
||
|
LOG(("xwimp_get_pointer_info: 0x%x: %s\n",
|
||
|
error->errnum, error->errmess));
|
||
|
warn_user("WimpError", error->errmess);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
If an error occurs during initialisation, in most cases exit immediately using
|
||
|
die(), since this indicates that there is already insufficient memory, or a
|
||
|
resource file is corrupted, etc.
|