summaryrefslogtreecommitdiff
path: root/src/pdflib/pdcore/pc_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdflib/pdcore/pc_core.c')
-rw-r--r--src/pdflib/pdcore/pc_core.c95
1 files changed, 68 insertions, 27 deletions
diff --git a/src/pdflib/pdcore/pc_core.c b/src/pdflib/pdcore/pc_core.c
index 4617aec..2b26c91 100644
--- a/src/pdflib/pdcore/pc_core.c
+++ b/src/pdflib/pdcore/pc_core.c
@@ -10,7 +10,7 @@
| |
*---------------------------------------------------------------------------*/
-/* $Id: pc_core.c,v 1.1 2008/10/17 06:10:43 scuri Exp $
+/* $Id: pc_core.c,v 1.2 2009/10/20 18:12:26 scuri Exp $
*
* PDFlib core services
*
@@ -84,7 +84,8 @@ struct pdc_core_priv_s
/* the time of pdc_enter_api() */
/* ------------ error handling ------------ */
- pdc_bool in_error;
+ pdc_bool in_error; /* while initializing pdcore or */
+ /* while creating error resp. */
char * premsg;
char errbuf[PDC_ERRBUF_SIZE];
char errparms[4][PDC_ERRPARM_SIZE];
@@ -203,7 +204,17 @@ pdc_panic(pdc_core *pdc, const char *fmt, ...)
va_list ap;
va_start(ap, fmt);
- pdc_vsnprintf(pdc->pr->errbuf, PDC_ERRPARM_SIZE, fmt, ap);
+
+#if defined (PDC_NO_VSNPRINTF)
+ vsprintf(pdc->pr->errbuf, fmt, ap);
+#else
+#if defined(WIN32)
+ _vsnprintf(pdc->pr->errbuf, PDC_ERRPARM_SIZE, fmt, ap);
+#else
+ vsnprintf(pdc->pr->errbuf, PDC_ERRPARM_SIZE, fmt, ap);
+#endif
+#endif
+
va_end(ap);
(*pdc->pr->errorhandler)(pdc->pr->opaque, PDF_UnknownError,
@@ -364,7 +375,8 @@ pdc_new_core(
pdc->uniqueno = 0;
-#ifdef PDC_DEBUG
+
+#ifdef PDC_DEBUG
pdc->pr->hexdump = pdc_true;
#endif
@@ -378,11 +390,12 @@ pdc_new_core(
/* initialize error & exception handling.
*/
- pdc->pr->in_error = pdc_false;
+ pdc->pr->in_error = pdc_true; /* disable error messages */
pdc->pr->x_thrown = pdc_false;
pdc->pr->epcount = 0;
pdc->pr->errnum = 0;
pdc->pr->premsg = NULL;
+ pdc->pr->errbuf[0] = 0;
pdc->pr->apiname[0] = 0;
pdc->pr->x_sp = -1;
pdc->pr->x_ssize = PDC_XSTACK_INISIZE;
@@ -415,7 +428,19 @@ pdc_new_core(
pdc->pr->err_tables[i].ei = (pdc_error_info *) 0;
pdc_register_errtab(pdc, PDC_ET_CORE, core_errors, N_CORE_ERRORS);
+
+ /* initialize mempool for strings
+ */
pdc_init_strings(pdc);
+ if (pdc->bstr_pool == NULL || pdc->ustr_pool == NULL)
+ {
+ (*freeproc)(opaque, pdc);
+ return (pdc_core *) 0;
+ }
+
+ /* enable error messages
+ */
+ pdc->pr->in_error = pdc_false;
return pdc;
}
@@ -476,7 +501,8 @@ pdc_malloc(pdc_core *pdc, size_t size, const char *caller)
/* the behavior of malloc(0) is undefined in ANSI C, and may
* result in a NULL pointer return value which makes PDFlib bail out.
*/
- if (size == (size_t) 0 || (long) size < 0L) {
+ if (size == (size_t) 0 || (long) size < 0L)
+ {
size = (size_t) 1;
pdc_error(pdc, PDC_E_INT_ALLOC0, caller, 0, 0, 0);
}
@@ -506,7 +532,8 @@ pdc_calloc(pdc_core *pdc, size_t size, const char *caller)
if (logg1)
pdc_logg(pdc, "\ttry to calloc %ld bytes\n", size);
- if (size == (size_t) 0 || (long) size < 0L) {
+ if (size == (size_t) 0 || (long) size < 0L)
+ {
size = (size_t) 1;
pdc_error(pdc, PDC_E_INT_ALLOC0, caller, 0, 0, 0);
}
@@ -534,7 +561,8 @@ pdc_realloc(pdc_core *pdc, void *mem, size_t size, const char *caller)
if (logg1)
pdc_logg(pdc, "\ttry to realloc %p to %ld bytes\n", mem, size);
- if (size == (size_t) 0 || (long) size < 0L) {
+ if (size == (size_t) 0 || (long) size < 0L)
+ {
size = (size_t) 1;
pdc_error(pdc, PDC_E_INT_ALLOC0, caller, 0, 0, 0);
}
@@ -722,7 +750,7 @@ const char *pdc_errprintf(pdc_core *pdc, const char *fmt, ...)
pdc->pr->epcount = 0;
va_start(ap, fmt);
- pdc_vsnprintf(pdc->pr->errparms[pdc->pr->epcount], PDC_ERRPARM_SIZE,
+ pdc_vsnprintf(pdc, pdc->pr->errparms[pdc->pr->epcount], PDC_ERRPARM_SIZE,
fmt, ap);
va_end(ap);
@@ -835,6 +863,7 @@ pdc_push_errmsg(
const pdc_error_info *ei = get_error_info(pdc, errnum);
pdc_pop_errmsg(pdc);
+ pdc->pr->errnum = 0;
make_errmsg(pdc, ei, parm1, parm2, parm3, parm4, pdc_false);
@@ -851,13 +880,17 @@ pdc_set_errmsg(
const char *parm3,
const char *parm4)
{
- const pdc_error_info *ei = get_error_info(pdc, errnum);
+ if (errnum != 0)
+ {
+ const pdc_error_info *ei = get_error_info(pdc, errnum);
- make_errmsg(pdc, ei, parm1, parm2, parm3, parm4, pdc_false);
+ make_errmsg(pdc, ei, parm1, parm2, parm3, parm4, pdc_false);
+ }
pdc->pr->errnum = errnum;
- pdc_logg_cond(pdc, 2, trc_warning,
+ if (errnum)
+ pdc_logg_cond(pdc, 2, trc_warning,
"[Reason for error message %d: \"%s\"]\n",
pdc->pr->errnum, pdc->pr->errbuf);
@@ -901,7 +934,7 @@ pdc_error(
const char *parm3,
const char *parm4)
{
- const char *logmsg;
+ const char *logmsg = NULL;
/* avoid recursive errors, but allow rethrow.
*/
@@ -921,18 +954,22 @@ pdc_error(
if (pdc->pr->x_sp > pdc->pr->x_sp0)
{
- logmsg = "\n[/// Exception %d in %s ]";
+ if (pdc_logg_is_enabled(pdc, 2, trc_warning))
+ logmsg = "[Nested exception %d in %s]";
}
else
{
- logmsg = "\n[+++ Exception %d in %s ]";
+ logmsg = "\n[Last exception %d in %s]";
}
- pdc_logg(pdc, logmsg, pdc->pr->errnum,
- (pdc->pr->errnum == 0 || !pdc->pr->apiname) ? "" : pdc->pr->apiname,
- pdc->pr->x_sp0 + 1, pdc->pr->x_sp - pdc->pr->x_sp0);
+ if (logmsg != NULL)
+ {
+ pdc_logg(pdc, logmsg, pdc->pr->errnum,
+ (pdc->pr->errnum == 0 || !pdc->pr->apiname) ? "" : pdc->pr->apiname,
+ pdc->pr->x_sp0 + 1, pdc->pr->x_sp - pdc->pr->x_sp0);
- pdc_logg(pdc, "[\"%s\"]\n\n", pdc->pr->errbuf);
+ pdc_logg(pdc, "[\"%s\"]\n\n", pdc->pr->errbuf);
+ }
if (pdc->pr->x_sp == -1)
{
@@ -967,6 +1004,9 @@ pdc_jbuf(pdc_core *pdc)
{
static const char fn[] = "pdc_jbuf";
+ pdc_logg_cond(pdc, 3, trc_api,
+ "[TRY to level %d]\n", pdc->pr->x_sp + 1);
+
if (++pdc->pr->x_sp == pdc->pr->x_ssize)
{
pdc_xframe *aux;
@@ -1026,6 +1066,9 @@ pdc_jbuf(pdc_core *pdc)
void
pdc_exit_try(pdc_core *pdc)
{
+ pdc_logg_cond(pdc, 3, trc_api,
+ "[EXIT_TRY at level %d]\n", pdc->pr->x_sp);
+
if (pdc->pr->x_sp == -1)
{
strcpy(pdc->pr->errbuf, "exception stack underflow");
@@ -1042,6 +1085,9 @@ pdc_catch_intern(pdc_core *pdc)
{
pdc_bool result;
+ pdc_logg_cond(pdc, 3, trc_api,
+ "[CATCH intern at level %d]\n", pdc->pr->x_sp);
+
if (pdc->pr->x_sp == -1)
{
strcpy(pdc->pr->errbuf, "exception stack underflow");
@@ -1064,6 +1110,9 @@ pdc_catch_extern(pdc_core *pdc)
{
pdc_bool result;
+ pdc_logg_cond(pdc, 3, trc_api,
+ "[CATCH at level %d]\n", pdc->pr->x_sp);
+
if (pdc->pr->x_sp == -1)
{
strcpy(pdc->pr->errbuf, "exception stack underflow");
@@ -1122,14 +1171,6 @@ pdc_get_errpref(pdc_core *pdc)
return pdc->pr->premsg;
}
-/* ----------- service function to get PDF version string -------------- */
-
-const char *
-pdc_get_pdfversion(pdc_core *pdc, int compatibility)
-{
- return pdc_errprintf(pdc, "%d.%d", compatibility / 10, compatibility % 10);
-}
-
#ifdef PDC_DEBUG