Add llvm::sys::{osName,osVersion} for retrieving operating system name

& version as strings.
 - Win32 code is untested.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56942 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2008-10-02 01:17:28 +00:00
parent 0b3baaa7fb
commit bb14672097
4 changed files with 110 additions and 0 deletions

View File

@ -14,6 +14,8 @@
#ifndef LLVM_SYSTEM_HOST_H #ifndef LLVM_SYSTEM_HOST_H
#define LLVM_SYSTEM_HOST_H #define LLVM_SYSTEM_HOST_H
#include <string>
namespace llvm { namespace llvm {
namespace sys { namespace sys {
@ -30,6 +32,13 @@ namespace sys {
return !littleEndianHost(); return !littleEndianHost();
} }
/// osName() - Return the name of the host operating system or "" if
/// unknown.
std::string osName();
/// osVersion() - Return the operating system version as a string or
/// "" if unknown.
std::string osVersion();
} }
} }

24
lib/System/Host.cpp Normal file
View File

@ -0,0 +1,24 @@
//===-- Host.cpp - Implement OS Host Concept --------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This header file implements the operating system Host concept.
//
//===----------------------------------------------------------------------===//
#include "llvm/System/Host.h"
#include "llvm/Config/config.h"
// Include the platform-specific parts of this class.
#ifdef LLVM_ON_UNIX
#include "Unix/Host.inc"
#endif
#ifdef LLVM_ON_WIN32
#include "Win32/Host.inc"
#endif

42
lib/System/Unix/Host.inc Normal file
View File

@ -0,0 +1,42 @@
//===- llvm/System/Unix/Host.inc --------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the UNIX Host support.
//
//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
//=== WARNING: Implementation here must contain only generic UNIX code that
//=== is guaranteed to work on *all* UNIX variants.
//===----------------------------------------------------------------------===//
#include <llvm/Config/config.h>
#include "Unix.h"
#include <sys/utsname.h>
#include <string>
using namespace llvm;
std::string llvm::sys::osName() {
struct utsname info;
if (uname(&info))
return "";
return info.sysname;
}
std::string llvm::sys::osVersion() {
struct utsname info;
if (uname(&info))
return "";
return info.release;
}

35
lib/System/Win32/Host.inc Normal file
View File

@ -0,0 +1,35 @@
//===- llvm/System/Win32/Host.inc -------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the Win32 Host support.
//
//===----------------------------------------------------------------------===//
#include "Win32.h"
#include <cstdio>
#include <string>
using namespace llvm;
std::string sys::osName() {
return "Windows";
}
std::string sys::osVersion() {
OSVERSIONINFO osvi = { 0 };
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx(&osvi))
return "";
char buf[64];
sprintf(buf, "%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
return buf;
}