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,7 +17,8 @@ | ||
| 17 | 17 | ||
| 18 | enum qpdf_error_code_e | 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 | qpdf_e_system, /* I/O error, memory error, etc. */ | 22 | qpdf_e_system, /* I/O error, memory error, etc. */ |
| 22 | qpdf_e_unsupported, /* PDF feature not (yet) supported by qpdf */ | 23 | qpdf_e_unsupported, /* PDF feature not (yet) supported by qpdf */ |
| 23 | qpdf_e_password, /* incorrect password for encrypted file */ | 24 | qpdf_e_password, /* incorrect password for encrypted file */ |
include/qpdf/qpdf-c.h
| @@ -142,8 +142,7 @@ extern "C" { | @@ -142,8 +142,7 @@ extern "C" { | ||
| 142 | char const* qpdf_get_error_full_text(qpdf_data q, qpdf_error e); | 142 | char const* qpdf_get_error_full_text(qpdf_data q, qpdf_error e); |
| 143 | 143 | ||
| 144 | /* Use these functions to extract individual fields from the | 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 | QPDF_DLL | 146 | QPDF_DLL |
| 148 | enum qpdf_error_code_e qpdf_get_error_code(qpdf_data q, qpdf_error e); | 147 | enum qpdf_error_code_e qpdf_get_error_code(qpdf_data q, qpdf_error e); |
| 149 | QPDF_DLL | 148 | QPDF_DLL |
libqpdf/qpdf-c.cc
| @@ -166,26 +166,46 @@ qpdf_error qpdf_next_warning(qpdf_data qpdf) | @@ -166,26 +166,46 @@ qpdf_error qpdf_next_warning(qpdf_data qpdf) | ||
| 166 | 166 | ||
| 167 | char const* qpdf_get_error_full_text(qpdf_data qpdf, qpdf_error e) | 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 | return e->exc.getPointer()->what(); | 173 | return e->exc.getPointer()->what(); |
| 170 | } | 174 | } |
| 171 | 175 | ||
| 172 | enum qpdf_error_code_e qpdf_get_error_code(qpdf_data qpdf, qpdf_error e) | 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 | return e->exc.getPointer()->getErrorCode(); | 182 | return e->exc.getPointer()->getErrorCode(); |
| 175 | } | 183 | } |
| 176 | 184 | ||
| 177 | char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e) | 185 | char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e) |
| 178 | { | 186 | { |
| 187 | + if (e == 0) | ||
| 188 | + { | ||
| 189 | + return ""; | ||
| 190 | + } | ||
| 179 | return e->exc.getPointer()->getFilename().c_str(); | 191 | return e->exc.getPointer()->getFilename().c_str(); |
| 180 | } | 192 | } |
| 181 | 193 | ||
| 182 | unsigned long qpdf_get_error_file_position(qpdf_data qpdf, qpdf_error e) | 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 | return e->exc.getPointer()->getFilePosition(); | 200 | return e->exc.getPointer()->getFilePosition(); |
| 185 | } | 201 | } |
| 186 | 202 | ||
| 187 | char const* qpdf_get_error_message_detail(qpdf_data qpdf, qpdf_error e) | 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 | return e->exc.getPointer()->getMessageDetail().c_str(); | 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,15 +18,24 @@ static void report_errors() | ||
| 18 | printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); | 18 | printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); |
| 19 | printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); | 19 | printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); |
| 20 | } | 20 | } |
| 21 | + e = qpdf_get_error(qpdf); | ||
| 21 | if (qpdf_has_error(qpdf)) | 22 | if (qpdf_has_error(qpdf)) |
| 22 | { | 23 | { |
| 23 | - e = qpdf_get_error(qpdf); | ||
| 24 | printf("error: %s\n", qpdf_get_error_full_text(qpdf, e)); | 24 | printf("error: %s\n", qpdf_get_error_full_text(qpdf, e)); |
| 25 | printf(" code: %d\n", qpdf_get_error_code(qpdf, e)); | 25 | printf(" code: %d\n", qpdf_get_error_code(qpdf, e)); |
| 26 | printf(" file: %s\n", qpdf_get_error_filename(qpdf, e)); | 26 | printf(" file: %s\n", qpdf_get_error_filename(qpdf, e)); |
| 27 | printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); | 27 | printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); |
| 28 | printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); | 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 | static void test01(char const* infile, | 41 | static void test01(char const* infile, |