aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/cpp/blaze.cc120
-rw-r--r--src/main/cpp/blaze_util_darwin.cc13
-rw-r--r--src/main/cpp/blaze_util_freebsd.cc15
-rw-r--r--src/main/cpp/blaze_util_linux.cc35
-rw-r--r--src/main/cpp/blaze_util_posix.cc55
-rw-r--r--src/main/cpp/blaze_util_windows.cc171
-rw-r--r--src/main/cpp/util/errors.cc13
-rw-r--r--src/main/cpp/util/file_posix.cc29
-rw-r--r--src/main/cpp/util/file_windows.cc122
-rw-r--r--third_party/ijar/mapped_file_windows.cc62
-rw-r--r--third_party/ijar/platform_utils.cc3
11 files changed, 364 insertions, 274 deletions
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index eb555dee58..9c72fb55e8 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -71,7 +71,7 @@
#include "src/main/protobuf/command_server.grpc.pb.h"
using blaze_util::die;
-using blaze_util::pdie;
+using blaze_util::GetLastErrorString;
namespace blaze {
@@ -363,18 +363,17 @@ static void ComputeInstallMd5AndNoteAllFiles(const string &self_path) {
devtools_ijar::ZipExtractor::Create(self_path.c_str(), &processor));
if (extractor.get() == NULL) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "\nFailed to open %s as a zip file: %s",
- globals->options->product_name.c_str(),
- blaze_util::GetLastErrorString().c_str());
+ "Failed to open %s as a zip file: %s",
+ globals->options->product_name.c_str(), GetLastErrorString().c_str());
}
if (extractor->ProcessAll() < 0) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "\nFailed to extract install_base_key: %s", extractor->GetError());
+ "Failed to extract install_base_key: %s", extractor->GetError());
}
if (globals->install_md5.empty()) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "\nFailed to find install_base_key's in zip file");
+ "Failed to find install_base_key's in zip file");
}
}
@@ -635,8 +634,9 @@ static string GetArgumentString(const vector<string> &argument_array) {
static void GoToWorkspace(const WorkspaceLayout *workspace_layout) {
if (workspace_layout->InWorkspace(globals->workspace) &&
!blaze_util::ChangeDirectory(globals->workspace)) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "changing directory into %s failed",
- globals->workspace.c_str());
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "changing directory into %s failed: %s", globals->workspace.c_str(),
+ GetLastErrorString().c_str());
}
}
@@ -717,21 +717,23 @@ static void StartStandalone(const WorkspaceLayout *workspace_layout,
string exe =
globals->options->GetExe(globals->jvm_path, globals->ServerJarPath());
ExecuteProgram(exe, jvm_args_vector);
- pdie(blaze_exit_code::INTERNAL_ERROR, "execv of '%s' failed", exe.c_str());
+ die(blaze_exit_code::INTERNAL_ERROR, "execv of '%s' failed: %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
static void WriteFileToStderrOrDie(const char *file_name) {
FILE *fp = fopen(file_name, "r");
if (fp == NULL) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "opening %s failed",
- file_name);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "opening %s failed: %s",
+ file_name, GetLastErrorString().c_str());
}
char buffer[255];
int num_read;
while ((num_read = fread(buffer, 1, sizeof buffer, fp)) > 0) {
if (ferror(fp)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "failed to read from '%s'", file_name);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "failed to read from '%s': %s", file_name,
+ GetLastErrorString().c_str());
}
fwrite(buffer, 1, num_read, stderr);
}
@@ -769,8 +771,9 @@ static void StartServerAndConnect(const WorkspaceLayout *workspace_layout,
// The server dir has the socket, so we don't allow access by other
// users.
if (!blaze_util::MakeDirectories(server_dir, 0700)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "server directory '%s' could not be created", server_dir.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "server directory '%s' could not be created: %s", server_dir.c_str(),
+ GetLastErrorString().c_str());
}
// If we couldn't connect to the server check if there is still a PID file
@@ -829,10 +832,10 @@ static void StartServerAndConnect(const WorkspaceLayout *workspace_layout,
if (globals->jvm_log_file_append) {
// Don't dump the log if we were appending - the user should know where
// to find it, and who knows how much content they may have accumulated.
- BAZEL_LOG(USER) << "\nServer crashed during startup. See "
+ BAZEL_LOG(USER) << "Server crashed during startup. See "
<< globals->jvm_log_file;
} else {
- BAZEL_LOG(USER) << "\nServer crashed during startup. Now printing "
+ BAZEL_LOG(USER) << "Server crashed during startup. Now printing "
<< globals->jvm_log_file;
WriteFileToStderrOrDie(globals->jvm_log_file.c_str());
}
@@ -840,8 +843,7 @@ static void StartServerAndConnect(const WorkspaceLayout *workspace_layout,
}
}
die(blaze_exit_code::INTERNAL_ERROR,
- "\nError: couldn't connect to server (%d) after 120 seconds.",
- server_pid);
+ "couldn't connect to server (%d) after 120 seconds.", server_pid);
}
// A PureZipExtractorProcessor to extract the files from the blaze zip.
@@ -863,14 +865,14 @@ class ExtractBlazeZipProcessor : public PureZipExtractorProcessor {
const devtools_ijar::u1 *data, const size_t size) override {
string path = blaze_util::JoinPath(embedded_binaries_, filename);
if (!blaze_util::MakeDirectories(blaze_util::Dirname(path), 0777)) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "couldn't create '%s'",
- path.c_str());
+ die(blaze_exit_code::INTERNAL_ERROR, "couldn't create '%s': %s",
+ path.c_str(), GetLastErrorString().c_str());
}
if (!blaze_util::WriteFile(data, size, path, 0755)) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "\nFailed to write zipped file \"%s\": %s", path.c_str(),
- blaze_util::GetLastErrorString().c_str());
+ "Failed to write zipped file \"%s\": %s", path.c_str(),
+ GetLastErrorString().c_str());
}
}
@@ -888,8 +890,8 @@ static void ActuallyExtractData(const string &argv0,
CompoundZipProcessor processor({&extract_blaze_processor,
&install_key_processor});
if (!blaze_util::MakeDirectories(embedded_binaries, 0777)) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "couldn't create '%s'",
- embedded_binaries.c_str());
+ die(blaze_exit_code::INTERNAL_ERROR, "couldn't create '%s': %s",
+ embedded_binaries.c_str(), GetLastErrorString().c_str());
}
BAZEL_LOG(USER) << "Extracting " << globals->options->product_name
@@ -899,13 +901,12 @@ static void ActuallyExtractData(const string &argv0,
devtools_ijar::ZipExtractor::Create(argv0.c_str(), &processor));
if (extractor.get() == NULL) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "\nFailed to open %s as a zip file: %s",
- globals->options->product_name.c_str(),
- blaze_util::GetLastErrorString().c_str());
+ "Failed to open %s as a zip file: %s",
+ globals->options->product_name.c_str(), GetLastErrorString().c_str());
}
if (extractor->ProcessAll() < 0) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "\nFailed to extract %s as a zip file: %s",
+ "Failed to extract %s as a zip file: %s",
globals->options->product_name.c_str(), extractor->GetError());
}
@@ -944,8 +945,9 @@ static void ActuallyExtractData(const string &argv0,
// changed. This is essential for the correctness of actions that use
// embedded binaries as artifacts.
if (!mtime.get()->SetToDistantFuture(it)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "failed to set timestamp on '%s'", extracted_path);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "failed to set timestamp on '%s': %s", extracted_path,
+ GetLastErrorString().c_str());
}
blaze_util::SyncFile(it);
@@ -1015,14 +1017,15 @@ static void ExtractData(const string &self_path) {
// Give up renaming after 120 failed attempts / 2 minutes.
if (attempts == 120) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "install base directory '%s' could not be renamed into place",
- tmp_install.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "install base directory '%s' could not be renamed into place: "
+ "%s",
+ tmp_install.c_str(), GetLastErrorString().c_str());
}
} else {
if (!blaze_util::IsDirectory(globals->options->install_base)) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Error: Install base directory '%s' could not be created. "
+ "Install base directory '%s' could not be created. "
"It exists but is not a directory.",
globals->options->install_base.c_str());
}
@@ -1039,7 +1042,7 @@ static void ExtractData(const string &self_path) {
}
if (!blaze_util::CanReadFile(path)) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Error: corrupt installation: file '%s' missing."
+ "corrupt installation: file '%s' missing."
" Please remove '%s' and try again.",
path.c_str(), globals->options->install_base.c_str());
}
@@ -1159,9 +1162,9 @@ static void EnsureCorrectRunningVersion(BlazeServer *server) {
blaze_util::UnlinkPath(installation_path);
if (!SymlinkDirectories(globals->options->install_base,
installation_path)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "failed to create installation symlink '%s'",
- installation_path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "failed to create installation symlink '%s': %s",
+ installation_path.c_str(), GetLastErrorString().c_str());
}
// Update the mtime of the install base so that cleanup tools can
@@ -1169,9 +1172,9 @@ static void EnsureCorrectRunningVersion(BlazeServer *server) {
std::unique_ptr<blaze_util::IFileMtime> mtime(
blaze_util::CreateFileMtime());
if (!mtime.get()->SetToNow(globals->options->install_base)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "failed to set timestamp on '%s'",
- globals->options->install_base.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "failed to set timestamp on '%s': %s",
+ globals->options->install_base.c_str(), GetLastErrorString().c_str());
}
}
}
@@ -1245,9 +1248,9 @@ static void ParseOptions(int argc, const char *argv[]) {
static void ComputeWorkspace(const WorkspaceLayout *workspace_layout) {
globals->cwd = blaze_util::MakeCanonical(blaze_util::GetCwd().c_str());
if (globals->cwd.empty()) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "blaze_util::MakeCanonical('%s') failed",
- blaze_util::GetCwd().c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "blaze_util::MakeCanonical('%s') failed: %s",
+ blaze_util::GetCwd().c_str(), GetLastErrorString().c_str());
}
globals->workspace = workspace_layout->GetWorkspace(globals->cwd);
}
@@ -1287,28 +1290,30 @@ static void ComputeBaseDirectories(const WorkspaceLayout *workspace_layout,
const char *output_base = globals->options->output_base.c_str();
if (!blaze_util::PathExists(globals->options->output_base)) {
if (!blaze_util::MakeDirectories(globals->options->output_base, 0777)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Output base directory '%s' could not be created", output_base);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Output base directory '%s' could not be created: %s", output_base,
+ GetLastErrorString().c_str());
}
} else {
if (!blaze_util::IsDirectory(globals->options->output_base)) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Error: Output base directory '%s' could not be created. "
+ "Output base directory '%s' could not be created. "
"It exists but is not a directory.",
output_base);
}
}
if (!blaze_util::CanAccessDirectory(globals->options->output_base)) {
die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Error: Output base directory '%s' must be readable and writable.",
+ "Output base directory '%s' must be readable and writable.",
output_base);
}
ExcludePathFromBackup(output_base);
globals->options->output_base = blaze_util::MakeCanonical(output_base);
if (globals->options->output_base.empty()) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "blaze_util::MakeCanonical('%s') failed", output_base);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "blaze_util::MakeCanonical('%s') failed: %s", output_base,
+ GetLastErrorString().c_str());
}
globals->lockfile =
@@ -1485,7 +1490,8 @@ GrpcBlazeServer::GrpcBlazeServer(int connect_timeout_secs) {
pipe_ = blaze_util::CreatePipe();
if (pipe_ == NULL) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "Couldn't create pipe");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "Couldn't create pipe: %s",
+ GetLastErrorString().c_str());
}
}
@@ -1614,8 +1620,9 @@ void GrpcBlazeServer::CancelThread() {
if (bytes_read < 0 && error == blaze_util::IPipe::INTERRUPTED) {
continue;
} else if (bytes_read != 1) {
- pdie(blaze_exit_code::INTERNAL_ERROR,
- "Cannot communicate with cancel thread");
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "Cannot communicate with cancel thread: %s",
+ GetLastErrorString().c_str());
}
switch (buf) {
@@ -1842,8 +1849,9 @@ unsigned int GrpcBlazeServer::Communicate() {
}
if (!blaze_util::ChangeDirectory(request.working_directory())) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "changing directory into %s failed",
- request.working_directory().c_str());
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "changing directory into %s failed: %s",
+ request.working_directory().c_str(), GetLastErrorString().c_str());
}
ExecuteProgram(request.argv(0), argv);
}
diff --git a/src/main/cpp/blaze_util_darwin.cc b/src/main/cpp/blaze_util_darwin.cc
index 008b721e0a..76427f4c54 100644
--- a/src/main/cpp/blaze_util_darwin.cc
+++ b/src/main/cpp/blaze_util_darwin.cc
@@ -40,7 +40,7 @@
namespace blaze {
using blaze_util::die;
-using blaze_util::pdie;
+using blaze_util::GetLastErrorString;
using std::string;
using std::vector;
@@ -127,7 +127,8 @@ string GetSelfPath() {
char pathbuf[PROC_PIDPATHINFO_MAXSIZE] = {};
int len = proc_pidpath(getpid(), pathbuf, sizeof(pathbuf));
if (len == 0) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "error calling proc_pidpath");
+ die(blaze_exit_code::INTERNAL_ERROR, "error calling proc_pidpath: %s",
+ GetLastErrorString().c_str());
}
return string(pathbuf, len);
}
@@ -135,7 +136,8 @@ string GetSelfPath() {
uint64_t GetMillisecondsMonotonic() {
struct timeval ts = {};
if (gettimeofday(&ts, NULL) < 0) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "error calling gettimeofday");
+ die(blaze_exit_code::INTERNAL_ERROR, "error calling gettimeofday: %s",
+ GetLastErrorString().c_str());
}
return ts.tv_sec * 1000LL + ts.tv_usec / 1000LL;
}
@@ -169,8 +171,9 @@ string GetDefaultHostJavabase() {
FILE *output = popen("/usr/libexec/java_home -v 1.7+", "r");
if (output == NULL) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Could not run /usr/libexec/java_home");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Could not run /usr/libexec/java_home: %s",
+ GetLastErrorString().c_str());
}
char buf[512];
diff --git a/src/main/cpp/blaze_util_freebsd.cc b/src/main/cpp/blaze_util_freebsd.cc
index 5c516785f8..e105e37ff3 100644
--- a/src/main/cpp/blaze_util_freebsd.cc
+++ b/src/main/cpp/blaze_util_freebsd.cc
@@ -39,7 +39,7 @@
namespace blaze {
using blaze_util::die;
-using blaze_util::pdie;
+using blaze_util::GetLastErrorString;
using std::string;
string GetOutputRoot() {
@@ -79,12 +79,14 @@ string GetSelfPath() {
auto p = procstat_getprocs(procstat, KERN_PROC_PID, pid, &n);
if (p) {
if (n != 1) {
- pdie(blaze_exit_code::INTERNAL_ERROR,
- "expected exactly one process from procstat_getprocs, got %d", n);
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "expected exactly one process from procstat_getprocs, got %d: %s", n,
+ GetLastErrorString().c_str());
}
auto r = procstat_getpathname(procstat, p, buffer, PATH_MAX);
if (r != 0) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "error procstat_getpathname");
+ die(blaze_exit_code::INTERNAL_ERROR, "procstat_getpathname failed: %s",
+ GetLastErrorString().c_str());
}
procstat_freeprocs(procstat, p);
}
@@ -116,8 +118,9 @@ string GetProcessCWD(int pid) {
string cwd;
if (p) {
if (n != 1) {
- pdie(blaze_exit_code::INTERNAL_ERROR,
- "expected exactly one process from procstat_getprocs, got %d", n);
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "expected exactly one process from procstat_getprocs, got %d: %s", n,
+ GetLastErrorString().c_str());
}
auto files = procstat_getfiles(procstat, p, false);
filestat *entry;
diff --git a/src/main/cpp/blaze_util_linux.cc b/src/main/cpp/blaze_util_linux.cc
index 82c3b991ae..1682a65d39 100644
--- a/src/main/cpp/blaze_util_linux.cc
+++ b/src/main/cpp/blaze_util_linux.cc
@@ -38,7 +38,7 @@
namespace blaze {
using blaze_util::die;
-using blaze_util::pdie;
+using blaze_util::GetLastErrorString;
using std::string;
using std::vector;
@@ -89,7 +89,8 @@ string GetSelfPath() {
errno = ENAMETOOLONG;
}
if (bytes == -1) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "error reading /proc/self/exe");
+ die(blaze_exit_code::INTERNAL_ERROR, "error reading /proc/self/exe: %s",
+ GetLastErrorString().c_str());
}
buffer[bytes] = '\0'; // readlink does not NUL-terminate
return string(buffer);
@@ -112,8 +113,9 @@ void SetScheduling(bool batch_cpu_scheduling, int io_nice_level) {
sched_param param = {};
param.sched_priority = 0;
if (sched_setscheduler(0, SCHED_BATCH, &param)) {
- pdie(blaze_exit_code::INTERNAL_ERROR,
- "sched_setscheduler(SCHED_BATCH) failed");
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "sched_setscheduler(SCHED_BATCH) failed: %s",
+ GetLastErrorString().c_str());
}
}
@@ -121,9 +123,9 @@ void SetScheduling(bool batch_cpu_scheduling, int io_nice_level) {
if (blaze_util::sys_ioprio_set(
IOPRIO_WHO_PROCESS, getpid(),
IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, io_nice_level)) < 0) {
- pdie(blaze_exit_code::INTERNAL_ERROR,
- "ioprio_set() with class %d and level %d failed",
- IOPRIO_CLASS_BE, io_nice_level);
+ die(blaze_exit_code::INTERNAL_ERROR,
+ "ioprio_set() with class %d and level %d failed: %s", IOPRIO_CLASS_BE,
+ io_nice_level, GetLastErrorString().c_str());
}
}
}
@@ -183,8 +185,8 @@ string GetDefaultHostJavabase() {
// Resolve all symlinks.
char resolved_path[PATH_MAX];
if (realpath(javac_dir.c_str(), resolved_path) == NULL) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Could not resolve javac directory");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Could not resolve javac directory: %s", GetLastErrorString().c_str());
}
javac_dir = resolved_path;
@@ -203,8 +205,9 @@ static bool GetStartTime(const string& pid, string* start_time) {
vector<string> stat_entries = blaze_util::Split(statline, ' ');
if (stat_entries.size() < 22) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Format of stat file at %s is unknown", statfile.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Format of stat file at %s is unknown: %s", statfile.c_str(),
+ GetLastErrorString().c_str());
}
// Start time since startup in jiffies. This combined with the PID should be
@@ -219,14 +222,16 @@ void WriteSystemSpecificProcessIdentifier(
string start_time;
if (!GetStartTime(pid_string, &start_time)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Cannot get start time of process %s", pid_string.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Cannot get start time of process %s: %s", pid_string.c_str(),
+ GetLastErrorString().c_str());
}
string start_time_file = blaze_util::JoinPath(server_dir, "server.starttime");
if (!blaze_util::WriteFile(start_time, start_time_file)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Cannot write start time in server dir %s", server_dir.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Cannot write start time in server dir %s: %s", server_dir.c_str(),
+ GetLastErrorString().c_str());
}
}
diff --git a/src/main/cpp/blaze_util_posix.cc b/src/main/cpp/blaze_util_posix.cc
index eca9fdbc6c..2a3fba22ce 100644
--- a/src/main/cpp/blaze_util_posix.cc
+++ b/src/main/cpp/blaze_util_posix.cc
@@ -48,9 +48,9 @@
namespace blaze {
-using blaze_util::die;
-using blaze_util::pdie;
using blaze_exit_code::INTERNAL_ERROR;
+using blaze_util::die;
+using blaze_util::GetLastErrorString;
using std::string;
using std::vector;
@@ -340,7 +340,8 @@ int ExecuteDaemon(const string& exe,
int fds[2];
if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds)) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "socket creation failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "socket creation failed: %s",
+ GetLastErrorString().c_str());
}
const char* daemon_output_chars = daemon_output.c_str();
@@ -349,7 +350,8 @@ int ExecuteDaemon(const string& exe,
int child = fork();
if (child == -1) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "fork() failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "fork() failed: %s",
+ GetLastErrorString().c_str());
return -1;
} else if (child > 0) {
// Parent process (i.e. the client)
@@ -361,7 +363,8 @@ int ExecuteDaemon(const string& exe,
"cannot read server PID from server");
string pid_file = blaze_util::JoinPath(server_dir, kServerPidFile);
if (!blaze_util::WriteFile(ToString(server_pid), pid_file)) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "cannot write PID file");
+ die(blaze_exit_code::INTERNAL_ERROR, "cannot write PID file: %s",
+ GetLastErrorString().c_str());
return -1;
}
@@ -402,7 +405,8 @@ static string RunProgram(const string& exe,
const std::vector<string>& args_vector) {
int fds[2];
if (pipe(fds)) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "pipe creation failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "pipe creation failed: %s",
+ GetLastErrorString().c_str());
}
int recv_socket = fds[0];
int send_socket = fds[1];
@@ -412,14 +416,16 @@ static string RunProgram(const string& exe,
int child = fork();
if (child == -1) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "fork() failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "fork() failed: %s",
+ GetLastErrorString().c_str());
} else if (child > 0) { // we're the parent
close(send_socket); // parent keeps only the reading side
string result;
bool success = blaze_util::ReadFrom(recv_socket, &result);
close(recv_socket);
if (!success) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "Cannot read subprocess output");
+ die(blaze_exit_code::INTERNAL_ERROR, "Cannot read subprocess output: %s",
+ GetLastErrorString().c_str());
}
return result;
} else { // We're the child
@@ -454,14 +460,16 @@ void CreateSecureOutputRoot(const string& path) {
struct stat fileinfo = {};
if (!blaze_util::MakeDirectories(root, 0755)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "mkdir('%s')", root);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "mkdir('%s'): %s", root,
+ GetLastErrorString().c_str());
}
// The path already exists.
// Check ownership and mode, and verify that it is a directory.
if (lstat(root, &fileinfo) < 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "lstat('%s')", root);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "lstat('%s'): %s", root,
+ GetLastErrorString().c_str());
}
if (fileinfo.st_uid != geteuid()) {
@@ -479,7 +487,8 @@ void CreateSecureOutputRoot(const string& path) {
}
if (stat(root, &fileinfo) < 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "stat('%s')", root);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "stat('%s'): %s", root,
+ GetLastErrorString().c_str());
}
if (!S_ISDIR(fileinfo.st_mode)) {
@@ -559,8 +568,9 @@ static int setlk(int fd, struct flock *lock) {
if (fcntl(fd, F_OFD_SETLK, lock) == 0) return 0;
if (errno != EINVAL) {
if (errno != EACCES && errno != EAGAIN) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "unexpected result from F_OFD_SETLK");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "unexpected result from F_OFD_SETLK: %s",
+ GetLastErrorString().c_str());
}
return -1;
}
@@ -569,8 +579,8 @@ static int setlk(int fd, struct flock *lock) {
#endif
if (fcntl(fd, F_SETLK, lock) == 0) return 0;
if (errno != EACCES && errno != EAGAIN) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "unexpected result from F_SETLK");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "unexpected result from F_SETLK: %s", GetLastErrorString().c_str());
}
return -1;
}
@@ -581,15 +591,17 @@ uint64_t AcquireLock(const string& output_base, bool batch_mode, bool block,
int lockfd = open(lockfile.c_str(), O_CREAT|O_RDWR, 0644);
if (lockfd < 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "cannot open lockfile '%s' for writing", lockfile.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "cannot open lockfile '%s' for writing: %s", lockfile.c_str(),
+ GetLastErrorString().c_str());
}
// Keep server from inheriting a useless fd if we are not in batch mode
if (!batch_mode) {
if (fcntl(lockfd, F_SETFD, FD_CLOEXEC) == -1) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "fcntl(F_SETFD) failed for lockfile");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "fcntl(F_SETFD) failed for lockfile: %s",
+ GetLastErrorString().c_str());
}
}
@@ -699,8 +711,9 @@ string GetUserName() {
errno = 0;
passwd *pwent = getpwuid(getuid()); // NOLINT (single-threaded)
if (pwent == NULL || pwent->pw_name == NULL) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "$USER is not set, and unable to look up name of current user");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "$USER is not set, and unable to look up name of current user: %s",
+ GetLastErrorString().c_str());
}
return pwent->pw_name;
}
diff --git a/src/main/cpp/blaze_util_windows.cc b/src/main/cpp/blaze_util_windows.cc
index 449fd321a5..8097413309 100644
--- a/src/main/cpp/blaze_util_windows.cc
+++ b/src/main/cpp/blaze_util_windows.cc
@@ -62,12 +62,11 @@ using bazel::windows::AutoAttributeList;
using bazel::windows::AutoHandle;
using bazel::windows::CreateJunction;
-// TODO(bazel-team): get rid of die/pdie, handle errors on the caller side.
-// die/pdie are exit points in the code and they make it difficult to follow the
-// control flow, plus it's not clear whether they call destructors on local
-// variables in the call stack.
+// TODO(bazel-team): stop using die, handle errors on the caller side.
+// die calls exit(exitcode), which makes it difficult to follow the control flow
+// and does not call destructors on local variables on the call stack.
using blaze_util::die;
-using blaze_util::pdie;
+using blaze_util::GetLastErrorString;
using std::string;
using std::unique_ptr;
@@ -196,8 +195,8 @@ string GetProcessIdAsString() {
string GetSelfPath() {
WCHAR buffer[kWindowsPathBufferSize] = {0};
if (!GetModuleFileNameW(0, buffer, kWindowsPathBufferSize)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "GetSelfPath: GetModuleFileNameW");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "GetSelfPath: GetModuleFileNameW: %s", GetLastErrorString().c_str());
}
return string(blaze_util::WstringToCstring(buffer).get());
}
@@ -212,8 +211,8 @@ string GetOutputRoot() {
WCHAR buffer[kWindowsPathBufferSize] = {0};
if (!::GetTempPathW(kWindowsPathBufferSize, buffer)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "GetOutputRoot: GetTempPathW");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "GetOutputRoot: GetTempPathW: %s", GetLastErrorString().c_str());
}
return string(blaze_util::WstringToCstring(buffer).get());
}
@@ -285,8 +284,9 @@ static void CreateCommandLine(CmdLine* result, const string& exe,
std::ostringstream cmdline;
string short_exe;
if (!blaze_util::AsShortWindowsPath(exe, &short_exe)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "CreateCommandLine: AsShortWindowsPath(%s)", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "CreateCommandLine: AsShortWindowsPath(%s): %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
bool first = true;
for (const auto& s : args_vector) {
@@ -337,8 +337,8 @@ static void CreateCommandLine(CmdLine* result, const string& exe,
string cmdline_str = cmdline.str();
if (cmdline_str.size() >= MAX_CMDLINE_LENGTH) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "Command line too long (%d > %d): %s",
- cmdline_str.size(), MAX_CMDLINE_LENGTH, cmdline_str.c_str());
+ die(blaze_exit_code::INTERNAL_ERROR, "Command line too long (%d > %d): %s",
+ cmdline_str.size(), MAX_CMDLINE_LENGTH, cmdline_str.c_str());
}
// Copy command line into a mutable buffer.
@@ -364,16 +364,17 @@ static bool GetProcessStartupTime(HANDLE process, uint64_t* result) {
static void WriteProcessStartupTime(const string& server_dir, HANDLE process) {
uint64_t start_time = 0;
if (!GetProcessStartupTime(process, &start_time)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WriteProcessStartupTime(%s): GetProcessStartupTime",
- server_dir.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WriteProcessStartupTime(%s): GetProcessStartupTime failed: %s",
+ server_dir.c_str(), GetLastErrorString().c_str());
}
string start_time_file = blaze_util::JoinPath(server_dir, "server.starttime");
if (!blaze_util::WriteFile(ToString(start_time), start_time_file)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WriteProcessStartupTime(%s): WriteFile(%s)", server_dir.c_str(),
- start_time_file.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WriteProcessStartupTime(%s): WriteFile(%s) failed: %s",
+ server_dir.c_str(), start_time_file.c_str(),
+ GetLastErrorString().c_str());
}
}
@@ -444,9 +445,9 @@ int ExecuteDaemon(const string& exe, const std::vector<string>& args_vector,
BlazeServerStartup** server_startup) {
wstring wdaemon_output;
if (!blaze_util::AsAbsoluteWindowsPath(daemon_output, &wdaemon_output)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteDaemon(%s): AsAbsoluteWindowsPath(%s)", exe.c_str(),
- daemon_output.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteDaemon(%s): AsAbsoluteWindowsPath(%s) failed: %s", exe.c_str(),
+ daemon_output.c_str(), GetLastErrorString().c_str());
}
SECURITY_ATTRIBUTES sa;
@@ -460,16 +461,17 @@ int ExecuteDaemon(const string& exe, const std::vector<string>& args_vector,
AutoHandle devnull(::CreateFileA("NUL", GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL));
if (!devnull.IsValid()) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteDaemon(%s): CreateFileA(NUL)", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteDaemon(%s): CreateFileA(NUL) failed: %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
AutoHandle stdout_file(CreateJvmOutputFile(wdaemon_output.c_str(), &sa,
daemon_out_append));
if (!stdout_file.IsValid()) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteDaemon(%s): CreateJvmOutputFile(%ls)", exe.c_str(),
- wdaemon_output.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteDaemon(%s): CreateJvmOutputFile(%ls) failed: %s", exe.c_str(),
+ wdaemon_output.c_str(), GetLastErrorString().c_str());
}
HANDLE stderr_handle;
// We must duplicate the handle to stdout, otherwise "bazel clean --expunge"
@@ -484,9 +486,9 @@ int ExecuteDaemon(const string& exe, const std::vector<string>& args_vector,
/* dwDesiredAccess */ 0,
/* bInheritHandle */ TRUE,
/* dwOptions */ DUPLICATE_SAME_ACCESS)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteDaemon(%s): DuplicateHandle(%ls)", exe.c_str(),
- wdaemon_output.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteDaemon(%s): DuplicateHandle(%ls) failed: %s", exe.c_str(),
+ wdaemon_output.c_str(), GetLastErrorString().c_str());
}
AutoHandle stderr_file(stderr_handle);
@@ -497,8 +499,9 @@ int ExecuteDaemon(const string& exe, const std::vector<string>& args_vector,
if (!UpdateProcThreadAttribute(
lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
handlesToInherit, 2 * sizeof(HANDLE), NULL, NULL)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteDaemon(%s): UpdateProcThreadAttribute", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteDaemon(%s): UpdateProcThreadAttribute failed: %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
PROCESS_INFORMATION processInfo = {0};
@@ -528,8 +531,9 @@ int ExecuteDaemon(const string& exe, const std::vector<string>& args_vector,
/* lpProcessInformation */ &processInfo);
if (!ok) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteDaemon(%s): CreateProcess(%s)", exe.c_str(), cmdline.cmdline);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteDaemon(%s): CreateProcess(%s) failed: %s", exe.c_str(),
+ cmdline.cmdline, GetLastErrorString().c_str());
}
WriteProcessStartupTime(server_dir, processInfo.hProcess);
@@ -573,8 +577,9 @@ void ExecuteProgram(const string& exe, const std::vector<string>& args_vector) {
if (NestedJobsSupported()) {
job = CreateJobObject(NULL, NULL);
if (job == NULL) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteProgram(%s): CreateJobObject", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteProgram(%s): CreateJobObject failed: %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
JOBOBJECT_EXTENDED_LIMIT_INFORMATION job_info = {0};
@@ -583,8 +588,9 @@ void ExecuteProgram(const string& exe, const std::vector<string>& args_vector) {
if (!SetInformationJobObject(job, JobObjectExtendedLimitInformation,
&job_info, sizeof(job_info))) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteProgram(%s): SetInformationJobObject", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteProgram(%s): SetInformationJobObject failed: %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
}
@@ -601,8 +607,9 @@ void ExecuteProgram(const string& exe, const std::vector<string>& args_vector) {
/* lpProcessInformation */ &processInfo);
if (!success) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteProgram(%s): CreateProcess(%s)", exe.c_str(), cmdline.cmdline);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteProgram(%s): CreateProcess(%s) failed: %s", exe.c_str(),
+ cmdline.cmdline, GetLastErrorString().c_str());
}
// On Windows versions that support nested jobs (Windows 8 and above), we
@@ -618,15 +625,17 @@ void ExecuteProgram(const string& exe, const std::vector<string>& args_vector) {
// subprocesses via the JNI library.
if (job != INVALID_HANDLE_VALUE) {
if (!AssignProcessToJobObject(job, processInfo.hProcess)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteProgram(%s): AssignProcessToJobObject", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteProgram(%s): AssignProcessToJobObject failed: %s",
+ exe.c_str(), GetLastErrorString().c_str());
}
}
// Now that we potentially put the process into a new job object, we can start
// running it.
if (ResumeThread(processInfo.hThread) == -1) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ExecuteProgram(%s): ResumeThread", exe.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ExecuteProgram(%s): ResumeThread failed: %s", exe.c_str(),
+ GetLastErrorString().c_str());
}
WaitForSingleObject(processInfo.hProcess, INFINITE);
@@ -642,8 +651,9 @@ const char kListSeparator = ';';
string PathAsJvmFlag(const string& path) {
string spath;
if (!blaze_util::AsShortWindowsPath(path, &spath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "PathAsJvmFlag(%s): AsShortWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "PathAsJvmFlag(%s): AsShortWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
}
// Convert backslashes to forward slashes, in order to avoid the JVM parsing
// Windows paths as if they contained escaped characters.
@@ -656,8 +666,9 @@ string ConvertPath(const string& path) {
// The path may not be Windows-style and may not be normalized, so convert it.
wstring wpath;
if (!blaze_util::AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ConvertPath(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ConvertPath(%s): AsAbsoluteWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
}
std::transform(wpath.begin(), wpath.end(), wpath.begin(), ::towlower);
return string(blaze_util::WstringToCstring(
@@ -669,15 +680,17 @@ bool SymlinkDirectories(const string &posix_target, const string &posix_name) {
wstring name;
wstring target;
if (!blaze_util::AsAbsoluteWindowsPath(posix_name, &name)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "SymlinkDirectories(%s, %s): AsAbsoluteWindowsPath(%s)",
- posix_target.c_str(), posix_name.c_str(), posix_target.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "SymlinkDirectories(%s, %s): AsAbsoluteWindowsPath(%s) failed: %s",
+ posix_target.c_str(), posix_name.c_str(), posix_target.c_str(),
+ GetLastErrorString().c_str());
return false;
}
if (!blaze_util::AsAbsoluteWindowsPath(posix_target, &target)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "SymlinkDirectories(%s, %s): AsAbsoluteWindowsPath(%s)",
- posix_target.c_str(), posix_name.c_str(), posix_name.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "SymlinkDirectories(%s, %s): AsAbsoluteWindowsPath(%s) failed: %s",
+ posix_target.c_str(), posix_name.c_str(), posix_name.c_str(),
+ GetLastErrorString().c_str());
return false;
}
wstring werror(CreateJunction(name, target));
@@ -742,9 +755,9 @@ bool KillServerProcess(int pid, const string& output_base) {
BOOL result = TerminateProcess(process, /*uExitCode*/ 0);
if (!result || !AwaitServerProcessTermination(pid, output_base,
kPostKillGracePeriodSeconds)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "Cannot terminate server process with PID %d, output_base=(%s)", pid,
- output_base.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "Cannot terminate server process with PID %d, output_base=(%s): %s",
+ pid, output_base.c_str(), GetLastErrorString().c_str());
}
return result;
}
@@ -785,8 +798,8 @@ void CreateSecureOutputRoot(const string& path) {
// implementation does.
const char* root = path.c_str();
if (!blaze_util::MakeDirectories(path, 0755)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "MakeDirectories(%s) failed", root);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "MakeDirectories(%s) failed: %s", root, GetLastErrorString().c_str());
}
if (!blaze_util::IsDirectory(path)) {
@@ -878,17 +891,18 @@ void SetupStdStreams() {
LARGE_INTEGER WindowsClock::GetFrequency() {
LARGE_INTEGER result;
if (!QueryPerformanceFrequency(&result)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsClock::GetFrequency: QueryPerformanceFrequency");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsClock::GetFrequency: QueryPerformanceFrequency failed: %s",
+ GetLastErrorString().c_str());
}
// On ancient Windows versions (pre-XP) and specific hardware the result may
// be 0. Since this is pre-XP, we don't handle that, just error out.
if (result.QuadPart <= 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsClock::GetFrequency: QueryPerformanceFrequency returned "
- "invalid result (%llu)\n",
- result.QuadPart);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsClock::GetFrequency: QueryPerformanceFrequency returned "
+ "invalid result (%llu): %s",
+ result.QuadPart, GetLastErrorString().c_str());
}
return result;
@@ -898,8 +912,10 @@ LARGE_INTEGER WindowsClock::GetMillisecondsAsLargeInt(
const LARGE_INTEGER& freq) {
LARGE_INTEGER counter;
if (!QueryPerformanceCounter(&counter)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsClock::GetMillisecondsAsLargeInt: QueryPerformanceCounter");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsClock::GetMillisecondsAsLargeInt: QueryPerformanceCounter "
+ "failed: %s",
+ GetLastErrorString().c_str());
}
LARGE_INTEGER result;
@@ -931,9 +947,9 @@ uint64_t AcquireLock(const string& output_base, bool batch_mode, bool block,
string lockfile = blaze_util::JoinPath(output_base, "lock");
wstring wlockfile;
if (!blaze_util::AsAbsoluteWindowsPath(lockfile, &wlockfile)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "AcquireLock(%s): AsAbsoluteWindowsPath(%s)", output_base.c_str(),
- lockfile.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "AcquireLock(%s): AsAbsoluteWindowsPath(%s) failed: %s",
+ output_base.c_str(), lockfile.c_str(), GetLastErrorString().c_str());
}
blaze_lock->handle = INVALID_HANDLE_VALUE;
@@ -966,9 +982,9 @@ uint64_t AcquireLock(const string& output_base, bool batch_mode, bool block,
}
Sleep(/* dwMilliseconds */ 200);
} else {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "AcquireLock(%s): CreateFileW(%ls)", lockfile.c_str(),
- wlockfile.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "AcquireLock(%s): CreateFileW(%ls) failed: %s", lockfile.c_str(),
+ wlockfile.c_str(), GetLastErrorString().c_str());
}
}
uint64_t wait_time = GetMillisecondsMonotonic() - st;
@@ -982,9 +998,9 @@ uint64_t AcquireLock(const string& output_base, bool batch_mode, bool block,
/* nNumberOfBytesToLockLow */ 1,
/* nNumberOfBytesToLockHigh */ 0,
/* lpOverlapped */ &overlapped)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "AcquireLock(%s): LockFileEx(%ls)", lockfile.c_str(),
- wlockfile.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "AcquireLock(%s): LockFileEx(%ls) failed: %s", lockfile.c_str(),
+ wlockfile.c_str(), GetLastErrorString().c_str());
}
// On other platforms we write some info about this process into the lock file
// such as the server PID. On Windows we don't do that because the file is
@@ -1010,7 +1026,8 @@ string GetUserName() {
WCHAR buffer[UNLEN + 1];
DWORD len = UNLEN + 1;
if (!::GetUserNameW(buffer, &len)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "GetUserNameW");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "GetUserNameW failed: %s",
+ GetLastErrorString().c_str());
}
return string(blaze_util::WstringToCstring(buffer).get());
}
diff --git a/src/main/cpp/util/errors.cc b/src/main/cpp/util/errors.cc
index b337809325..ec25de3b57 100644
--- a/src/main/cpp/util/errors.cc
+++ b/src/main/cpp/util/errors.cc
@@ -25,6 +25,7 @@ namespace blaze_util {
// TODO(b/32967056) This should be a FATAL log statement
void die(const int exit_status, const char *format, ...) {
+ fprintf(stderr, "\nError: ");
va_list ap;
va_start(ap, format);
vfprintf(stderr, format, ap);
@@ -33,16 +34,4 @@ void die(const int exit_status, const char *format, ...) {
exit(exit_status);
}
-// TODO(b/32967056) This should be a FATAL log statement
-void pdie(const int exit_status, const char *format, ...) {
- const char *errormsg = GetLastErrorString().c_str();
- fprintf(stderr, "Error: ");
- va_list ap;
- va_start(ap, format);
- vfprintf(stderr, format, ap);
- va_end(ap);
- fprintf(stderr, ": %s\n", errormsg);
- exit(exit_status);
-}
-
} // namespace blaze_util
diff --git a/src/main/cpp/util/file_posix.cc b/src/main/cpp/util/file_posix.cc
index 6199d046cc..b04076ad95 100644
--- a/src/main/cpp/util/file_posix.cc
+++ b/src/main/cpp/util/file_posix.cc
@@ -160,17 +160,18 @@ class PosixPipe : public IPipe {
IPipe* CreatePipe() {
int fd[2];
if (pipe(fd) < 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "pipe()");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "pipe() failed: %s",
+ GetLastErrorString().c_str());
}
if (fcntl(fd[0], F_SETFD, FD_CLOEXEC) == -1) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "fcntl(F_SETFD, FD_CLOEXEC) failed");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "fcntl(F_SETFD, FD_CLOEXEC) failed: %s", GetLastErrorString().c_str());
}
if (fcntl(fd[1], F_SETFD, FD_CLOEXEC) == -1) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "fcntl(F_SETFD, FD_CLOEXEC) failed");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "fcntl(F_SETFD, FD_CLOEXEC) failed: %s", GetLastErrorString().c_str());
}
return new PosixPipe(fd[0], fd[1]);
@@ -328,12 +329,13 @@ void SyncFile(const string& path) {
const char* file_path = path.c_str();
int fd = open(file_path, O_RDONLY);
if (fd < 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "failed to open '%s' for syncing", file_path);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "failed to open '%s' for syncing: %s", file_path,
+ GetLastErrorString().c_str());
}
if (fsync(fd) < 0) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "failed to sync '%s'",
- file_path);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "failed to sync '%s': %s",
+ file_path, GetLastErrorString().c_str());
}
close(fd);
}
@@ -390,7 +392,8 @@ bool PosixFileMtime::Set(const string &path, const struct utimbuf &mtime) {
time_t PosixFileMtime::GetNow() {
time_t result = time(NULL);
if (result == -1) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "time(NULL) failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "time(NULL) failed: %s",
+ GetLastErrorString().c_str());
}
return result;
}
@@ -414,7 +417,8 @@ bool MakeDirectories(const string &path, unsigned int mode) {
string GetCwd() {
char cwdbuf[PATH_MAX];
if (getcwd(cwdbuf, sizeof cwdbuf) == NULL) {
- pdie(blaze_exit_code::INTERNAL_ERROR, "getcwd() failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "getcwd() failed: %s",
+ GetLastErrorString().c_str());
}
return string(cwdbuf);
}
@@ -443,7 +447,8 @@ void ForEachDirectoryEntry(const string &path,
if (ent->d_type == DT_UNKNOWN) {
struct stat buf;
if (lstat(filename.c_str(), &buf) == -1) {
- die(blaze_exit_code::INTERNAL_ERROR, "stat failed");
+ die(blaze_exit_code::INTERNAL_ERROR, "stat failed: %s",
+ GetLastErrorString().c_str());
}
is_directory = S_ISDIR(buf.st_mode);
} else {
diff --git a/src/main/cpp/util/file_windows.cc b/src/main/cpp/util/file_windows.cc
index 4768f5cd5c..2db123ec46 100644
--- a/src/main/cpp/util/file_windows.cc
+++ b/src/main/cpp/util/file_windows.cc
@@ -149,7 +149,8 @@ IPipe* CreatePipe() {
HANDLE read_handle = INVALID_HANDLE_VALUE;
HANDLE write_handle = INVALID_HANDLE_VALUE;
if (!CreatePipe(&read_handle, &write_handle, &sa, 0)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "CreatePipe");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "CreatePipe: %s",
+ GetLastErrorString().c_str());
}
return new WindowsPipe(read_handle, write_handle);
}
@@ -184,9 +185,10 @@ bool WindowsFileMtime::GetIfInDistantFuture(const string& path, bool* result) {
}
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsFileMtime::GetIfInDistantFuture(%s): AsAbsoluteWindowsPath",
- path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsFileMtime::GetIfInDistantFuture(%s): AsAbsoluteWindowsPath "
+ "failed: %s",
+ path.c_str(), GetLastErrorString().c_str());
}
AutoHandle handle(::CreateFileW(
@@ -236,8 +238,9 @@ bool WindowsFileMtime::Set(const string& path, const FILETIME& time) {
}
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsFileMtime::Set(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsFileMtime::Set(%s): AsAbsoluteWindowsPath failed: %s",
+ path.c_str(), GetLastErrorString().c_str());
return false;
}
@@ -267,8 +270,9 @@ FILETIME WindowsFileMtime::GetNow() {
::GetSystemTime(&sys_time);
FILETIME file_time;
if (!::SystemTimeToFileTime(&sys_time, &file_time)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsFileMtime::GetNow: SystemTimeToFileTime");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsFileMtime::GetNow: SystemTimeToFileTime failed: %s",
+ GetLastErrorString().c_str());
}
return file_time;
}
@@ -286,8 +290,9 @@ FILETIME WindowsFileMtime::GetFuture(WORD years) {
future_time.wMilliseconds = 0;
FILETIME file_time;
if (!::SystemTimeToFileTime(&future_time, &file_time)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WindowsFileMtime::GetFuture: SystemTimeToFileTime");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WindowsFileMtime::GetFuture: SystemTimeToFileTime failed: %s",
+ GetLastErrorString().c_str());
}
return file_time;
}
@@ -552,8 +557,9 @@ bool AsShortWindowsPath(const string& path, string* result) {
wstring wpath;
wstring wsuffix;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "AsShortWindowsPath(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "AsShortWindowsPath(%s): AsAbsoluteWindowsPath failed: %s",
+ path.c_str(), GetLastErrorString().c_str());
return false;
}
DWORD size = ::GetShortPathNameW(wpath.c_str(), nullptr, 0);
@@ -593,9 +599,9 @@ bool AsShortWindowsPath(const string& path, string* result) {
unique_ptr<WCHAR[]> wshort(
new WCHAR[size]); // size includes null-terminator
if (size - 1 != ::GetShortPathNameW(wpath.c_str(), wshort.get(), size)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "AsShortWindowsPath(%s): GetShortPathNameW(%S)", path.c_str(),
- wpath.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "AsShortWindowsPath(%s): GetShortPathNameW(%S) failed: %s",
+ path.c_str(), wpath.c_str(), GetLastErrorString().c_str());
}
// GetShortPathNameW may preserve the UNC prefix in the result, so strip it.
wresult = wstring(RemoveUncPrefixMaybe(wshort.get())) + wsuffix;
@@ -616,8 +622,9 @@ static bool OpenFileForReading(const string& filename, HANDLE* result) {
}
wstring wfilename;
if (!AsAbsoluteWindowsPath(filename, &wfilename)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "OpenFileForReading(%s): AsAbsoluteWindowsPath", filename.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "OpenFileForReading(%s): AsAbsoluteWindowsPath failed: %s",
+ filename.c_str(), GetLastErrorString().c_str());
}
*result = ::CreateFileW(
/* lpFileName */ wfilename.c_str(),
@@ -685,8 +692,9 @@ bool WriteFile(const void* data, size_t size, const string& filename,
}
wstring wpath;
if (!AsAbsoluteWindowsPath(filename, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "WriteFile(%s): AsAbsoluteWindowsPath", filename.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "WriteFile(%s): AsAbsoluteWindowsPath failed: %s", filename.c_str(),
+ GetLastErrorString().c_str());
return false;
}
@@ -727,17 +735,19 @@ int WriteToStdOutErr(const void* data, size_t size, bool to_stdout) {
int RenameDirectory(const std::string& old_name, const std::string& new_name) {
wstring wold_name;
if (!AsAbsoluteWindowsPath(old_name, &wold_name)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "RenameDirectory(%s, %s): AsAbsoluteWindowsPath(%s)", old_name.c_str(),
- new_name.c_str(), old_name.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "RenameDirectory(%s, %s): AsAbsoluteWindowsPath(%s) failed: %s",
+ old_name.c_str(), new_name.c_str(), old_name.c_str(),
+ GetLastErrorString().c_str());
return kRenameDirectoryFailureOtherError;
}
wstring wnew_name;
if (!AsAbsoluteWindowsPath(new_name, &wnew_name)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "RenameDirectory(%s, %s): AsAbsoluteWindowsPath(%s)", old_name.c_str(),
- new_name.c_str(), new_name.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "RenameDirectory(%s, %s): AsAbsoluteWindowsPath(%s) failed: %s",
+ old_name.c_str(), new_name.c_str(), new_name.c_str(),
+ GetLastErrorString().c_str());
return kRenameDirectoryFailureOtherError;
}
@@ -777,8 +787,9 @@ bool UnlinkPath(const string& file_path) {
wstring wpath;
if (!AsAbsoluteWindowsPath(file_path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "UnlinkPath(%s): AsAbsoluteWindowsPath", file_path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "UnlinkPath(%s): AsAbsoluteWindowsPath failed: %s", file_path.c_str(),
+ GetLastErrorString().c_str());
return false;
}
return UnlinkPathW(wpath);
@@ -909,8 +920,9 @@ bool JunctionResolver::Resolve(const WCHAR* path, unique_ptr<WCHAR[]>* result) {
bool ReadDirectorySymlink(const string& name, string* result) {
wstring wname;
if (!AsAbsoluteWindowsPath(name, &wname)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ReadDirectorySymlink(%s): AsAbsoluteWindowsPath", name.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ReadDirectorySymlink(%s): AsAbsoluteWindowsPath failed: %s",
+ name.c_str(), GetLastErrorString().c_str());
return false;
}
unique_ptr<WCHAR[]> result_ptr;
@@ -930,8 +942,9 @@ bool PathExists(const string& path) {
}
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "PathExists(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "PathExists(%s): AsAbsoluteWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
return false;
}
return JunctionResolver().Resolve(wpath.c_str(), nullptr);
@@ -946,8 +959,9 @@ string MakeCanonical(const char* path) {
return "";
}
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "MakeCanonical(%s): AsAbsoluteWindowsPath", path);
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "MakeCanonical(%s): AsAbsoluteWindowsPath failed: %s", path,
+ GetLastErrorString().c_str());
}
// Resolve all segments of the path. Do this from leaf to root, so we always
@@ -1052,8 +1066,9 @@ static bool CanReadFileW(const wstring& path) {
bool CanReadFile(const std::string& path) {
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "CanReadFile(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "CanReadFile(%s): AsAbsoluteWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
return false;
}
return CanReadFileW(wpath);
@@ -1062,8 +1077,9 @@ bool CanReadFile(const std::string& path) {
bool CanExecuteFile(const std::string& path) {
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "CanExecuteFile(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "CanExecuteFile(%s): AsAbsoluteWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
return false;
}
return CanReadFileW(wpath) && (ends_with(wpath, wstring(L".exe")) ||
@@ -1075,8 +1091,9 @@ bool CanExecuteFile(const std::string& path) {
bool CanAccessDirectory(const std::string& path) {
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "CanAccessDirectory(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "CanAccessDirectory(%s): AsAbsoluteWindowsPath failed: %s",
+ path.c_str(), GetLastErrorString().c_str());
return false;
}
DWORD attr = ::GetFileAttributesW(wpath.c_str());
@@ -1142,8 +1159,9 @@ bool IsDirectory(const string& path) {
}
wstring wpath;
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "IsDirectory(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "IsDirectory(%s): AsAbsoluteWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
return false;
}
return IsDirectoryW(wpath);
@@ -1175,8 +1193,9 @@ static bool MakeDirectoriesW(const wstring& path) {
if (parent.empty()) {
// Since `path` is not a root directory, there should have been at least one
// directory above it.
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "MakeDirectoriesW(%S), could not find dirname", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "MakeDirectoriesW(%S), could not find dirname: %s", path.c_str(),
+ GetLastErrorString().c_str());
}
return MakeDirectoriesW(parent) &&
::CreateDirectoryW(path.c_str(), NULL) == TRUE;
@@ -1192,8 +1211,9 @@ bool MakeDirectories(const string& path, unsigned int mode) {
// According to MSDN, CreateDirectory's limit without the UNC prefix is
// 248 characters (so it could fit another filename before reaching MAX_PATH).
if (!AsAbsoluteWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "MakeDirectories(%s): AsAbsoluteWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "MakeDirectories(%s): AsAbsoluteWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
return false;
}
return MakeDirectoriesW(wpath);
@@ -1203,7 +1223,8 @@ static unique_ptr<WCHAR[]> GetCwdW() {
DWORD len = ::GetCurrentDirectoryW(0, nullptr);
unique_ptr<WCHAR[]> cwd(new WCHAR[len]);
if (!::GetCurrentDirectoryW(len, cwd.get())) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR, "GetCurrentDirectoryW");
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "GetCurrentDirectoryW failed: %s", GetLastErrorString().c_str());
}
for (WCHAR* p = cwd.get(); *p != 0; ++p) {
*p = towlower(*p);
@@ -1235,8 +1256,9 @@ void ForEachDirectoryEntry(const string &path,
return;
}
if (!AsWindowsPath(path, &wpath)) {
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "ForEachDirectoryEntry(%s): AsWindowsPath", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "ForEachDirectoryEntry(%s): AsWindowsPath failed: %s", path.c_str(),
+ GetLastErrorString().c_str());
}
static const wstring kUncPrefix(L"\\\\?\\");
@@ -1273,8 +1295,8 @@ string NormalizeWindowsPath(string path) {
}
if (path[0] == '/') {
// This is an absolute MSYS path, error out.
- pdie(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
- "NormalizeWindowsPath(%s): expected a Windows path", path.c_str());
+ die(blaze_exit_code::LOCAL_ENVIRONMENTAL_ERROR,
+ "NormalizeWindowsPath(%s): expected a Windows path", path.c_str());
}
if (path.size() >= 4 && HasUncPrefix(path.c_str())) {
path = path.substr(4);
diff --git a/third_party/ijar/mapped_file_windows.cc b/third_party/ijar/mapped_file_windows.cc
index abc93c2791..6fb8b369d6 100644
--- a/third_party/ijar/mapped_file_windows.cc
+++ b/third_party/ijar/mapped_file_windows.cc
@@ -46,29 +46,36 @@ MappedInputFile::MappedInputFile(const char* name) {
wstring wname;
if (!blaze_util::AsAbsoluteWindowsPath(name, &wname)) {
- blaze_util::pdie(255, "MappedInputFile(%s): AsAbsoluteWindowsPath", name);
+ blaze_util::die(255,
+ "MappedInputFile(%s): AsAbsoluteWindowsPath failed: %s",
+ name, blaze_util::GetLastErrorString().c_str());
}
HANDLE file = CreateFileW(wname.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if (file == INVALID_HANDLE_VALUE) {
- blaze_util::pdie(255, "MappedInputFile(%s): CreateFileW(%S)", name,
- wname.c_str());
+ blaze_util::die(255, "MappedInputFile(%s): CreateFileW(%S) failed: %s",
+ name, wname.c_str(),
+ blaze_util::GetLastErrorString().c_str());
}
LARGE_INTEGER size;
if (!GetFileSizeEx(file, &size)) {
- blaze_util::pdie(255, "MappedInputFile(%s): GetFileSizeEx", name);
+ blaze_util::die(255, "MappedInputFile(%s): GetFileSizeEx failed: %s", name,
+ blaze_util::GetLastErrorString().c_str());
}
HANDLE mapping = CreateFileMapping(file, NULL, PAGE_READONLY,
size.HighPart, size.LowPart, NULL);
if (mapping == NULL || mapping == INVALID_HANDLE_VALUE) {
- blaze_util::pdie(255, "MappedInputFile(%s): CreateFileMapping", name);
+ blaze_util::die(255, "MappedInputFile(%s): CreateFileMapping failed: %s",
+ name),
+ blaze_util::GetLastErrorString().c_str();
}
void *view = MapViewOfFileEx(mapping, FILE_MAP_READ, 0, 0, 0, NULL);
if (view == NULL) {
- blaze_util::pdie(255, "MappedInputFile(%s): MapViewOfFileEx", name);
+ blaze_util::die(255, "MappedInputFile(%s): MapViewOfFileEx failed: %s",
+ name, blaze_util::GetLastErrorString().c_str());
}
impl_ = new MappedInputFileImpl(file, mapping);
@@ -89,15 +96,20 @@ void MappedInputFile::Discard(size_t bytes) {
int MappedInputFile::Close() {
if (!UnmapViewOfFile(buffer_)) {
- blaze_util::pdie(255, "MappedInputFile::Close: UnmapViewOfFile");
+ blaze_util::die(255, "MappedInputFile::Close: UnmapViewOfFile failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
if (!CloseHandle(impl_->mapping_)) {
- blaze_util::pdie(255, "MappedInputFile::Close: CloseHandle for mapping");
+ blaze_util::die(
+ 255, "MappedInputFile::Close: CloseHandle for mapping failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
if (!CloseHandle(impl_->file_)) {
- blaze_util::pdie(255, "MappedInputFile::Close: CloseHandle for file");
+ blaze_util::die(255,
+ "MappedInputFile::Close: CloseHandle for file failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
return 0;
@@ -120,24 +132,29 @@ MappedOutputFile::MappedOutputFile(const char* name, u8 estimated_size) {
wstring wname;
if (!blaze_util::AsAbsoluteWindowsPath(name, &wname)) {
- blaze_util::pdie(255, "MappedOutputFile(%s): AsAbsoluteWindowsPath", name);
+ blaze_util::die(255,
+ "MappedOutputFile(%s): AsAbsoluteWindowsPath failed: %s",
+ name, blaze_util::GetLastErrorString().c_str());
}
HANDLE file = CreateFileW(wname.c_str(), GENERIC_READ | GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, 0, NULL);
if (file == INVALID_HANDLE_VALUE) {
- blaze_util::pdie(255, "MappedOutputFile(%s): CreateFileW(%S)", name,
- wname.c_str());
+ blaze_util::die(255, "MappedOutputFile(%s): CreateFileW(%S) failed: %s",
+ name, wname.c_str(),
+ blaze_util::GetLastErrorString().c_str());
}
HANDLE mapping = CreateFileMapping(file, NULL, PAGE_READWRITE,
estimated_size >> 32, estimated_size & 0xffffffffUL, NULL);
if (mapping == NULL || mapping == INVALID_HANDLE_VALUE) {
- blaze_util::pdie(255, "MappedOutputFile(%s): CreateFileMapping", name);
+ blaze_util::die(255, "MappedOutputFile(%s): CreateFileMapping failed: %s",
+ name);
}
void *view = MapViewOfFileEx(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
if (view == NULL) {
- blaze_util::pdie(255, "MappedOutputFile(%s): MapViewOfFileEx", name);
+ blaze_util::die(255, "MappedOutputFile(%s): MapViewOfFileEx failed: %s",
+ name, blaze_util::GetLastErrorString().c_str());
CloseHandle(mapping);
CloseHandle(file);
return;
@@ -154,23 +171,30 @@ MappedOutputFile::~MappedOutputFile() {
int MappedOutputFile::Close(int size) {
if (!UnmapViewOfFile(buffer_)) {
- blaze_util::pdie(255, "MappedOutputFile::Close: UnmapViewOfFile");
+ blaze_util::die(255, "MappedOutputFile::Close: UnmapViewOfFile failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
if (!CloseHandle(impl_->mapping_)) {
- blaze_util::pdie(255, "MappedOutputFile::Close: CloseHandle for mapping");
+ blaze_util::die(
+ 255, "MappedOutputFile::Close: CloseHandle for mapping failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
if (!SetFilePointer(impl_->file_, size, NULL, FILE_BEGIN)) {
- blaze_util::pdie(255, "MappedOutputFile::Close: SetFilePointer");
+ blaze_util::die(255, "MappedOutputFile::Close: SetFilePointer failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
if (!SetEndOfFile(impl_->file_)) {
- blaze_util::pdie(255, "MappedOutputFile::Close: SetEndOfFile");
+ blaze_util::die(255, "MappedOutputFile::Close: SetEndOfFile failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
if (!CloseHandle(impl_->file_)) {
- blaze_util::pdie(255, "MappedOutputFile::Close: CloseHandle for file");
+ blaze_util::die(255,
+ "MappedOutputFile::Close: CloseHandle for file failed: %s",
+ blaze_util::GetLastErrorString().c_str());
}
return 0;
diff --git a/third_party/ijar/platform_utils.cc b/third_party/ijar/platform_utils.cc
index dde8868005..09818f7162 100644
--- a/third_party/ijar/platform_utils.cc
+++ b/third_party/ijar/platform_utils.cc
@@ -39,7 +39,8 @@ bool stat_file(const char* path, Stat* result) {
#if defined(COMPILER_MSVC) || defined(__CYGWIN__)
std::wstring wpath;
if (!blaze_util::AsAbsoluteWindowsPath(path, &wpath)) {
- blaze_util::pdie(255, "stat_file: AsAbsoluteWindowsPath(%s)", path);
+ blaze_util::die(255, "stat_file: AsAbsoluteWindowsPath(%s) failed: %s",
+ path, blaze_util::GetLastErrorString().c_str());
}
bool success = false;
BY_HANDLE_FILE_INFORMATION info;