From 611893f7b9b39a0d3d4cb36d2af3924251af411b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Tue, 19 Jun 2018 18:27:36 +0200 Subject: [PATCH] Fix a warning in using readlink MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The use of the same buffer as input and output of readlink leads to warnings due to restrict use in new versions of GLIBC Change-Id: Ifbf1277b88bd18a9df1e18211d4248e94c16d6da Signed-off-by: José Bollo --- src/afb-hook.c | 12 ++++++------ src/afb-trace.c | 31 ++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/afb-hook.c b/src/afb-hook.c index 75e8a691..d9fd1a37 100644 --- a/src/afb-hook.c +++ b/src/afb-hook.c @@ -735,26 +735,26 @@ static void hook_api_event_make_cb(void *closure, const struct afb_hookid *hooki static void hook_api_rootdir_get_fd_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, int result) { - char path[PATH_MAX]; + char path[PATH_MAX], proc[100]; if (result < 0) _hook_api_(export, "rootdir_get_fd() -> %d, %m", result); else { - sprintf(path, "/proc/self/fd/%d", result); - readlink(path, path, sizeof path); + snprintf(proc, sizeof proc, "/proc/self/fd/%d", result); + readlink(proc, path, sizeof path); _hook_api_(export, "rootdir_get_fd() -> %d = %s", result, path); } } static void hook_api_rootdir_open_locale_cb(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *filename, int flags, const char *locale, int result) { - char path[PATH_MAX]; + char path[PATH_MAX], proc[100]; if (!locale) locale = "(null)"; if (result < 0) _hook_api_(export, "rootdir_open_locale(%s, %d, %s) -> %d, %m", filename, flags, locale, result); else { - sprintf(path, "/proc/self/fd/%d", result); - readlink(path, path, sizeof path); + snprintf(proc, sizeof proc, "/proc/self/fd/%d", result); + readlink(proc, path, sizeof path); _hook_api_(export, "rootdir_open_locale(%s, %d, %s) -> %d = %s", filename, flags, locale, result, path); } } diff --git a/src/afb-trace.c b/src/afb-trace.c index a603951c..5f54b174 100644 --- a/src/afb-trace.c +++ b/src/afb-trace.c @@ -685,33 +685,42 @@ static void hook_api_event_make(void *closure, const struct afb_hookid *hookid, static void hook_api_rootdir_get_fd(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, int result) { - char path[PATH_MAX]; + char path[PATH_MAX], proc[100]; + const char *key, *val; if (result >= 0) { - sprintf(path, "/proc/self/fd/%d", result); - readlink(path, path, sizeof path); + snprintf(proc, sizeof proc, "/proc/self/fd/%d", result); + readlink(proc, path, sizeof path); + key = "path"; + val = path; + } else { + key = "error"; + val = strerror(errno); } - hook_api(closure, hookid, export, "rootdir_get_fd", "{ss}", - result < 0 ? "path" : "error", - result < 0 ? strerror(errno) : path); + hook_api(closure, hookid, export, "rootdir_get_fd", "{ss}", key, val); } static void hook_api_rootdir_open_locale(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, const char *filename, int flags, const char *locale, int result) { - char path[PATH_MAX]; + char path[PATH_MAX], proc[100]; + const char *key, *val; if (result >= 0) { - sprintf(path, "/proc/self/fd/%d", result); - readlink(path, path, sizeof path); + snprintf(proc, sizeof proc, "/proc/self/fd/%d", result); + readlink(proc, path, sizeof path); + key = "path"; + val = path; + } else { + key = "error"; + val = strerror(errno); } hook_api(closure, hookid, export, "rootdir_open_locale", "{ss si ss* ss}", "file", filename, "flags", flags, "locale", locale, - result < 0 ? "path" : "error", - result < 0 ? strerror(errno) : path); + key, val); } static void hook_api_queue_job(void *closure, const struct afb_hookid *hookid, const struct afb_export *export, void (*callback)(int signum, void *arg), void *argument, void *group, int timeout, int result) -- 2.16.6