# # # patch "ChangeLog" # from [547deacf9f6f8f766248e88ab668d67188671dff] # to [3383b77e1cf39b1bbf9a8dd58c7ca73ab2cebd8b] # # patch "win32/fs.cc" # from [89abf9434fa2593686f9b4ea42d9bbfe649fa592] # to [ff7c48b0e00a6f458db9dcdb83dfb8ed7f77a900] # ============================================================ --- ChangeLog 547deacf9f6f8f766248e88ab668d67188671dff +++ ChangeLog 3383b77e1cf39b1bbf9a8dd58c7ca73ab2cebd8b @@ -1,5 +1,8 @@ 2006-05-24 Matthew Gregan + * win32/fs.cc: Add win32_strerror() and use it in + rename_clobberingly() rather than displaying a raw error number to + the user. * netxx/osutil.{cxx,h}: Add OS-specific strerror function. This continues to call strerror() on POSIX, and tries using FormatMessage() and a built-in error message table on Win32. ============================================================ --- win32/fs.cc 89abf9434fa2593686f9b4ea42d9bbfe649fa592 +++ win32/fs.cc ff7c48b0e00a6f458db9dcdb83dfb8ed7f77a900 @@ -18,6 +18,22 @@ #include "platform.hh" std::string +win32_strerror(DWORD errnum) +{ + LPTSTR tstr; + + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, + 0, errnum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + reinterpret_cast(&tstr), 0, + static_cast(0)) == 0) + return (F("unknown error code %d") % errnum).str(); + + std::string str = tstr; + LocalFree(tstr); + return str; +} + +std::string get_current_working_dir() { char buffer[4096]; @@ -194,6 +210,7 @@ if (sleepTime < 250) sleepTime *= 2; } - E(false, F("renaming '%s' to '%s' failed: %d") % from % to % lastError); + E(false, F("renaming '%s' to '%s' failed: %s (%d)") % from % to + % win32_strerror(lastError) % lastError); }