diff options
Diffstat (limited to 'ssh/util.c')
-rw-r--r-- | ssh/util.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/ssh/util.c b/ssh/util.c new file mode 100644 index 0000000..a8f3c41 --- /dev/null +++ b/ssh/util.c @@ -0,0 +1,29 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "util.h" + + +bool parse_host_port(const char *arg, const char **server_host, int *port) { + const char *ptr = strchr(arg, ':'); + if (ptr == NULL) { + *server_host = arg; + } else { + size_t length = ptr - arg; + char *host = malloc(length + 1); + if (!host) { + fprintf(stderr, "Cannot allocate memory!\n"); + exit(1); + } + memcpy(host, arg, length); + host[length] = '\0'; + *server_host = host; + + char *endp; + *port = strtol(ptr + 1, &endp, 10); + if (endp == ptr || *endp != '\0') { + return false; + } + } + return true; +} |