projects
/
open-adventure.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Test coverage: make LCOV ignore code unreachable without interactive shell
[open-adventure.git]
/
misc.c
diff --git
a/misc.c
b/misc.c
index d4c995597011c11e2960a6ba275421acad68f920..0b28f00a2411e4b1673e9836b604c9c24f22be31 100644
(file)
--- a/
misc.c
+++ b/
misc.c
@@
-15,8
+15,11
@@
void* xmalloc(size_t size)
{
void* ptr = malloc(size);
if (ptr == NULL) {
{
void* ptr = malloc(size);
if (ptr == NULL) {
+ // LCOV_EXCL_START
+ // exclude from coverage analysis because we can't simulate an out of memory error in testing
fprintf(stderr, "Out of memory!\n");
exit(EXIT_FAILURE);
fprintf(stderr, "Out of memory!\n");
exit(EXIT_FAILURE);
+ // LCOV_EXCL_STOP
}
return (ptr);
}
}
return (ptr);
}
@@
-41,18
+44,6
@@
void packed_to_token(long packed, char token[6])
}
}
}
}
-void token_to_packed(char token[6], long* packed)
-{
- *packed = 0;
- for (size_t i = 0; i < 5; ++i)
- {
- if (token[4 - i] == '\0')
- continue;
- char mapped = ascii_to_advent[(int) token[4 - i]];
- *packed |= (mapped << (6 * i));
- }
-}
-
/* Hide the fact that wods are corrently packed longs */
bool wordeq(token_t a, token_t b)
/* Hide the fact that wods are corrently packed longs */
bool wordeq(token_t a, token_t b)
@@
-172,16
+163,16
@@
void pspeak(vocab_t msg, enum speaktype mode, int skip, ...)
va_start(ap, skip);
switch (mode) {
case touch:
va_start(ap, skip);
switch (mode) {
case touch:
- vspeak(object
_description
s[msg].inventory, ap);
+ vspeak(objects[msg].inventory, ap);
break;
case look:
break;
case look:
- vspeak(object
_description
s[msg].longs[skip], ap);
+ vspeak(objects[msg].longs[skip], ap);
break;
case hear:
break;
case hear:
- vspeak(object
_description
s[msg].sounds[skip], ap);
+ vspeak(objects[msg].sounds[skip], ap);
break;
case study:
break;
case study:
- vspeak(object
_description
s[msg].texts[skip], ap);
+ vspeak(objects[msg].texts[skip], ap);
break;
}
va_end(ap);
break;
}
va_end(ap);
@@
-261,7
+252,10
@@
char* get_input()
input = NULL;
size_t n = 0;
if (isatty(0))
input = NULL;
size_t n = 0;
if (isatty(0))
+ // LCOV_EXCL_START
+ // Should be unreachable in tests, as they will use a non-interactive shell.
printf("%s", input_prompt);
printf("%s", input_prompt);
+ // LCOV_EXCL_STOP
IGNORE(getline(&input, &n, stdin));
}
IGNORE(getline(&input, &n, stdin));
}
@@
-287,7
+281,7
@@
char* get_input()
return (input);
}
return (input);
}
-bool
YES
(const char* question, const char* yes_response, const char* no_response)
+bool
yes
(const char* question, const char* yes_response, const char* no_response)
/* Print message X, wait for yes/no answer. If yes, print Y and return true;
* if no, print Z and return false. */
{
/* Print message X, wait for yes/no answer. If yes, print Y and return true;
* if no, print Z and return false. */
{
@@
-298,10
+292,13
@@
bool YES(const char* question, const char* yes_response, const char* no_response
speak(question);
reply = get_input();
speak(question);
reply = get_input();
- if (reply == NULL) {
- linenoiseFree(reply);
- exit(EXIT_SUCCESS);
- }
+ if (reply == NULL) {
+ // LCOV_EXCL_START
+ // Should be unreachable. Reply should never be NULL
+ linenoiseFree(reply);
+ exit(EXIT_SUCCESS);
+ // LCOV_EXCL_STOP
+ }
char* firstword = (char*) xmalloc(strlen(reply)+1);
sscanf(reply, "%s", firstword);
char* firstword = (char*) xmalloc(strlen(reply)+1);
sscanf(reply, "%s", firstword);
@@
-405,7
+402,7
@@
token_t MAKEWD(long letters)
/* Data structure routines */
/* Data structure routines */
-long
VOCAB
(long id, long init)
+long
vocab
(long id, long init)
/* Look up ID in the vocabulary (ATAB) and return its "definition" (KTAB), or
* -1 if not found. If INIT is positive, this is an initialisation call setting
* up a keyword variable, and not finding it constitutes a bug. It also means
/* Look up ID in the vocabulary (ATAB) and return its "definition" (KTAB), or
* -1 if not found. If INIT is positive, this is an initialisation call setting
* up a keyword variable, and not finding it constitutes a bug. It also means
@@
-420,7
+417,7
@@
long VOCAB(long id, long init)
lexeme = -1;
if (init < 0)
return (lexeme);
lexeme = -1;
if (init < 0)
return (lexeme);
- BUG(REQUIRED_VOCABULARY_WORD_NOT_FOUND);
+ BUG(REQUIRED_VOCABULARY_WORD_NOT_FOUND);
// LCOV_EXCL_LINE
}
if (init >= 0 && KTAB[i] / 1000 != init)
continue;
}
if (init >= 0 && KTAB[i] / 1000 != init)
continue;
@@
-431,10
+428,10
@@
long VOCAB(long id, long init)
return (lexeme);
}
}
return (lexeme);
}
}
- BUG(RAN_OFF_END_OF_VOCABULARY_TABLE);
+ BUG(RAN_OFF_END_OF_VOCABULARY_TABLE);
// LCOV_EXCL_LINE
}
}
-void
JUGGLE
(long object)
+void
juggle
(long object)
/* Juggle an object by picking it up and putting it down again, the purpose
* being to get the object to the front of the chain of things at its loc. */
{
/* Juggle an object by picking it up and putting it down again, the purpose
* being to get the object to the front of the chain of things at its loc. */
{
@@
-442,11
+439,11
@@
void JUGGLE(long object)
i = game.place[object];
j = game.fixed[object];
i = game.place[object];
j = game.fixed[object];
-
MOVE
(object, i);
-
MOVE
(object + NOBJECTS, j);
+
move
(object, i);
+
move
(object + NOBJECTS, j);
}
}
-void
MOVE
(long object, long where)
+void
move
(long object, long where)
/* Place any object anywhere by picking it up and dropping it. May
* already be toting, in which case the carry is a no-op. Mustn't
* pick up objects which are not at any loc, since carry wants to
/* Place any object anywhere by picking it up and dropping it. May
* already be toting, in which case the carry is a no-op. Mustn't
* pick up objects which are not at any loc, since carry wants to
@@
-459,19
+456,19
@@
void MOVE(long object, long where)
else
from = game.place[object];
if (from != LOC_NOWHERE && from != CARRIED && !SPECIAL(from))
else
from = game.place[object];
if (from != LOC_NOWHERE && from != CARRIED && !SPECIAL(from))
-
CARRY
(object, from);
-
DROP
(object, where);
+
carry
(object, from);
+
drop
(object, where);
}
}
-long
PUT
(long object, long where, long pval)
+long
put
(long object, long where, long pval)
/* PUT is the same as MOVE, except it returns a value used to set up the
* negated game.prop values for the repository objects. */
{
/* PUT is the same as MOVE, except it returns a value used to set up the
* negated game.prop values for the repository objects. */
{
-
MOVE
(object, where);
+
move
(object, where);
return (-1) - pval;;
}
return (-1) - pval;;
}
-void
CARRY
(long object, long where)
+void
carry
(long object, long where)
/* Start toting an object, removing it from the list of things at its former
* location. Incr holdng unless it was already being toted. If object>NOBJECTS
* (moving "fixed" second loc), don't change game.place or game.holdng. */
/* Start toting an object, removing it from the list of things at its former
* location. Incr holdng unless it was already being toted. If object>NOBJECTS
* (moving "fixed" second loc), don't change game.place or game.holdng. */
@@
-495,7
+492,7
@@
void CARRY(long object, long where)
game.link[temp] = game.link[object];
}
game.link[temp] = game.link[object];
}
-void
DROP
(long object, long where)
+void
drop
(long object, long where)
/* Place an object at a given loc, prefixing it onto the game.atloc list. Decr
* game.holdng if the object was being toted. */
{
/* Place an object at a given loc, prefixing it onto the game.atloc list. Decr
* game.holdng if the object was being toted. */
{
@@
-512,7
+509,7
@@
void DROP(long object, long where)
game.atloc[where] = object;
}
game.atloc[where] = object;
}
-long
ATDWRF
(long where)
+long
atdwrf
(long where)
/* Return the index of first dwarf at the given location, zero if no dwarf is
* there (or if dwarves not active yet), -1 if all dwarves are dead. Ignore
* the pirate (6th dwarf). */
/* Return the index of first dwarf at the given location, zero if no dwarf is
* there (or if dwarves not active yet), -1 if all dwarves are dead. Ignore
* the pirate (6th dwarf). */
@@
-535,13
+532,13
@@
long ATDWRF(long where)
/* Utility routines (SETBIT, TSTBIT, set_seed, get_next_lcg_value,
* randrange, RNDVOC) */
/* Utility routines (SETBIT, TSTBIT, set_seed, get_next_lcg_value,
* randrange, RNDVOC) */
-long
SETBIT
(long bit)
+long
setbit
(long bit)
/* Returns 2**bit for use in constructing bit-masks. */
{
return (1 << bit);
}
/* Returns 2**bit for use in constructing bit-masks. */
{
return (1 << bit);
}
-bool
TSTBIT
(long mask, int bit)
+bool
tstbit
(long mask, int bit)
/* Returns true if the specified bit is set in the mask. */
{
return (mask & (1 << bit)) != 0;
/* Returns true if the specified bit is set in the mask. */
{
return (mask & (1 << bit)) != 0;
@@
-567,7
+564,7
@@
long randrange(long range)
return range * get_next_lcg_value() / game.lcg_m;
}
return range * get_next_lcg_value() / game.lcg_m;
}
-long
RNDVOC
(long second, long force)
+long
rndvoc
(long second, long force)
/* Searches the vocabulary ATAB for a word whose second character is
* char, and changes that word such that each of the other four
* characters is a random letter. If force is non-zero, it is used
/* Searches the vocabulary ATAB for a word whose second character is
* char, and changes that word such that each of the other four
* characters is a random letter. If force is non-zero, it is used
@@
-691,7
+688,7
@@
bool MAPLIN(FILE *fp)
}
}
}
}
-void
DATIME
(long* d, long* t)
+void
datime
(long* d, long* t)
{
struct timeval tv;
gettimeofday(&tv, NULL);
{
struct timeval tv;
gettimeofday(&tv, NULL);
@@
-699,10
+696,12
@@
void DATIME(long* d, long* t)
*t = (long) tv.tv_usec;
}
*t = (long) tv.tv_usec;
}
+// LCOV_EXCL_START
void bug(enum bugtype num, const char *error_string)
{
fprintf(stderr, "Fatal error %d, %s.\n", num, error_string);
exit(EXIT_FAILURE);
}
void bug(enum bugtype num, const char *error_string)
{
fprintf(stderr, "Fatal error %d, %s.\n", num, error_string);
exit(EXIT_FAILURE);
}
+// LCOV_EXCL_STOP
/* end */
/* end */