(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:
parent
98d35dec3e
commit
6fee3f4535
13 changed files with 26 additions and 19 deletions
|
@ -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 */
|
||||||
|
|
|
@ -273,7 +273,7 @@ buil(void)
|
||||||
built = build_plane(§, pp, sect.sct_item, tlev);
|
built = build_plane(§, 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) {
|
||||||
|
|
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 " ";
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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':
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue