diff options
-rw-r--r-- | XD.1 | 11 | ||||
-rw-r--r-- | XD.c | 36 |
2 files changed, 45 insertions, 2 deletions
@@ -13,6 +13,10 @@ .Nm Displays information using a smiley face like so: :) to interpret it refer to the following tables: +Displays information using a smiley face. +to interpret XD's output refer to the following tables (or +.Nm +\fB-e\fR): .Ss Eyes .TS tab(;) allbox; @@ -42,6 +46,13 @@ c;l. /;command not found (;previous signal is failure .TE +.Ss Exit Status: +.Nm +returns the number that was passed in to allow the user to re-run the program +and get the same results. If there's an internal error +.Nm +returns 1. If you wish to find out more infomation about the error enable ERR +in the config.mk. .Sh OPTIONS .Ss -v Print version information to stdout and exit. @@ -230,6 +230,34 @@ has_staged(git_repository *repo) } #endif +inline unsigned +numcat(unsigned x, unsigned y) +{ + unsigned pow = 10; + while(y >= pow) { + pow *= 10; + } + + return (x * pow) + y; +} + +int +str_to_int(char *str) +{ + int res = -1; + char *c; + + for (c = str; (*c != '\0') && isdigit(*c); c++) { + if (res == -1) { + res = *c - '0'; + } else { + res = numcat(res, *c - '0'); + } + } + + return res; +} + int main(int argc, char *argv[]) { @@ -282,8 +310,12 @@ main(int argc, char *argv[]) } /* get exit code from user args */ - if (argv[1]) { - code = atoi(argv[1]); + if (argc > 1 && argv[argc - 1]) { + code = str_to_int(argv[argc - 1]); + if (code < 0) { + L("Return code, %d, not valid", code); + exit(1); + } } /* change mouth based on exit code */ |