blob: 8949f794b61c7a5a7afb203c080573bd31b9341e [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
class _Platform {
static int _numberOfProcessors() native "Platform_NumberOfProcessors";
static String _pathSeparator() native "Platform_PathSeparator";
static String _operatingSystem() native "Platform_OperatingSystem";
static _localHostname() native "Platform_LocalHostname";
static _environment() native "Platform_Environment";
static int get numberOfProcessors {
return _numberOfProcessors();
}
static String get pathSeparator {
return _pathSeparator();
}
static String get operatingSystem {
return _operatingSystem();
}
static String get localHostname {
var result = _localHostname();
if (result is OSError) {
throw result;
} else {
return result;
}
}
static Map<String, String> get environment {
var env = _environment();
if (env is OSError) {
throw env;
} else {
var result = new Map();
for (var str in env) {
// When running on Windows through cmd.exe there are strange
// environment variables that are used to record the current
// working directory for each drive and the exit code for the
// last command. As an example: '=A:=A:\subdir' records the
// current working directory on the 'A' drive. In order to
// handle these correctly we search for a second occurrence of
// of '=' in the string if the first occurrence is at index 0.
var equalsIndex = str.indexOf('=');
if (equalsIndex == 0) {
equalsIndex = str.indexOf('=', 1);
}
assert(equalsIndex != -1);
result[str.substring(0, equalsIndex)] = str.substring(equalsIndex + 1);
}
return result;
}
}
}