exception.h revision 9663:ace9a2ac3683
1/* 2 libparted - a library for manipulating disk partitions 3 Copyright (C) 1999, 2000, 2007 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17*/ 18 19/** 20 * \addtogroup PedException 21 * @{ 22 */ 23 24/** \file exception.h */ 25 26#ifndef PED_EXCEPTION_H_INCLUDED 27#define PED_EXCEPTION_H_INCLUDED 28 29typedef struct _PedException PedException; 30 31/** 32 * Exception type 33 */ 34enum _PedExceptionType { 35 PED_EXCEPTION_INFORMATION=1, 36 PED_EXCEPTION_WARNING=2, 37 PED_EXCEPTION_ERROR=3, 38 PED_EXCEPTION_FATAL=4, 39 PED_EXCEPTION_BUG=5, 40 PED_EXCEPTION_NO_FEATURE=6, 41}; 42typedef enum _PedExceptionType PedExceptionType; 43 44/** 45 * Option for resolving the exception 46 */ 47enum _PedExceptionOption { 48 PED_EXCEPTION_UNHANDLED=0, 49 PED_EXCEPTION_FIX=1, 50 PED_EXCEPTION_YES=2, 51 PED_EXCEPTION_NO=4, 52 PED_EXCEPTION_OK=8, 53 PED_EXCEPTION_RETRY=16, 54 PED_EXCEPTION_IGNORE=32, 55 PED_EXCEPTION_CANCEL=64, 56}; 57typedef enum _PedExceptionOption PedExceptionOption; 58#define PED_EXCEPTION_OK_CANCEL (PED_EXCEPTION_OK + PED_EXCEPTION_CANCEL) 59#define PED_EXCEPTION_YES_NO (PED_EXCEPTION_YES + PED_EXCEPTION_NO) 60#define PED_EXCEPTION_YES_NO_CANCEL (PED_EXCEPTION_YES_NO \ 61 + PED_EXCEPTION_CANCEL) 62#define PED_EXCEPTION_IGNORE_CANCEL (PED_EXCEPTION_IGNORE \ 63 + PED_EXCEPTION_CANCEL) 64#define PED_EXCEPTION_RETRY_CANCEL (PED_EXCEPTION_RETRY + PED_EXCEPTION_CANCEL) 65#define PED_EXCEPTION_RETRY_IGNORE_CANCEL (PED_EXCEPTION_RETRY \ 66 + PED_EXCEPTION_IGNORE_CANCEL) 67#define PED_EXCEPTION_OPTION_FIRST PED_EXCEPTION_FIX 68#define PED_EXCEPTION_OPTION_LAST PED_EXCEPTION_CANCEL 69 70/** 71 * Structure with information about exception 72 */ 73struct _PedException { 74 char* message; /**< text describing what the event was */ 75 PedExceptionType type; /**< type of exception */ 76 PedExceptionOption options; /**< ORed list of options that 77 the exception handler can 78 return (the ways an exception 79 can be resolved) */ 80}; 81 82typedef PedExceptionOption (PedExceptionHandler) (PedException* ex); 83 84extern int ped_exception; /* set to true if there's an exception */ 85 86extern char* ped_exception_get_type_string (PedExceptionType ex_type); 87extern char* ped_exception_get_option_string (PedExceptionOption ex_opt); 88 89extern void ped_exception_set_handler (PedExceptionHandler* handler); 90extern PedExceptionHandler *ped_exception_get_handler(void); 91 92extern PedExceptionOption ped_exception_default_handler (PedException* ex); 93 94extern PedExceptionOption ped_exception_throw (PedExceptionType ex_type, 95 PedExceptionOption ex_opt, 96 const char* message, 97 ...); 98/* rethrows an exception - i.e. calls the exception handler, (or returns a 99 code to return to pass up higher) */ 100extern PedExceptionOption ped_exception_rethrow (); 101 102/* frees an exception, indicating that the exception has been handled. 103 Calling an exception handler counts. */ 104extern void ped_exception_catch (); 105 106/* indicate that exceptions should not go to the exception handler, but passed 107 up to the calling function(s) */ 108extern void ped_exception_fetch_all (); 109 110/* indicate that exceptions should invoke the exception handler */ 111extern void ped_exception_leave_all (); 112 113#endif /* PED_EXCEPTION_H_INCLUDED */ 114 115/** @} */ 116 117