diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 52 |
1 files changed, 48 insertions, 4 deletions
@@ -17,22 +17,66 @@ * along with @. If not, see <http://www.gnu.org/licenses/>. */ +#include <errno.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <time.h> #include <unistd.h> #include "datetime.h" +static char * +_concat_args(int argc, const char *argv[]) +{ + int buf_l; + int i; + char *buf; + int buf_i; + int j; + + buf_l = 0; + for (i = 0; i < argc; ++i) { + buf_l += strlen(argv[i]) + 1; + } + + buf = calloc(buf_l, sizeof(*buf)); + if (buf == NULL) { + fprintf(stderr, "Failed to allocate buffer: %s\n", + strerror(errno)); + return NULL; + } + + buf_i = 0; + for (i = 0; i < argc; ++i) { + for (j = 0; argv[i][j] != '\0'; ++j) { + buf[buf_i++] = argv[i][j]; + } + buf[buf_i++] = ' '; + } + buf[--buf_i] = '\0'; + + return buf; +} + int main(int argc, const char *argv[]) { - time_t arg; - time_t now; - time_t dif; + char *buf; + time_t arg; + time_t now; + time_t dif; + + buf = _concat_args(argc - 1, argv + 1); + if (buf == NULL) { + return -1; + } - if (datetime_parse(argc - 1, argv + 1, &arg) < 0) { + if (datetime_parse(buf, &arg) < 0) { + free(buf); return EXIT_FAILURE; } + free(buf); setvbuf(stdout, NULL, _IONBF, 0); time(&now); |