From b58e8bfe04f4f8bcbb18dd6cb7c01f4d44b1f9ec Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 29 Apr 2023 22:14:41 +0200 Subject: cmd_line: read executable name from /proc/self/exe --- src/file.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/file.c') diff --git a/src/file.c b/src/file.c index 55e1691..bc7af8e 100644 --- a/src/file.c +++ b/src/file.c @@ -63,6 +63,40 @@ free_old: return ret; } +char *my_readlink(const char *path) +{ + size_t current_size = 256; + char *buf = NULL; + + while (1) { + buf = realloc(buf, current_size); + if (!buf) { + log_errno("realloc"); + goto free; + } + + ssize_t res = readlink(path, buf, current_size); + if (res < 0) { + log_errno("readlink"); + goto free; + } + + if ((size_t)res == current_size) { + current_size *= 2; + continue; + } + + break; + } + + return buf; + +free: + free(buf); + + return NULL; +} + int file_exists(const char *path) { struct stat stat; -- cgit v1.2.3