diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-04-08 17:00:05 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-04-08 17:00:05 -0400 |
commit | 41bfc4bb5e1042ec9eca48ed645393b12978d703 (patch) | |
tree | 094cf68df41f7f5c98a1c844e51bc32fb0e7155d /util.c | |
parent | 608f4f254ccf95a01b5480e2dbe7a1b6e54c8609 (diff) |
Actual install process
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 72 |
1 files changed, 0 insertions, 72 deletions
@@ -1,72 +0,0 @@ -/* Copyright 2016 Luke Shumaker */ - -#include <ctype.h> /* for isdigit */ -#include <stdlib.h> -#include <error.h> -#include <errno.h> - -#include "util.h" - -void *xrealloc(void *ptr, size_t size) -{ - void *ret = realloc(ptr, size); - if (ret == NULL) { - if (ptr==NULL) - error(1, errno, "Could not allocate memory"); - else - error(1, errno, "Could not re-allocate memory"); - } - return ret; -} - -bool is_numeric(const char *str) { - for (size_t i = 0; str[i] != '\0'; i++) - if (!isdigit(str[i])) - return false; - if (str[0] == '\0') - return false; - return true; -} - -int get_fd(const char *addr) { - int sock; - if (strcmp(addr, "stdin") == 0) { - sock = 0; - } else if (strcmp(addr, "stdout") == 0) { - sock = 1; - } else if (strcmp(addr, "stderr") == 0) { - sock = 2; - } else if (strncmp(addr, "systemd", strlen("systemd")) == 0) { - sock = 3; /* <systemd/sd-daemon.h>:SD_LISTEN_FDS_START */ - addr = &addr[strlen("systemd")]; - switch (addr[0]) { - case '\0': - /* do nothing */ - break; - case ':': - addr = &addr[1]; - if (is_numeric(addr)) { - sock += atoi(addr); - } else { - const char *e = getenv("LISTEN_FDNAMES"); - if (e == NULL) - return -ENOTCONN; - char *names = strdupa(e); - char *name = NULL; - int i = -1; - do { - name = strsep(&names, ":"); - i++; - } while (name != NULL && strcmp(name, addr) != 0); - if (name == NULL) - return -ENOENT; - sock += i; - } - } - } else { - if (!is_numeric(addr)) - return -EINVAL; - sock = atoi(addr); - } - return sock; -} |