(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.
|
||||
* 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 */
|
||||
|
|
|
@ -273,7 +273,7 @@ buil(void)
|
|||
built = build_plane(§, pp, sect.sct_item, tlev);
|
||||
break;
|
||||
default:
|
||||
CANT_HAPPEN("Bad WHAT");
|
||||
CANT_REACH();
|
||||
return RET_FAIL;
|
||||
}
|
||||
if (built) {
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
||||
|
|
|
@ -296,7 +296,7 @@ prod(void)
|
|||
pr(" %4.0f ", real);
|
||||
break;
|
||||
default:
|
||||
CANT_HAPPEN("bad TYPE");
|
||||
CANT_REACH();
|
||||
pr(" ??? ");
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -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 " ";
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -204,7 +204,7 @@ service_main(DWORD argc, LPTSTR *argv)
|
|||
|
||||
empth_exit();
|
||||
|
||||
CANT_HAPPEN("main thread terminated");
|
||||
CANT_REACH();
|
||||
finish_server();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -271,7 +271,7 @@ main(int argc, char **argv)
|
|||
|
||||
empth_exit();
|
||||
|
||||
CANT_HAPPEN("main thread terminated");
|
||||
CANT_REACH();
|
||||
finish_server();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue