/* * Returns a struct of type UnameStruct that contains sysname, nodename, * machine, version, and release. On Solaris, it will also include * architecture and platform. On HP-UX, it will also include id_number. */ static VALUE uname_uname_all() { struct utsname u; uname(&u); /* Extra brackets are for C89 compliance */ { #ifdef HAVE_SYS_SYSTEMINFO_H char platform[BUFSIZE]; char arch[BUFSIZE]; sysinfo(SI_ARCHITECTURE, arch, BUFSIZE); sysinfo(SI_PLATFORM, platform, BUFSIZE); #endif #ifdef HAVE_SYSCTL char model[BUFSIZ]; get_model(model, sizeof(model)); #endif return rb_struct_new(sUname, rb_str_new2(u.sysname), rb_str_new2(u.nodename), rb_str_new2(u.machine), rb_str_new2(u.version), rb_str_new2(u.release) #ifdef HAVE_SYS_SYSTEMINFO_H ,rb_str_new2(arch), rb_str_new2(platform) #endif #ifdef HAVE_SYSCTL ,rb_str_new2(model) #endif #if defined(__hpux) ,rb_str_new2(u.__idnumber) #endif ); }