(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.
* 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)
/*
* Report internal error.
* Usage: CANT_REACH(); <recovery code>;
*/
#define CANT_REACH() (void)oops(NULL, __FILE__, __LINE__)
extern int oops(char *, char *, int);
/* return codes from command routines */

View file

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

View file

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

View file

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

View file

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

View file

@ -105,7 +105,7 @@ logerror(char *format, ...)
int
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();
return 1;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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