summaryrefslogtreecommitdiffstats
path: root/XD.c
diff options
context:
space:
mode:
Diffstat (limited to 'XD.c')
-rw-r--r--XD.c36
1 files changed, 34 insertions, 2 deletions
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 */