Commit b1702fb16ca6df341a4b784476904e28025c17f1

Authored by Jay Berkenbilt
1 parent cfc1f6fc

more tweaking of C error interface

git-svn-id: svn+q:///qpdf/trunk@894 71b93d88-0707-0410-a8cf-f5a4172ac649
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,