From: Michael Poole Date: Sun, 30 Mar 2008 02:24:45 +0000 (-0400) Subject: Make saxdb_context definition private. X-Git-Tag: v1.4.0-rc3~22 X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=8aa2683163c6e3133d717a87009b333ed6260401 Make saxdb_context definition private. src/saxdb.h (struct saxdb_context): Declare, do not define. (saxdb_jmp_buf): Declare new function. src/saxdb.c (struct saxdb_context): Define. (saxdb_write_db): Use saxdb_jmp_buf() instead of ctx.jbuf. (write_database): Likewise. (saxdb_jmp_buf): Define. src/modcmd.c (cmd_dump_messages): Use saxdb_jmp_buf(). src/mod-helpserv.c (helpserv_log_request): Likewise. --- diff --git a/src/mod-helpserv.c b/src/mod-helpserv.c index 7eabafd..f1d6b8f 100644 --- a/src/mod-helpserv.c +++ b/src/mod-helpserv.c @@ -705,7 +705,7 @@ static void helpserv_log_request(struct helpserv_request *req, const char *reaso if (!(ctx = saxdb_open_context(reqlog_f))) return; sprintf(key, "%s-%lu-%lu", req->hs->helpserv->nick, (unsigned long)req->opened, req->id); - if ((res = setjmp(ctx->jbuf)) != 0) { + if ((res = setjmp(*saxdb_jmp_buf(ctx))) != 0) { log_module(HS_LOG, LOG_ERROR, "Unable to log helpserv request: %s.", strerror(res)); } else { saxdb_start_record(ctx, key, 1); diff --git a/src/modcmd.c b/src/modcmd.c index f30a4e9..cc298a9 100644 --- a/src/modcmd.c +++ b/src/modcmd.c @@ -1834,8 +1834,7 @@ static MODCMD_FUNC(cmd_dump_messages) { reply("MSG_INTERNAL_FAILURE"); return 0; } - if ((res = setjmp(ctx->jbuf)) != 0) { - ctx->complex.used = 0; /* to avoid false assert()s in close */ + if ((res = setjmp(*saxdb_jmp_buf(ctx))) != 0) { saxdb_close_context(ctx); fclose(pf); reply("MCMSG_MESSAGE_DUMP_FAILED", strerror(res)); diff --git a/src/saxdb.c b/src/saxdb.c index b5ac422..d504702 100644 --- a/src/saxdb.c +++ b/src/saxdb.c @@ -38,6 +38,13 @@ struct saxdb { struct saxdb *prev; }; +struct saxdb_context { + FILE *output; + unsigned int indent; + struct int_list complex; + jmp_buf jbuf; +}; + #define COMPLEX(CTX) ((CTX)->complex.used ? ((CTX)->complex.list[(CTX)->complex.used-1]) : 1) static struct saxdb *last_db; @@ -135,7 +142,7 @@ saxdb_write_db(struct saxdb *db) { return 1; } start = time(NULL); - if ((res = setjmp(ctx.jbuf)) || (res2 = db->writer(&ctx))) { + if ((res = setjmp(*saxdb_jmp_buf(&ctx))) || (res2 = db->writer(&ctx))) { if (res) { log_module(MAIN_LOG, LOG_ERROR, "Error writing to %s: %s", tmp_fname, strerror(res)); } else { @@ -536,7 +543,7 @@ write_database(FILE *out, struct dict *db) { ctx.output = out; ctx.indent = 0; int_list_init(&ctx.complex); - if (!(res = setjmp(ctx.jbuf))) { + if (!(res = setjmp(*saxdb_jmp_buf(&ctx)))) { write_database_helper(&ctx, db); } else { log_module(MAIN_LOG, LOG_ERROR, "Exception %d caught while writing to stream", res); @@ -560,6 +567,12 @@ saxdb_open_context(FILE *file) { return ctx; } +jmp_buf * +saxdb_jmp_buf(struct saxdb_context *ctx) { + return &ctx->jbuf; +} + + void saxdb_close_context(struct saxdb_context *ctx) { assert(ctx->complex.used == 0); diff --git a/src/saxdb.h b/src/saxdb.h index 0a2eecb..bf928c2 100644 --- a/src/saxdb.h +++ b/src/saxdb.h @@ -26,15 +26,7 @@ DECLARE_LIST(int_list, int); struct saxdb; -/* This definition should ONLY be used so callers of - * saxdb_open_context() can initialize jbuf properly. */ -struct saxdb_context { - FILE *output; - unsigned int indent; - struct int_list complex; - jmp_buf jbuf; -}; - +struct saxdb_context; #define SAXDB_READER(NAME) int NAME(struct dict *db) typedef SAXDB_READER(saxdb_reader_func_t); @@ -59,6 +51,7 @@ void saxdb_write_sint(struct saxdb_context *dest, const char *name, long value); /* For doing db writing by hand */ struct saxdb_context *saxdb_open_context(FILE *f); +jmp_buf *saxdb_jmp_buf(struct saxdb_context *ctx); void saxdb_close_context(struct saxdb_context *ctx); #endif /* !defined(DBMGR_H) */