summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-29 10:12:21 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-29 13:37:04 (EDT)
commitad183ca49b89ea7eef84872b30bebdcaf003f535 (patch)
tree965a361df72dd0131628915c07b5d7c31ae31cc1 /src/main.c
parentb7ac4e9e2da1e7d0832a12c3260f1b0b838d4fe7 (diff)
downloadatsign-ad183ca49b89ea7eef84872b30bebdcaf003f535.zip
atsign-ad183ca49b89ea7eef84872b30bebdcaf003f535.tar.gz
atsign-ad183ca49b89ea7eef84872b30bebdcaf003f535.tar.bz2
Move concatenation function
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c52
1 files changed, 48 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index e6b9758..00e0ef7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);