aboutsummaryrefslogtreecommitdiff
path: root/src/common/platform/win/StreamConvert.cpp
blob: d547caa52dd84ac931c082685926ff4f72c83e90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "cru/common/platform/win/StreamConvert.h"
#include "BrigdeComStream.h"
#include "Win32FileStreamPrivate.h"
#include "cru/common/Exception.h"
#include "cru/common/io/MemoryStream.h"
#include "cru/common/io/OpenFileFlag.h"
#include "cru/common/platform/win/ComAutoInit.h"
#include "cru/common/platform/win/Exception.h"
#include "cru/common/platform/win/Win32FileStream.h"

#include <shlwapi.h>
#include <winnt.h>

namespace cru::platform::win {
IStream* ConvertStreamToComStream(io::Stream* stream) {
  static ComAutoInit com_auto_init;

  if (auto memory_stream = dynamic_cast<io::MemoryStream*>(stream)) {
    return SHCreateMemStream(
        reinterpret_cast<const BYTE*>(memory_stream->GetBuffer()),
        memory_stream->GetSize());
  } else if (auto file_stream = dynamic_cast<Win32FileStream*>(stream)) {
    return file_stream->GetPrivate_()->stream_;
  } else {
    return new BridgeComStream(stream);
  }
}
}  // namespace cru::platform::win