Commit 0788f5ed authored by Boaz Brickner's avatar Boaz Brickner

Use _wfopen_s() instead of _wfopen() to open pcap files and give better error messages.

parent 7d72f9b8
......@@ -35,9 +35,25 @@ pcap_t* OfflinePacketCommunicator::OpenFile(String^ fileName)
pcap_t *pcapDescriptor;
if (!StringExtensions::AreAllCharactersInRange(fileName, 0, 255)) {
std::wstring unamangedFilename = MarshalingServices::ManagedToUnmanagedWideString(fileName);
file = _wfopen(unamangedFilename.c_str(), L"rb");
if (file == NULL)
throw gcnew InvalidOperationException(String::Format(CultureInfo::InvariantCulture, "Failed opening file {0}.", fileName));
errno_t fileOpenError = _wfopen_s(&file, unamangedFilename.c_str(), L"rb");
if (fileOpenError != 0 || file == nullptr)
{
String^ errorMessage;
if (fileOpenError != 0)
{
// TODO: Replace with constexpr when microsoft support it.
static const int ERROR_MESSAGE_BUFFER_SIZE = 1024;
wchar_t errorMessageBuffer[ERROR_MESSAGE_BUFFER_SIZE];
errno_t getErrorMessageError = _wcserror_s(errorMessageBuffer, ERROR_MESSAGE_BUFFER_SIZE, fileOpenError);
errorMessage = getErrorMessageError == 0 ? gcnew String(errorMessageBuffer, 0, wcslen(errorMessageBuffer)) : "Unknown";
}
else
{
errorMessage = "Unknown";
}
throw gcnew InvalidOperationException(
String::Format(CultureInfo::InvariantCulture, "Failed opening file {0}. Error: {1}", fileName, errorMessage));
}
pcapDescriptor = pcap_fopen_offline(file, errorBuffer);
} else {
std::string unamangedFilename = MarshalingServices::ManagedToUnmanagedString(fileName);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment