diff --git a/wpilibc/athena/src/RobotDrive.cpp b/wpilibc/athena/src/RobotDrive.cpp index 25143efc6c..715a71df1a 100644 --- a/wpilibc/athena/src/RobotDrive.cpp +++ b/wpilibc/athena/src/RobotDrive.cpp @@ -21,7 +21,8 @@ using namespace frc; const int RobotDrive::kMaxNumberOfMotors; -static auto make_shared_nodelete(SpeedController* ptr) { +static std::shared_ptr make_shared_nodelete( + SpeedController* ptr) { return std::shared_ptr(ptr, NullDeleter()); } diff --git a/wpilibc/athena/src/Utility.cpp b/wpilibc/athena/src/Utility.cpp index 70234197be..1c1d2309e0 100644 --- a/wpilibc/athena/src/Utility.cpp +++ b/wpilibc/athena/src/Utility.cpp @@ -7,9 +7,12 @@ #include "Utility.h" +#ifndef _WIN32 #include #include +#endif +#include #include #include @@ -35,7 +38,23 @@ bool wpi_assert_impl(bool conditionValue, llvm::StringRef conditionText, llvm::raw_svector_ostream locStream(locBuf); locStream << funcName << " ["; llvm::SmallString<128> fileTemp; + +#ifdef _WIN32 + char fname[60]; + char ext[10]; + _splitpath_s(fileName.c_str(fileTemp), nullptr, 0, nullptr, 0, fname, 60, + ext, 10); + locStream << fname << ":" << lineNumber << "]"; +#elif __APPLE__ + auto file = fileName.c_str(fileTemp); + int len = std::strlen(file) + 1; + char* basestr = new char[len + 1]; + std::strncpy(basestr, file, len); + locStream << basestr << ":" << lineNumber << "]"; + delete[] basestr; +#else locStream << basename(fileName.c_str(fileTemp)) << ":" << lineNumber << "]"; +#endif llvm::SmallString<128> errorBuf; llvm::raw_svector_ostream errorStream(errorBuf); @@ -73,7 +92,23 @@ void wpi_assertEqual_common_impl(llvm::StringRef valueA, llvm::StringRef valueB, llvm::raw_svector_ostream locStream(locBuf); locStream << funcName << " ["; llvm::SmallString<128> fileTemp; + +#ifdef _WIN32 + char fname[60]; + char ext[10]; + _splitpath_s(fileName.c_str(fileTemp), nullptr, 0, nullptr, 0, fname, 60, ext, + 10); + locStream << fname << ":" << lineNumber << "]"; +#elif __APPLE__ + auto file = fileName.c_str(fileTemp); + int len = std::strlen(file) + 1; + char* basestr = new char[len + 1]; + std::strncpy(basestr, file, len); + locStream << basestr << ":" << lineNumber << "]"; + delete[] basestr; +#else locStream << basename(fileName.c_str(fileTemp)) << ":" << lineNumber << "]"; +#endif llvm::SmallString<128> errorBuf; llvm::raw_svector_ostream errorStream(errorBuf); @@ -189,6 +224,8 @@ bool GetUserButton() { return value; } +#ifndef _WIN32 + /** * Demangle a C++ symbol, used for printing stack traces. */ @@ -235,4 +272,12 @@ std::string GetStackTrace(int offset) { return trace.str(); } +#else +static std::string demangle(char const* mangledSymbol) { + return "no demangling on windows"; +} + +std::string GetStackTrace(int offset) { return "no stack trace on windows"; } +#endif + } // namespace frc diff --git a/wpilibc/sim/src/RobotDrive.cpp b/wpilibc/sim/src/RobotDrive.cpp index 59f26bd538..8b02a39611 100644 --- a/wpilibc/sim/src/RobotDrive.cpp +++ b/wpilibc/sim/src/RobotDrive.cpp @@ -20,7 +20,8 @@ using namespace frc; const int RobotDrive::kMaxNumberOfMotors; -static auto make_shared_nodelete(SpeedController* ptr) { +static std::shared_ptr make_shared_nodelete( + SpeedController* ptr) { return std::shared_ptr(ptr, NullDeleter()); }