(CANT_REACH): New. Use it instead of CANT_HAPPEN() where possible.

(oops): Cope with NULL argument passed by CANT_REACH().
This commit is contained in:
Markus Armbruster 2006-04-17 17:36:07 +00:00
parent 98d35dec3e
commit 6fee3f4535
13 changed files with 26 additions and 19 deletions

View file

@ -113,9 +113,16 @@ extern int daemonize;
/* /*
* If EXPR is true, an internal error occured. * If EXPR is true, an internal error occured.
* Return EXPR != 0. * Return EXPR != 0.
* Usage: if (CANT_HAPPEN(...)) recovery_code(); * Usage: if (CANT_HAPPEN(...)) <recovery code>;
*/ */
#define CANT_HAPPEN(expr) ((expr) ? oops(#expr, __FILE__, __LINE__) : 0) #define CANT_HAPPEN(expr) ((expr) ? oops(#expr, __FILE__, __LINE__) : 0)
/*
* Report internal error.
* Usage: CANT_REACH(); <recovery code>;
*/
#define CANT_REACH() (void)oops(NULL, __FILE__, __LINE__)
extern int oops(char *, char *, int); extern int oops(char *, char *, int);
/* return codes from command routines */ /* return codes from command routines */

View file

@ -273,7 +273,7 @@ buil(void)
built = build_plane(&sect, pp, sect.sct_item, tlev); built = build_plane(&sect, pp, sect.sct_item, tlev);
break; break;
default: default:
CANT_HAPPEN("Bad WHAT"); CANT_REACH();
return RET_FAIL; return RET_FAIL;
} }
if (built) { if (built) {

View file

@ -337,7 +337,7 @@ gift(natid givee, natid giver, void *ptr, int type, char *mesg)
p = prland(ptr); p = prland(ptr);
break; break;
default: default:
CANT_HAPPEN("bad TYPE"); CANT_REACH();
p = "a red herring"; p = "a red herring";
} }

View file

@ -296,7 +296,7 @@ prod(void)
pr(" %4.0f ", real); pr(" %4.0f ", real);
break; break;
default: default:
CANT_HAPPEN("bad TYPE"); CANT_REACH();
pr(" ??? "); pr(" ??? ");
break; break;
} }

View file

@ -142,7 +142,7 @@ xdprval(struct valstr *val, char *sep)
pr("%snil", sep); pr("%snil", sep);
break; break;
default: default:
CANT_HAPPEN("Bad VAL type"); CANT_REACH();
pr("0"); pr("0");
} }
return " "; return " ";

View file

@ -105,7 +105,7 @@ logerror(char *format, ...)
int int
oops(char *msg, char *file, int line) oops(char *msg, char *file, int line)
{ {
logerror("Oops: %s in %s:%d", msg, file, line); logerror("Oops: %s in %s:%d", msg ? msg : "bug", file, line);
if (debug) abort(); if (debug) abort();
return 1; return 1;
} }

View file

@ -109,7 +109,7 @@ draw_map(int bmap, s_char origin, int map_flags, struct nstr_sect *nsp)
int c; int c;
switch (bmap) { switch (bmap) {
default: default:
CANT_HAPPEN("bad BMAP"); CANT_REACH();
bmap = 'b'; bmap = 'b';
/* fall through */ /* fall through */
case 'b': case 'b':

View file

@ -204,7 +204,7 @@ service_main(DWORD argc, LPTSTR *argv)
empth_exit(); empth_exit();
CANT_HAPPEN("main thread terminated"); CANT_REACH();
finish_server(); finish_server();
} }

View file

@ -242,7 +242,7 @@ nstr_exec(struct nscstr *np, int ncond, void *ptr)
return 0; return 0;
break; break;
default: default:
CANT_HAPPEN("bad OPTYPE"); CANT_REACH();
return 0; return 0;
} }
} }
@ -510,7 +510,7 @@ nstr_promote(int valtype)
valtype = NSC_STRING; valtype = NSC_STRING;
break; break;
default: default:
CANT_HAPPEN("bad VALTYPE"); CANT_REACH();
valtype = NSC_NOTYPE; valtype = NSC_NOTYPE;
} }
return valtype; return valtype;
@ -556,7 +556,7 @@ nstr_coerce_val(struct valstr *val, nsc_type to, char *str)
case NSC_LONG: case NSC_LONG:
return cond_type_mismatch(str); return cond_type_mismatch(str);
default: default:
CANT_HAPPEN("bad TO argument"); CANT_REACH();
to = from; to = from;
} }
} }
@ -590,7 +590,7 @@ nstr_exec_val(struct valstr *val, natid cnum, void *ptr, nsc_type want)
switch (val->val_cat) { switch (val->val_cat) {
default: default:
CANT_HAPPEN("Bad VAL category"); CANT_REACH();
/* fall through */ /* fall through */
case NSC_VAL: case NSC_VAL:
valtype = val->val_type; valtype = val->val_type;
@ -652,7 +652,7 @@ nstr_exec_val(struct valstr *val, natid cnum, void *ptr, nsc_type want)
valtype = NSC_TYPEID; valtype = NSC_TYPEID;
break; break;
default: default:
CANT_HAPPEN("Bad VAL type"); CANT_REACH();
val->val_as.lng = 0; val->val_as.lng = 0;
} }
val->val_cat = NSC_VAL; val->val_cat = NSC_VAL;
@ -666,7 +666,7 @@ nstr_exec_val(struct valstr *val, natid cnum, void *ptr, nsc_type want)
val->val_as.dbl = val->val_as.lng; val->val_as.dbl = val->val_as.lng;
} }
} else if (want == NSC_STRING) } else if (want == NSC_STRING)
CANT_HAPPEN("unimplemented WANT"); /* FIXME */ CANT_REACH(); /* FIXME implement */
if (CANT_HAPPEN(valtype != want && want != NSC_NOTYPE)) { if (CANT_HAPPEN(valtype != want && want != NSC_NOTYPE)) {
valtype = want; valtype = want;
@ -676,7 +676,7 @@ nstr_exec_val(struct valstr *val, natid cnum, void *ptr, nsc_type want)
case NSC_DOUBLE: val->val_as.dbl = 0.0; break; case NSC_DOUBLE: val->val_as.dbl = 0.0; break;
case NSC_STRING: val->val_as.str.base = NULL; break; case NSC_STRING: val->val_as.str.base = NULL; break;
default: default:
CANT_HAPPEN("bad WANT argument"); CANT_REACH();
} }
} }

View file

@ -96,7 +96,7 @@ nxtitem(struct nstr_item *np, void *ptr)
selected = 0; selected = 0;
break; break;
default: default:
CANT_HAPPEN("bad np->sel"); CANT_REACH();
return 0; return 0;
} }
if (selected && np->ncond) { if (selected && np->ncond) {

View file

@ -69,7 +69,7 @@ trade_check_item_ok(union trdgenstr *tgp)
return check_ship_ok(&tgp->shp); return check_ship_ok(&tgp->shp);
if (tgp->gen.ef_type == EF_NUKE) if (tgp->gen.ef_type == EF_NUKE)
return check_nuke_ok(&tgp->nuk); return check_nuke_ok(&tgp->nuk);
CANT_HAPPEN("Bad EF_TYPE"); CANT_REACH();
pr("Trade lot went bad!\n"); pr("Trade lot went bad!\n");
return 0; return 0;
} }

View file

@ -97,7 +97,7 @@ nxtitemp(struct nstr_item *np)
selected = 0; selected = 0;
break; break;
default: default:
CANT_HAPPEN("bad np->sel"); CANT_REACH();
return 0; return 0;
} }
if (selected && np->ncond) { if (selected && np->ncond) {

View file

@ -271,7 +271,7 @@ main(int argc, char **argv)
empth_exit(); empth_exit();
CANT_HAPPEN("main thread terminated"); CANT_REACH();
finish_server(); finish_server();
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }