Provide OS kernel version in system.os.

This is available via the new property called `release`. A very simple
example to demonstrate it:

  var system = require('system');
  console.log('Kernel release', system.os.release);

which will print (on OS X 10.7.5 Lion):

  Kernel release 11.4.2

https://github.com/ariya/phantomjs/issues/12587
2.0
Ariya Hidayat 2014-09-21 23:44:17 -07:00
parent 7c61f8857d
commit 639e09bd3a
2 changed files with 22 additions and 0 deletions

View File

@ -38,6 +38,20 @@
#include "../env.h"
#include "terminal.h"
#if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
#include <sys/utsname.h>
QString getOSRelease()
{
QString release;
struct utsname un;
if (uname(&un) != -1) {
release = QString::fromLatin1(un.release);
}
return release;
}
#endif
System::System(QObject *parent) :
QObject(parent)
, m_stdout((File *)NULL)
@ -94,6 +108,7 @@ System::System(QObject *parent) :
}
#elif defined(Q_OS_MAC)
m_os.insert("name", "mac");
m_os.insert("release", getOSRelease());
switch (QSysInfo::MacintoshVersion) {
case QSysInfo::MV_10_3:
m_os.insert("version", "10.3 (Panther)");
@ -120,6 +135,7 @@ System::System(QObject *parent) :
#elif defined(Q_OS_LINUX)
m_os.insert("name", "linux");
m_os.insert("version", "unknown");
m_os.insert("release", getOSRelease());
#else
m_os.insert("name", "unknown");
m_os.insert("version", "unknown");

View File

@ -7,3 +7,9 @@ assert.typeOf(system.os, 'object');
assert.typeOf(system.os.architecture, 'string');
assert.typeOf(system.os.name, 'string');
assert.typeOf(system.os.version, 'string');
if (system.os.name === 'mac') {
// release is x.y.z with x = 10 for Snow Leopard and 14 for Yosemite
assert.typeOf(system.os.release, 'string');
assert.isTrue(parseInt(system.os.release, 10) >= 10);
}