From: 2xsec Date: Fri, 12 Oct 2018 06:05:43 +0000 (+0900) Subject: commands_utils: improve code redundancy to make abstract unix socket name X-Git-Tag: lxc-3.1.0~48^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b46db1a63dd0b663cce2cb8015c2a5aa05453a1;p=thirdparty%2Flxc.git commands_utils: improve code redundancy to make abstract unix socket name Signed-off-by: 2xsec --- diff --git a/src/lxc/commands.c b/src/lxc/commands.c index 4a8c24a37..ffa8c3537 100644 --- a/src/lxc/commands.c +++ b/src/lxc/commands.c @@ -1244,24 +1244,17 @@ out_close: int lxc_cmd_init(const char *name, const char *lxcpath, const char *suffix) { - int fd, len, ret; + int fd, ret; char path[LXC_AUDS_ADDR_LEN] = {0}; - char *offset = &path[1]; - /* -2 here because this is an abstract unix socket so it needs a - * leading \0, and we null terminate, so it needs a trailing \0. - * Although null termination isn't required by the API, we do it anyway - * because we print the sockname out sometimes. - */ - len = sizeof(path) - 2; - ret = lxc_make_abstract_socket_name(offset, len, name, lxcpath, NULL, suffix); + ret = lxc_make_abstract_socket_name(path, sizeof(path), name, lxcpath, NULL, suffix); if (ret < 0) return -1; - TRACE("Creating abstract unix socket \"%s\"", offset); + TRACE("Creating abstract unix socket \"%s\"", &path[1]); fd = lxc_abstract_unix_open(path, SOCK_STREAM, 0); if (fd < 0) { - SYSERROR("Failed to create command socket %s", offset); + SYSERROR("Failed to create command socket %s", &path[1]); if (errno == EADDRINUSE) ERROR("Container \"%s\" appears to be already running", name); diff --git a/src/lxc/commands_utils.c b/src/lxc/commands_utils.c index 5d5f55f79..812f5ceeb 100644 --- a/src/lxc/commands_utils.c +++ b/src/lxc/commands_utils.c @@ -96,24 +96,38 @@ int lxc_cmd_sock_get_state(const char *name, const char *lxcpath, return ret; } -int lxc_make_abstract_socket_name(char *path, int len, const char *lxcname, +int lxc_make_abstract_socket_name(char *path, size_t pathlen, + const char *lxcname, const char *lxcpath, const char *hashed_sock_name, const char *suffix) { const char *name; + char *offset; char *tmppath; + size_t len; size_t tmplen; uint64_t hash; int ret; + if (!path) + return -1; + + offset = &path[1]; + + /* -2 here because this is an abstract unix socket so it needs a + * leading \0, and we null terminate, so it needs a trailing \0. + * Although null termination isn't required by the API, we do it anyway + * because we print the sockname out sometimes. + */ + len = pathlen -2; + name = lxcname; if (!name) name = ""; if (hashed_sock_name != NULL) { - ret = - snprintf(path, len, "lxc/%s/%s", hashed_sock_name, suffix); + ret = snprintf(offset, len, "lxc/%s/%s", hashed_sock_name, suffix); if (ret < 0 || ret >= len) { ERROR("Failed to create abstract socket name"); return -1; @@ -129,7 +143,7 @@ int lxc_make_abstract_socket_name(char *path, int len, const char *lxcname, } } - ret = snprintf(path, len, "%s/%s/%s", lxcpath, name, suffix); + ret = snprintf(offset, len, "%s/%s/%s", lxcpath, name, suffix); if (ret < 0) { ERROR("Failed to create abstract socket name"); return -1; @@ -147,7 +161,7 @@ int lxc_make_abstract_socket_name(char *path, int len, const char *lxcname, } hash = fnv_64a_buf(tmppath, ret, FNV1A_64_INIT); - ret = snprintf(path, len, "lxc/%016" PRIx64 "/%s", hash, suffix); + ret = snprintf(offset, len, "lxc/%016" PRIx64 "/%s", hash, suffix); if (ret < 0 || ret >= len) { ERROR("Failed to create abstract socket name"); return -1; @@ -161,15 +175,8 @@ int lxc_cmd_connect(const char *name, const char *lxcpath, { int ret, client_fd; char path[LXC_AUDS_ADDR_LEN] = {0}; - char *offset = &path[1]; - /* -2 here because this is an abstract unix socket so it needs a - * leading \0, and we null terminate, so it needs a trailing \0. - * Although null termination isn't required by the API, we do it anyway - * because we print the sockname out sometimes. - */ - size_t len = sizeof(path) - 2; - ret = lxc_make_abstract_socket_name(offset, len, name, lxcpath, + ret = lxc_make_abstract_socket_name(path, sizeof(path), name, lxcpath, hashed_sock_name, suffix); if (ret < 0) return -1; diff --git a/src/lxc/commands_utils.h b/src/lxc/commands_utils.h index d54cb11f3..c1583b785 100644 --- a/src/lxc/commands_utils.h +++ b/src/lxc/commands_utils.h @@ -25,7 +25,8 @@ #include "state.h" #include "commands.h" -int lxc_make_abstract_socket_name(char *path, int len, const char *lxcname, +int lxc_make_abstract_socket_name(char *path, size_t pathlen, + const char *lxcname, const char *lxcpath, const char *hashed_sock_name, const char *suffix);