diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-05-25 09:27:29 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-05-25 09:27:29 +0000 |
commit | 827acf9e23d4b7819681b5da6778685b882587e7 (patch) | |
tree | b451f576385bcba108fff406835c381a0b6fbd47 | |
parent | f5e8d9e76cd34e13b98dfd7b762d48dfc1b7bdc0 (diff) | |
download | mailfromd-827acf9e23d4b7819681b5da6778685b882587e7.tar.gz mailfromd-827acf9e23d4b7819681b5da6778685b882587e7.tar.bz2 |
Lots of critical bugfixes
git-svn-id: file:///svnroot/mailfromd/trunk@1474 7a8a7f39-df28-0410-adc6-e0d955640f24
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/bi_db.m4 | 8 | ||||
-rw-r--r-- | src/bi_dns.m4 | 4 | ||||
-rw-r--r-- | src/bi_sa.m4 | 8 | ||||
-rw-r--r-- | src/drivers.c | 29 | ||||
-rw-r--r-- | src/gram.y | 2 | ||||
-rw-r--r-- | src/mtasim.c | 2 | ||||
-rw-r--r-- | src/snarf.m4 | 2 |
9 files changed, 52 insertions, 20 deletions
@@ -1,3 +1,18 @@ +2007-05-25 Sergey Poznyakoff <gray@gnu.org.ua> + + * src/snarf.m4 (MF_OPTVAL): Fix a leftover bug + * src/gram.y (on_cond): Reverse selector argument list. + * src/drivers.c (code_type_call): Provide placeholders for the + missing optinal arguments, so they can be safely accessed and + assigned. + * src/bi_dns.m4, src/bi_db.m4: Use MF_OPTVAL insted of MF_DEFINED. + * src/bi_sa.m4: Avoid splitting strings within NLS markers, + because M4 inserts line directives in between, which cause grief + for many compilers. + * src/Makefile.am (.m4.c): Fix the sed rule + * src/mtasim.c (recursive_rmdir): Do not complain when attempting + to delete a non-existing file. + 2007-05-24 Sergey Poznyakoff <gray@gnu.org.ua> * src/bi_gettext.m4: Built-in NLS support diff --git a/src/Makefile.am b/src/Makefile.am index 878d896b..c169cf63 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -148,7 +148,7 @@ M4=m4 .m4.c: $(M4) --prefix -s -DSOURCE="$<" $(top_srcdir)/src/snarf.m4 $< > $@-t - sed '1{/#line/d}' $@-t > $@ + sed '1{/#line/d;}' $@-t > $@ rm $@-t .def.h: diff --git a/src/bi_db.m4 b/src/bi_db.m4 index 8ec821d2..246f19b9 100644 --- a/src/bi_db.m4 +++ b/src/bi_db.m4 @@ -71,7 +71,7 @@ MF_DEFUN(dbmap, NUMBER, STRING dbname, STRING key, OPTIONAL, NUMBER null) { dbmap_lookup(env, dbname, key, NULL, LOOKUP_TEST_ONLY | - (MF_DEFINED(null) ? LOOKUP_NULL_BYTE : 0)); + (MF_OPTVAL(null) ? LOOKUP_NULL_BYTE : 0)); } END @@ -80,7 +80,7 @@ MF_DEFUN(dbget, STRING, STRING dbname, STRING key, OPTIONAL, { dbmap_lookup(env, dbname, key, MF_OPTVAL(defval), - (MF_DEFINED(null) ? LOOKUP_NULL_BYTE : 0)); + (MF_OPTVAL(null) ? LOOKUP_NULL_BYTE : 0)); } END @@ -100,7 +100,7 @@ MF_DEFUN(dbput, VOID, STRING dbname, STRING keystr, STRING value, memset(&key, 0, sizeof key); MU_DATUM_PTR(key) = keystr; MU_DATUM_SIZE(key) = strlen(keystr); - if (MF_DEFINED(null)) + if (MF_OPTVAL(null)) MU_DATUM_SIZE(key)++; memset(&contents, 0, sizeof contents); @@ -132,7 +132,7 @@ MF_DEFUN(dbdel, VOID, STRING dbname, STRING keystr, OPTIONAL, NUMBER null) memset(&key, 0, sizeof key); MU_DATUM_PTR(key) = keystr; MU_DATUM_SIZE(key) = strlen(keystr); - if (MF_DEFINED(null)) + if (MF_OPTVAL(null)) MU_DATUM_SIZE(key)++; rc = mu_dbm_delete(&db, key); mu_dbm_close(&db); diff --git a/src/bi_dns.m4 b/src/bi_dns.m4 index 7effbc03..1cec5140 100644 --- a/src/bi_dns.m4 +++ b/src/bi_dns.m4 @@ -42,7 +42,7 @@ MF_DEFUN(primitive_resolve, STRING, STRING string, OPTIONAL, STRING domain) char *ipstr; mf_status stat; - if (MF_DEFINED(domain)) { + if (MF_OPTVAL(domain,"")[0]) { stat = resolve_ipstr_domain(string, domain, &ipstr); MF_ASSERT(stat == mf_success, stat, @@ -179,7 +179,7 @@ MF_DEFUN(getmx, STRING, STRING domain, OPTIONAL, NUMBER resolve) mxbuf_t mxbuf; mf_status mxstat; - if (MF_DEFINED(resolve)) + if (MF_OPTVAL(resolve)) mxstat = getmxip(domain, mxbuf); else mxstat = getmx(domain, mxbuf); diff --git a/src/bi_sa.m4 b/src/bi_sa.m4 index 054df65e..4dd127d7 100644 --- a/src/bi_sa.m4 +++ b/src/bi_sa.m4 @@ -388,8 +388,8 @@ MF_DEFUN(sa, NUMBER, STRING urlstr, NUMBER prec) spam_str, score_str, threshold_str) != 3) { spamd_destroy(&ostr); MF_THROW(mf_failure, - _("spamd responded with bad Spam header " - "'%s'"), buffer); + _("spamd responded with bad Spam header '%s'"), + buffer); } result = decode_boolean(spam_str); @@ -435,8 +435,8 @@ MF_DEFUN(clamav, NUMBER, STRING urlstr) if (sscanf(buffer, "PORT %hu\n", &port) != 1) { spamd_destroy(&cstr); MF_THROW(mf_failure, - _("Bad response from clamav: expected `PORT'" - " but found `%s'"), buffer); + _("Bad response from clamav: expected `PORT' but found `%s'"), + buffer); } if (!host) diff --git a/src/drivers.c b/src/drivers.c index b8332ba5..5a059f88 100644 --- a/src/drivers.c +++ b/src/drivers.c @@ -1523,22 +1523,39 @@ code_type_call(NODE *node, struct locus **old_locus) struct literal *s; struct function *func = node->v.call.func; int i; - - for (p = node->v.call.args, i = 0; p; p = p->next, i++) - code_node(p); + if (func->optcount) { + int j; + + /* Count actual arguments */ + for (p = node->v.call.args, i = 0; p; p = p->next, i++) + ; + /* Provide placeholders for the missing ones. This is + necessary in order to make assignments to optional + arguments possible. */ + for (j = i; j < func->parmcount; j++) { + code_op(opcode_push); + code_immediate(0); + } + + /* Pass actual arguments */ + for (p = node->v.call.args; p; p = p->next) + code_node(p); + /* Pass the number of actual arguments in a hidden arg */ code_op(opcode_push); code_immediate((void*)i); - } - + } else + for (p = node->v.call.args, i = 0; p; p = p->next, i++) + code_node(p); + MARK_LOCUS(); code_op(opcode_funcall); s = literal_lookup(func->name); code_immediate((void*)s->off); code_immediate((void*)func->entry); code_op(opcode_adjust); - code_immediate((void*)(func->optcount ? (i + 1) : func->parmcount)); + code_immediate((void*)(func->parmcount + (func->optcount ? 1 : 0))); if (func->rettype != dtype_unspecified) code_op(opcode_pushreg); } @@ -1807,7 +1807,7 @@ on_cond : on pollstmt do branches DONE sel = alloc_node(node_type_builtin, &$1); sel->v.builtin.builtin = bi; - sel->v.builtin.args = head; + sel->v.builtin.args = reverse(head); $$ = create_on_node(sel, $4.head); } diff --git a/src/mtasim.c b/src/mtasim.c index b047007d..e9ca4148 100644 --- a/src/mtasim.c +++ b/src/mtasim.c @@ -502,7 +502,7 @@ recursive_rmdir (const char *name) } else if (S_ISDIR (st.st_mode)) rc = rmdir_r (ent->d_name); - else if ((rc = unlink (ent->d_name)) != 0) + else if ((rc = unlink (ent->d_name)) != 0 && errno != ENOENT) mu_error (_("cannot unlink %s: %s"), ent->d_name, mu_strerror (errno)); } closedir (dir); diff --git a/src/snarf.m4 b/src/snarf.m4 index 409d48c5..f85cc4bd 100644 --- a/src/snarf.m4 +++ b/src/snarf.m4 @@ -234,7 +234,7 @@ m4_define([<MF_DEFINED>], */ m4_define([<MF_OPTVAL>], [<m4_ifdef([<__MF_ARGLIST__>],m4_dnl -[<m4_ifelse([<$2>],,$1,(MF_DEFINED($1) ? $1 : $2))>],m4_dnl +[<(MF_DEFINED($1) ? $1 : m4_ifelse([<$2>],,0,$2))>],m4_dnl [<m4_errprint(m4___file__:m4___line__: [<MF_OPTVAL used out of functional context>])>])>]) /* __mf_check_end() -- signal error if the previous MF_DEFUN statement was |