diff options
Diffstat (limited to 'pjlib/src/pj/os_info.c')
-rw-r--r-- | pjlib/src/pj/os_info.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/pjlib/src/pj/os_info.c b/pjlib/src/pj/os_info.c index d82aea5c..a10a95ce 100644 --- a/pjlib/src/pj/os_info.c +++ b/pjlib/src/pj/os_info.c @@ -88,6 +88,8 @@ PJ_DEF(const pj_sys_info*) pj_get_sys_info(void) if (si_initialized) return &si; + si.machine.ptr = si.os_name.ptr = si.sdk_name.ptr = si.info.ptr = ""; + #define ALLOC_CP_STR(str,field) \ do { \ len = pj_ansi_strlen(str); \ @@ -108,8 +110,12 @@ PJ_DEF(const pj_sys_info*) pj_get_sys_info(void) char *tok; int i, maxtok; - if (uname(&u) != 0) + /* Successful uname() returns zero on Linux and positive value + * on OpenSolaris. + */ + if (uname(&u) == -1) goto get_sdk_info; + ALLOC_CP_STR(u.machine, machine); ALLOC_CP_STR(u.sysname, os_name); @@ -226,10 +232,12 @@ get_sdk_info: int cnt; cnt = pj_ansi_snprintf(tmp, sizeof(tmp), - "%s%s/%s/%s%s", + "%s%s%s%s%s%s%s", si.os_name.ptr, ver_info(si.os_ver, os_ver), + (si.machine.slen ? "/" : ""), si.machine.ptr, + (si.sdk_name.slen ? "/" : ""), si.sdk_name.ptr, ver_info(si.sdk_ver, sdk_ver)); if (cnt > 0 && cnt < (int)sizeof(tmp)) { |