Skip to content

Commit

Permalink
OrcLib: add enum class FileDisposition
Browse files Browse the repository at this point in the history
  • Loading branch information
fabienfl-orc committed Feb 10, 2021
1 parent a324640 commit f925e31
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/OrcLib/CMakeLists.txt
Expand Up @@ -254,6 +254,8 @@ source_group(ExtensionLibraries\\Yara FILES ${SRC_EXTENSIONLIBRARIES_YARA})
set(SRC_INOUT
"LocationOutput.h"
"OutputWriter.h"
"FileDisposition.h"
"FileDisposition.cpp"
)

source_group(In&Out FILES ${SRC_INOUT})
Expand Down
67 changes: 67 additions & 0 deletions src/OrcLib/FileDisposition.cpp
@@ -0,0 +1,67 @@
//
// SPDX-License-Identifier: LGPL-2.1-or-later
//
// Copyright © 2021 ANSSI. All Rights Reserved.
//
// Author(s): fabienfl
//

#include "FileDisposition.h"

#include <string>

namespace Orc {

constexpr std::wstring_view kAppend = L"append";
constexpr std::wstring_view kTruncate = L"truncate";
constexpr std::wstring_view kCreateNew = L"create_new";
constexpr std::wstring_view kUnknown = L"unknown";

std::wstring_view ToString(FileDisposition disposition)
{
switch (disposition)
{
case FileDisposition::Append:
return kAppend;
case FileDisposition::Truncate:
return kTruncate;
case FileDisposition::CreateNew:
return kCreateNew;
default:
return kUnknown;
}
}

FileDisposition ToFileDisposition(const std::wstring& disposition, std::error_code& ec)
{
const std::map<std::wstring_view, FileDisposition> map = {
{kAppend, FileDisposition::Append},
{kTruncate, FileDisposition::Truncate},
{kCreateNew, FileDisposition::CreateNew}};

auto it = map.find(disposition);
if (it == std::cend(map))
{
ec = std::make_error_code(std::errc::invalid_argument);
return FileDisposition::Unknown;
}

return it->second;
}

std::ios_base::openmode ToOpenMode(FileDisposition disposition)
{
switch (disposition)
{
case FileDisposition::Append:
return std::ios::app;
case FileDisposition::CreateNew:
case FileDisposition::Truncate:
return std::ios_base::trunc;
default:
assert(nullptr);
return std::ios_base::ate;
}
}

} // namespace Orc
30 changes: 30 additions & 0 deletions src/OrcLib/FileDisposition.h
@@ -0,0 +1,30 @@
//
// SPDX-License-Identifier: LGPL-2.1-or-later
//
// Copyright © 2021 ANSSI. All Rights Reserved.
//
// Author(s): fabienfl
//

#pragma once

#include <string_view>
#include <system_error>
#include <ios>

namespace Orc {

enum class FileDisposition
{
Unknown,
Append,
Truncate,
CreateNew
};

std::wstring_view ToString(FileDisposition disposition);
FileDisposition ToFileDisposition(const std::wstring& disposition, std::error_code& ec = std::error_code());

std::ios_base::openmode ToOpenMode(FileDisposition disposition);

} // namespace Orc

0 comments on commit f925e31

Please sign in to comment.