Commit b1702fb16ca6df341a4b784476904e28025c17f1
1 parent
cfc1f6fc
more tweaking of C error interface
git-svn-id: svn+q:///qpdf/trunk@894 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing
4 changed files
with
33 additions
and
4 deletions
include/qpdf/Constants.h
| ... | ... | @@ -17,7 +17,8 @@ |
| 17 | 17 | |
| 18 | 18 | enum qpdf_error_code_e |
| 19 | 19 | { |
| 20 | - qpdf_e_internal = 1, /* logic/programming error -- indicates bug */ | |
| 20 | + qpdf_e_success = 0, | |
| 21 | + qpdf_e_internal, /* logic/programming error -- indicates bug */ | |
| 21 | 22 | qpdf_e_system, /* I/O error, memory error, etc. */ |
| 22 | 23 | qpdf_e_unsupported, /* PDF feature not (yet) supported by qpdf */ |
| 23 | 24 | qpdf_e_password, /* incorrect password for encrypted file */ | ... | ... |
include/qpdf/qpdf-c.h
| ... | ... | @@ -142,8 +142,7 @@ extern "C" { |
| 142 | 142 | char const* qpdf_get_error_full_text(qpdf_data q, qpdf_error e); |
| 143 | 143 | |
| 144 | 144 | /* Use these functions to extract individual fields from the |
| 145 | - * error; see QPDFExc.hh for details. It is invalid for e to be a | |
| 146 | - * null pointer for any of these calls. */ | |
| 145 | + * error; see QPDFExc.hh for details. */ | |
| 147 | 146 | QPDF_DLL |
| 148 | 147 | enum qpdf_error_code_e qpdf_get_error_code(qpdf_data q, qpdf_error e); |
| 149 | 148 | QPDF_DLL | ... | ... |
libqpdf/qpdf-c.cc
| ... | ... | @@ -166,26 +166,46 @@ qpdf_error qpdf_next_warning(qpdf_data qpdf) |
| 166 | 166 | |
| 167 | 167 | char const* qpdf_get_error_full_text(qpdf_data qpdf, qpdf_error e) |
| 168 | 168 | { |
| 169 | + if (e == 0) | |
| 170 | + { | |
| 171 | + return ""; | |
| 172 | + } | |
| 169 | 173 | return e->exc.getPointer()->what(); |
| 170 | 174 | } |
| 171 | 175 | |
| 172 | 176 | enum qpdf_error_code_e qpdf_get_error_code(qpdf_data qpdf, qpdf_error e) |
| 173 | 177 | { |
| 178 | + if (e == 0) | |
| 179 | + { | |
| 180 | + return qpdf_e_success; | |
| 181 | + } | |
| 174 | 182 | return e->exc.getPointer()->getErrorCode(); |
| 175 | 183 | } |
| 176 | 184 | |
| 177 | 185 | char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e) |
| 178 | 186 | { |
| 187 | + if (e == 0) | |
| 188 | + { | |
| 189 | + return ""; | |
| 190 | + } | |
| 179 | 191 | return e->exc.getPointer()->getFilename().c_str(); |
| 180 | 192 | } |
| 181 | 193 | |
| 182 | 194 | unsigned long qpdf_get_error_file_position(qpdf_data qpdf, qpdf_error e) |
| 183 | 195 | { |
| 196 | + if (e == 0) | |
| 197 | + { | |
| 198 | + return 0; | |
| 199 | + } | |
| 184 | 200 | return e->exc.getPointer()->getFilePosition(); |
| 185 | 201 | } |
| 186 | 202 | |
| 187 | 203 | char const* qpdf_get_error_message_detail(qpdf_data qpdf, qpdf_error e) |
| 188 | 204 | { |
| 205 | + if (e == 0) | |
| 206 | + { | |
| 207 | + return ""; | |
| 208 | + } | |
| 189 | 209 | return e->exc.getPointer()->getMessageDetail().c_str(); |
| 190 | 210 | } |
| 191 | 211 | ... | ... |
qpdf/qpdf-ctest.c
| ... | ... | @@ -18,15 +18,24 @@ static void report_errors() |
| 18 | 18 | printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); |
| 19 | 19 | printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); |
| 20 | 20 | } |
| 21 | + e = qpdf_get_error(qpdf); | |
| 21 | 22 | if (qpdf_has_error(qpdf)) |
| 22 | 23 | { |
| 23 | - e = qpdf_get_error(qpdf); | |
| 24 | 24 | printf("error: %s\n", qpdf_get_error_full_text(qpdf, e)); |
| 25 | 25 | printf(" code: %d\n", qpdf_get_error_code(qpdf, e)); |
| 26 | 26 | printf(" file: %s\n", qpdf_get_error_filename(qpdf, e)); |
| 27 | 27 | printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); |
| 28 | 28 | printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); |
| 29 | 29 | } |
| 30 | + else | |
| 31 | + { | |
| 32 | + assert(e == 0); | |
| 33 | + assert(qpdf_get_error_code(qpdf, e) == qpdf_e_success); | |
| 34 | + (void)qpdf_get_error_full_text(qpdf, e); | |
| 35 | + (void)qpdf_get_error_filename(qpdf, e); | |
| 36 | + (void)qpdf_get_error_file_position(qpdf, e); | |
| 37 | + (void)qpdf_get_error_message_detail(qpdf, e); | |
| 38 | + } | |
| 30 | 39 | } |
| 31 | 40 | |
| 32 | 41 | static void test01(char const* infile, | ... | ... |