src/lib/error.c
author Tero Marttila <terom@fixme.fi>
Mon, 25 Jan 2010 02:09:43 +0200
changeset 65 e02bede4a6e4
parent 59 80135bdfd343
child 69 1d188aa94aee
permissions -rw-r--r--
report invalid error codes/names better
#include "error.h"

/*
 * Mapping for error codes
 */
const char *error_names[PT_ERR_MAX] = {
    [PT_SUCCESS]                = "Success",
    [PT_ERR]                    = "Unspecified error",
    [PT_ERR_MEM]                = "malloc()",

    [PT_ERR_PATH]               = "path",
    [PT_ERR_OPEN_MODE]          = "open_mode",
    
    [PT_ERR_IMG_STAT]           = "stat(.png)",
    [PT_ERR_IMG_FOPEN]          = "fopen(.png)",
    
    [PT_ERR_PNG_CREATE]         = "png_create()",
    [PT_ERR_PNG]                = "png_*()",
   
    [PT_ERR_CACHE_STAT]         = "stat(.cache)",
    [PT_ERR_CACHE_OPEN_READ]    = "open(.cache)",
    [PT_ERR_CACHE_OPEN_TMP]     = "open(.tmp)",
    [PT_ERR_CACHE_SEEK]         = "seek(.cache)",
    [PT_ERR_CACHE_READ]         = "read(.cache)",
    [PT_ERR_CACHE_WRITE]        = "write(.cache)",
    [PT_ERR_CACHE_TRUNC]        = "truncate(.cache)",
    [PT_ERR_CACHE_MMAP]         = "mmap(.cache)",
    [PT_ERR_CACHE_RENAME_TMP]   = "rename(.tmp, .cache)",
    [PT_ERR_CACHE_VERSION]      = "Incompatible .cache version",
    [PT_ERR_CACHE_MUNMAP]       = "munmap(cache->file)",
    [PT_ERR_CACHE_CLOSE]        = "close(cache->fd)",

    [PT_ERR_PTHREAD_CREATE]     = "pthread_create",
    [PT_ERR_CTX_SHUTDOWN]       = "pt_ctx is shutting down",

    [PT_ERR_TILE_CLIP]          = "Tile outside of image",
    [PT_ERR_ZOOM]               = "Invalid zoom level",
};

const char *pt_strerror (int err)
{
    if (err < 0)
        err = -err;

    if (err < PT_SUCCESS || err >= PT_ERR_MAX)
        return "Invalid error code";
    
    else if (!error_names[err])
        return "Missing string for error code";

    else
        return error_names[err];
}