1/*
2 * Copyright (C) 2008 Collabora Ltd.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19#include "config.h"
20#include "SharedBuffer.h"
21
22#include <wtf/glib/GUniquePtr.h>
23#include <wtf/text/CString.h>
24
25#include <glib.h>
26
27namespace WebCore {
28
29SharedBuffer::SharedBuffer(GBytes* bytes)
30{
31 ASSERT(bytes);
32 m_size = g_bytes_get_size(bytes);
33 m_segments.append({ 0, DataSegment::create(GRefPtr<GBytes>(bytes)) });
34}
35
36Ref<SharedBuffer> SharedBuffer::create(GBytes* bytes)
37{
38 return adoptRef(*new SharedBuffer(bytes));
39}
40
41RefPtr<SharedBuffer> SharedBuffer::createFromReadingFile(const String& filePath)
42{
43 if (filePath.isEmpty())
44 return nullptr;
45
46 CString filename = FileSystem::fileSystemRepresentation(filePath);
47 GUniqueOutPtr<gchar> contents;
48 gsize size;
49 GUniqueOutPtr<GError> error;
50 if (!g_file_get_contents(filename.data(), &contents.outPtr(), &size, &error.outPtr())) {
51 LOG_ERROR("Failed to fully read contents of file %s - %s", FileSystem::filenameForDisplay(filePath).utf8().data(), error->message);
52 return nullptr;
53 }
54
55 return SharedBuffer::create(contents.get(), size);
56}
57
58} // namespace WebCore
59