9 #include <sys/syslog.h>
10 #include <sys/utsname.h>
13 #define UTS_RELEASE "0.0.0"
17 #define RTLD_NEXT ((void *) -1l)
20 #define SYMBOL_EXPORT __attribute__((visibility("default")))
22 typedef int uname_func(struct utsname *buf);
24 static void *get_libc_func(const char *funcname)
29 /* Clear any previous errors. */
31 func = dlsym(RTLD_NEXT, funcname);
34 fprintf(stderr, "Cannot locate libc function '%s' error: %s",
41 int SYMBOL_EXPORT uname(struct utsname *buf)
43 static uname_func *real_uname;
47 if (real_uname == NULL)
48 real_uname = (uname_func *)get_libc_func("uname");
50 ret = real_uname(buf);
54 release = getenv("UTS_RELEASE");
56 release = UTS_RELEASE;
57 strncpy(buf->release, release, sizeof(buf->release) - 1);
58 buf->release[sizeof(buf->release) - 1] = '\0';