From 7a87f47542c225e9c2891a2061b2b01604a26ef8 Mon Sep 17 00:00:00 2001 From: Vreixo Formoso Date: Wed, 20 Aug 2008 00:05:27 +0200 Subject: [PATCH] Prevent negative priorities on wrong error codes (fixes bug #135). --- .settings/org.eclipse.cdt.core.prefs | 2 +- libisofs/messages.c | 146 +++++++++++++-------------- 2 files changed, 74 insertions(+), 74 deletions(-) diff --git a/.settings/org.eclipse.cdt.core.prefs b/.settings/org.eclipse.cdt.core.prefs index 7373836..e4c684e 100644 --- a/.settings/org.eclipse.cdt.core.prefs +++ b/.settings/org.eclipse.cdt.core.prefs @@ -1,4 +1,4 @@ -#Fri Dec 28 21:07:56 CET 2007 +#Tue Aug 19 23:58:44 CEST 2008 eclipse.preferences.version=1 indexer/filesToParseUpFront= indexer/indexAllFiles=true diff --git a/libisofs/messages.c b/libisofs/messages.c index 8b55b45..cd68ca6 100644 --- a/libisofs/messages.c +++ b/libisofs/messages.c @@ -1,11 +1,11 @@ /* * Copyright (c) 2007 Vreixo Formoso - * - * This file is part of the libisofs project; you can redistribute it and/or - * modify it under the terms of the GNU General Public License version 2 as + * + * This file is part of the libisofs project; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. See COPYING file for details. */ -#include +#include #include #include #include @@ -14,9 +14,9 @@ #include "libisofs.h" #include "messages.h" -/* +/* * error codes are 32 bit numbers, that follow the following conventions: - * + * * bit 31 (MSB) -> 1 (to make the value always negative) * bits 30-24 -> Encoded severity (Use ISO_ERR_SEV to translate an error code * to a LIBISO_MSGS_SEV_* constant) @@ -40,7 +40,7 @@ * bits 15-0 -> Error code */ #define ISO_ERR_SEV(e) (e & 0x7F000000) -#define ISO_ERR_PRIO(e) ((e & 0x00F00000) << 8) +#define ISO_ERR_PRIO(e) ((e & 0x00700000) << 8) #define ISO_ERR_CODE(e) ((e & 0x0000FFFF) | 0x00030000) int iso_message_id = LIBISO_MSGS_ORIGIN_IMAGE_BASE; @@ -77,7 +77,7 @@ int iso_set_abort_severity(char *severity) ret = libiso_msgs__text_to_sev(severity, &sevno, 0); if (ret <= 0) return ISO_WRONG_ARG_VALUE; - if (sevno > LIBISO_MSGS_SEV_FAILURE || sevno < LIBISO_MSGS_SEV_NOTE) + if (sevno > LIBISO_MSGS_SEV_FAILURE || sevno < LIBISO_MSGS_SEV_NOTE) return ISO_WRONG_ARG_VALUE; ret = abort_threshold; abort_threshold = sevno; @@ -100,109 +100,109 @@ void iso_msg_debug(int imgid, const char *fmt, ...) const char *iso_error_to_msg(int errcode) { switch(errcode) { - case ISO_CANCELED: + case ISO_CANCELED: return "Operation canceled"; - case ISO_FATAL_ERROR: + case ISO_FATAL_ERROR: return "Unknown or unexpected fatal error"; - case ISO_ERROR: + case ISO_ERROR: return "Unknown or unexpected error"; - case ISO_ASSERT_FAILURE: + case ISO_ASSERT_FAILURE: return "Internal programming error. Please report this bug"; - case ISO_NULL_POINTER: + case ISO_NULL_POINTER: return "NULL pointer as value for an arg. that doesn't allow NULL"; - case ISO_OUT_OF_MEM: + case ISO_OUT_OF_MEM: return "Memory allocation error"; - case ISO_INTERRUPTED: + case ISO_INTERRUPTED: return "Interrupted by a signal"; - case ISO_WRONG_ARG_VALUE: + case ISO_WRONG_ARG_VALUE: return "Invalid parameter value"; - case ISO_THREAD_ERROR: + case ISO_THREAD_ERROR: return "Can't create a needed thread"; - case ISO_WRITE_ERROR: + case ISO_WRITE_ERROR: return "Write error"; - case ISO_BUF_READ_ERROR: + case ISO_BUF_READ_ERROR: return "Buffer read error"; - case ISO_NODE_ALREADY_ADDED: + case ISO_NODE_ALREADY_ADDED: return "Trying to add to a dir a node already added to a dir"; - case ISO_NODE_NAME_NOT_UNIQUE: + case ISO_NODE_NAME_NOT_UNIQUE: return "Node with same name already exists"; - case ISO_NODE_NOT_ADDED_TO_DIR: + case ISO_NODE_NOT_ADDED_TO_DIR: return "Trying to remove a node that was not added to dir"; - case ISO_NODE_DOESNT_EXIST: + case ISO_NODE_DOESNT_EXIST: return "A requested node does not exist"; - case ISO_IMAGE_ALREADY_BOOTABLE: + case ISO_IMAGE_ALREADY_BOOTABLE: return "Try to set the boot image of an already bootable image"; - case ISO_BOOT_IMAGE_NOT_VALID: + case ISO_BOOT_IMAGE_NOT_VALID: return "Trying to use an invalid file as boot image"; - case ISO_FILE_ERROR: + case ISO_FILE_ERROR: return "Error on file operation"; - case ISO_FILE_ALREADY_OPENED: + case ISO_FILE_ALREADY_OPENED: return "Trying to open an already opened file"; - case ISO_FILE_ACCESS_DENIED: + case ISO_FILE_ACCESS_DENIED: return "Access to file is not allowed"; - case ISO_FILE_BAD_PATH: + case ISO_FILE_BAD_PATH: return "Incorrect path to file"; - case ISO_FILE_DOESNT_EXIST: + case ISO_FILE_DOESNT_EXIST: return "The file does not exist in the filesystem"; - case ISO_FILE_NOT_OPENED: + case ISO_FILE_NOT_OPENED: return "Trying to read or close a file not opened"; - case ISO_FILE_IS_DIR: + case ISO_FILE_IS_DIR: return "Directory used where no dir is expected"; - case ISO_FILE_READ_ERROR: + case ISO_FILE_READ_ERROR: return "Read error"; - case ISO_FILE_IS_NOT_DIR: + case ISO_FILE_IS_NOT_DIR: return "Not dir used where a dir is expected"; - case ISO_FILE_IS_NOT_SYMLINK: + case ISO_FILE_IS_NOT_SYMLINK: return "Not symlink used where a symlink is expected"; - case ISO_FILE_SEEK_ERROR: + case ISO_FILE_SEEK_ERROR: return "Can't seek to specified location"; - case ISO_FILE_IGNORED: + case ISO_FILE_IGNORED: return "File not supported in ECMA-119 tree and thus ignored"; - case ISO_FILE_TOO_BIG: + case ISO_FILE_TOO_BIG: return "A file is bigger than supported by used standard"; - case ISO_FILE_CANT_WRITE: + case ISO_FILE_CANT_WRITE: return "File read error during image creation"; - case ISO_FILENAME_WRONG_CHARSET: + case ISO_FILENAME_WRONG_CHARSET: return "Can't convert filename to requested charset"; - case ISO_FILE_CANT_ADD: + case ISO_FILE_CANT_ADD: return "File can't be added to the tree"; - case ISO_FILE_IMGPATH_WRONG: + case ISO_FILE_IMGPATH_WRONG: return "File path break specification constraints and will be ignored"; - case ISO_CHARSET_CONV_ERROR: + case ISO_CHARSET_CONV_ERROR: return "Charset conversion error"; - case ISO_MANGLE_TOO_MUCH_FILES: + case ISO_MANGLE_TOO_MUCH_FILES: return "Too much files to mangle, can't guarantee unique file names"; - case ISO_WRONG_PVD: + case ISO_WRONG_PVD: return "Wrong or damaged Primary Volume Descriptor"; - case ISO_WRONG_RR: + case ISO_WRONG_RR: return "Wrong or damaged RR entry"; - case ISO_UNSUPPORTED_RR: + case ISO_UNSUPPORTED_RR: return "Unsupported RR feature"; - case ISO_WRONG_ECMA119: + case ISO_WRONG_ECMA119: return "Wrong or damaged ECMA-119"; - case ISO_UNSUPPORTED_ECMA119: + case ISO_UNSUPPORTED_ECMA119: return "Unsupported ECMA-119 feature"; - case ISO_WRONG_EL_TORITO: + case ISO_WRONG_EL_TORITO: return "Wrong or damaged El-Torito catalog"; - case ISO_UNSUPPORTED_EL_TORITO: + case ISO_UNSUPPORTED_EL_TORITO: return "Unsupported El-Torito feature"; - case ISO_ISOLINUX_CANT_PATCH: + case ISO_ISOLINUX_CANT_PATCH: return "Can't patch isolinux boot image"; - case ISO_UNSUPPORTED_SUSP: + case ISO_UNSUPPORTED_SUSP: return "Unsupported SUSP feature"; - case ISO_WRONG_RR_WARN: + case ISO_WRONG_RR_WARN: return "Error on a RR entry that can be ignored"; - case ISO_SUSP_UNHANDLED: + case ISO_SUSP_UNHANDLED: return "Error on a RR entry that can be ignored"; - case ISO_SUSP_MULTIPLE_ER: + case ISO_SUSP_MULTIPLE_ER: return "Multiple ER SUSP entries found"; - case ISO_UNSUPPORTED_VD: + case ISO_UNSUPPORTED_VD: return "Unsupported volume descriptor found"; - case ISO_EL_TORITO_WARN: + case ISO_EL_TORITO_WARN: return "El-Torito related warning"; - case ISO_IMAGE_WRITE_CANCELED: + case ISO_IMAGE_WRITE_CANCELED: return "Image write cancelled"; - case ISO_EL_TORITO_HIDDEN: + case ISO_EL_TORITO_HIDDEN: return "El-Torito image is hidden"; default: return "Unknown error"; @@ -213,7 +213,7 @@ int iso_msg_submit(int imgid, int errcode, int causedby, const char *fmt, ...) { char msg[MAX_MSG_LEN]; va_list ap; - + /* when called with ISO_CANCELED, we don't need to submit any message */ if (errcode == ISO_CANCELED && fmt == NULL) { return ISO_CANCELED; @@ -227,12 +227,12 @@ int iso_msg_submit(int imgid, int errcode, int causedby, const char *fmt, ...) strncpy(msg, iso_error_to_msg(errcode), MAX_MSG_LEN); } - libiso_msgs_submit(libiso_msgr, imgid, ISO_ERR_CODE(errcode), + libiso_msgs_submit(libiso_msgr, imgid, ISO_ERR_CODE(errcode), ISO_ERR_SEV(errcode), ISO_ERR_PRIO(errcode), msg, 0, 0); if (causedby != 0) { - snprintf(msg, MAX_MSG_LEN, " > Caused by: %s", + snprintf(msg, MAX_MSG_LEN, " > Caused by: %s", iso_error_to_msg(causedby)); - libiso_msgs_submit(libiso_msgr, imgid, ISO_ERR_CODE(causedby), + libiso_msgs_submit(libiso_msgr, imgid, ISO_ERR_CODE(causedby), LIBISO_MSGS_SEV_NOTE, LIBISO_MSGS_PRIO_LOW, msg, 0, 0); if (ISO_ERR_SEV(causedby) == LIBISO_MSGS_SEV_FATAL) { return ISO_CANCELED; @@ -246,11 +246,11 @@ int iso_msg_submit(int imgid, int errcode, int causedby, const char *fmt, ...) } } -/** +/** * Control queueing and stderr printing of messages from libisofs. * Severity may be one of "NEVER", "FATAL", "SORRY", "WARNING", "HINT", * "NOTE", "UPDATE", "DEBUG", "ALL". - * + * * @param queue_severity Gives the minimum limit for messages to be queued. * Default: "NEVER". If you queue messages then you * must consume them by iso_msgs_obtain(). @@ -259,7 +259,7 @@ int iso_msg_submit(int imgid, int errcode, int causedby, const char *fmt, ...) * @param print_id A text prefix to be printed before the message. * @return >0 for success, <=0 for error */ -int iso_set_msgs_severities(char *queue_severity, char *print_severity, +int iso_set_msgs_severities(char *queue_severity, char *print_severity, char *print_id) { int ret, queue_sevno, print_sevno; @@ -277,15 +277,15 @@ int iso_set_msgs_severities(char *queue_severity, char *print_severity, return 1; } -/** +/** * Obtain the oldest pending libisofs message from the queue which has at * least the given minimum_severity. This message and any older message of * lower severity will get discarded from the queue and is then lost forever. - * + * * Severity may be one of "NEVER", "FATAL", "SORRY", "WARNING", "HINT", * "NOTE", "UPDATE", "DEBUG", "ALL". To call with minimum_severity "NEVER" * will discard the whole queue. - * + * * @param error_code Will become a unique error code as listed in messages.h * @param imgid Id of the image that was issued the message. * @param msg_text Must provide at least ISO_MSGS_MESSAGE_LEN bytes. @@ -305,7 +305,7 @@ int iso_obtain_msgs(char *minimum_severity, int *error_code, int *imgid, ret = libiso_msgs__text_to_sev(minimum_severity, &minimum_sevno, 0); if (ret <= 0) return 0; - ret = libiso_msgs_obtain(libiso_msgr, &item, minimum_sevno, + ret = libiso_msgs_obtain(libiso_msgr, &item, minimum_sevno, LIBISO_MSGS_PRIO_ZERO, 0); if (ret <= 0) goto ex; @@ -319,7 +319,7 @@ int iso_obtain_msgs(char *minimum_severity, int *error_code, int *imgid, ret = libiso_msgs_item_get_origin(item, ×tamp, &pid, imgid, 0); if (ret <= 0) goto ex; - + severity[0]= 0; ret = libiso_msgs_item_get_rank(item, &sevno, &priority, 0); if (ret <= 0) @@ -394,7 +394,7 @@ int iso_sev_to_text(int severity_number, char **severity_name) * may be used by related libraries to their own compatible * messenger objects and thus to direct their messages to the libisofs * message queue. See also: libburn, API function burn_set_messenger(). - * + * * @return the handle. Do only use with compatible */ void *iso_get_messenger()