mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 02:44:41 +03:00
libspl: lift common bits of getexecname()
Merge the actual implementations of getexecname() and slightly clean up the FreeBSD one. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #11879
This commit is contained in:
@@ -19,41 +19,14 @@
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
|
||||
#include <limits.h>
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
#include "../../libspl_impl.h"
|
||||
|
||||
const char *
|
||||
getexecname(void)
|
||||
__attribute__((visibility("hidden"))) ssize_t
|
||||
getexecname_impl(char *execname)
|
||||
{
|
||||
static char execname[PATH_MAX + 1] = "";
|
||||
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
|
||||
char *ptr = NULL;
|
||||
ssize_t rc;
|
||||
|
||||
(void) pthread_mutex_lock(&mtx);
|
||||
|
||||
if (strlen(execname) == 0) {
|
||||
rc = readlink("/proc/self/exe",
|
||||
execname, sizeof (execname) - 1);
|
||||
if (rc == -1) {
|
||||
execname[0] = '\0';
|
||||
} else {
|
||||
execname[rc] = '\0';
|
||||
ptr = execname;
|
||||
}
|
||||
} else {
|
||||
ptr = execname;
|
||||
}
|
||||
|
||||
(void) pthread_mutex_unlock(&mtx);
|
||||
return (ptr);
|
||||
return (readlink("/proc/self/exe", execname, PATH_MAX));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user