summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--XD.111
-rw-r--r--XD.c36
2 files changed, 45 insertions, 2 deletions
diff --git a/XD.1 b/XD.1
index 5e25dd3..65361c0 100644
--- a/XD.1
+++ b/XD.1
@@ -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.
diff --git a/XD.c b/XD.c
index 5d97a57..cdff606 100644
--- a/XD.c
+++ b/XD.c
@@ -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 */