Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Fix the OS module for win32
Browse files Browse the repository at this point in the history
  • Loading branch information
piscisaureus committed Jan 2, 2011
1 parent 33118df commit c3ffbf2
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 8 deletions.
21 changes: 20 additions & 1 deletion src/node_os.cc
Expand Up @@ -12,6 +12,7 @@
# include <unistd.h> // gethostname, sysconf
# include <sys/utsname.h>
#else // __MINGW32__
# include <windows.h> // GetVersionEx
# include <winsock2.h> // gethostname
#endif // __MINGW32__

Expand All @@ -36,6 +37,8 @@ static Handle<Value> GetHostname(const Arguments& args) {

static Handle<Value> GetOSType(const Arguments& args) {
HandleScope scope;

#ifdef __POSIX__
char type[256];
struct utsname info;

Expand All @@ -44,17 +47,33 @@ static Handle<Value> GetOSType(const Arguments& args) {
type[strlen(info.sysname)] = 0;

return scope.Close(String::New(type));
#else // __MINGW32__
return scope.Close(String::New("Windows_NT"));
#endif
}

static Handle<Value> GetOSRelease(const Arguments& args) {
HandleScope scope;
char release[256];

#ifdef __POSIX__
struct utsname info;

uname(&info);
strncpy(release, info.release, strlen(info.release));
release[strlen(info.release)] = 0;

#else // __MINGW32__
OSVERSIONINFO info;
info.dwOSVersionInfoSize = sizeof(info);

if (GetVersionEx(&info) == 0) {
return Undefined();
}

sprintf(release, "%d.%d.%d", info.dwMajorVersion, info.dwMinorVersion, info.dwBuildNumber);
#endif

return scope.Close(String::New(release));
}

Expand Down Expand Up @@ -131,4 +150,4 @@ void OS::Initialize(v8::Handle<v8::Object> target) {

} // namespace node

NODE_MODULE(node_os, node::OS::Initialize);
NODE_MODULE(node_os, node::OS::Initialize);
40 changes: 33 additions & 7 deletions src/platform_win32.cc
Expand Up @@ -2,7 +2,9 @@
#include "platform.h"
#include "platform_win32.h"

#include <errno.h> // for MAXPATHLEN
#include <v8.h>

#include <errno.h>
#include <sys/param.h> // for MAXPATHLEN
#include <unistd.h> // getpagesize
#include <windows.h>
Expand All @@ -11,6 +13,8 @@

namespace node {

using namespace v8;

static char buf[MAXPATHLEN + 1];
static char *process_title = NULL;

Expand All @@ -33,12 +37,12 @@ void winapi_perror(const char* prefix = NULL) {
}


char** OS::SetupArgs(int argc, char *argv[]) {
char** Platform::SetupArgs(int argc, char *argv[]) {
return argv;
}


void OS::SetProcessTitle(char *title) {
void Platform::SetProcessTitle(char *title) {
// We need to convert _title_ to UTF-16 first, because that's what windows uses internally.
// It would be more efficient to use the UTF-16 value that we can obtain from v8,
// but it's not accessible from here.
Expand Down Expand Up @@ -142,7 +146,7 @@ static inline char* _getProcessTitle() {
}


const char* OS::GetProcessTitle(int *len) {
const char* Platform::GetProcessTitle(int *len) {
// If the process_title was never read before nor explicitly set,
// we must query it with getConsoleTitleW
if (!process_title) {
Expand All @@ -159,17 +163,39 @@ const char* OS::GetProcessTitle(int *len) {
}


int OS::GetMemory(size_t *rss, size_t *vsize) {
// Not implemented
int Platform::GetMemory(size_t *rss, size_t *vsize) {
*rss = 0;
*vsize = 0;
return 0;
}


int OS::GetExecutablePath(char* buffer, size_t* size) {
double Platform::GetFreeMemory() {
return -1;
}

double Platform::GetTotalMemory() {
return -1;
}


int Platform::GetExecutablePath(char* buffer, size_t* size) {
*size = 0;
return -1;
}


int Platform::GetCPUInfo(Local<Array> *cpus) {
return -1;
}


double Platform::GetUptime() {
return -1;
}

int Platform::GetLoadAvg(Local<Array> *loads) {
return -1;
}

} // namespace node

0 comments on commit c3ffbf2

Please sign in to comment.