aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp')
-rw-r--r--contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp268
1 files changed, 134 insertions, 134 deletions
diff --git a/contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp b/contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp
index edeb4f5366..e7fe6a1ada 100644
--- a/contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp
+++ b/contrib/libs/poco/Foundation/src/SharedMemory_POSIX.cpp
@@ -1,134 +1,134 @@
-//
-// SharedMemoryImpl.cpp
-//
-// Library: Foundation
-// Package: Processes
-// Module: SharedMemoryImpl
-//
-// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/SharedMemory_POSIX.h"
-#include "Poco/Exception.h"
-#include "Poco/File.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-
-namespace Poco {
-
-
-SharedMemoryImpl::SharedMemoryImpl(const std::string& name, std::size_t size, SharedMemory::AccessMode mode, const void* addrHint, bool server):
- _size(size),
- _fd(-1),
- _address(0),
- _access(mode),
- _name("/"),
- _fileMapped(false),
- _server(server)
-{
-#if POCO_OS == POCO_OS_HPUX
- _name.append("tmp/");
-#endif
-
- _name.append(name);
-
- int flags = _server ? O_CREAT : 0;
- if (_access == SharedMemory::AM_WRITE)
- flags |= O_RDWR;
- else
- flags |= O_RDONLY;
-
- // open the shared memory segment
- _fd = ::shm_open(_name.c_str(), flags, S_IRUSR | S_IWUSR);
- if (_fd == -1)
- throw SystemException("Cannot create shared memory object", _name);
-
- // now set the correct size for the segment
- if (_server && -1 == ::ftruncate(_fd, size))
- {
- ::close(_fd);
- _fd = -1;
- ::shm_unlink(_name.c_str());
- throw SystemException("Cannot resize shared memory object", _name);
- }
- map(addrHint);
-}
-
-
-SharedMemoryImpl::SharedMemoryImpl(const Poco::File& file, SharedMemory::AccessMode mode, const void* addrHint):
- _size(0),
- _fd(-1),
- _address(0),
- _access(mode),
- _name(file.path()),
- _fileMapped(true),
- _server(false)
-{
- if (!file.exists() || !file.isFile())
- throw FileNotFoundException(file.path());
-
- _size = file.getSize();
- int flag = O_RDONLY;
- if (mode == SharedMemory::AM_WRITE)
- flag = O_RDWR;
- _fd = ::open(_name.c_str(), flag);
- if (-1 == _fd)
- throw OpenFileException("Cannot open memory mapped file", _name);
-
- map(addrHint);
-}
-
-
-SharedMemoryImpl::~SharedMemoryImpl()
-{
- unmap();
- close();
-}
-
-
-void SharedMemoryImpl::map(const void* addrHint)
-{
- int access = PROT_READ;
- if (_access == SharedMemory::AM_WRITE)
- access |= PROT_WRITE;
-
- void* addr = ::mmap(const_cast<void*>(addrHint), _size, access, MAP_SHARED, _fd, 0);
- if (addr == MAP_FAILED)
- throw SystemException("Cannot map file into shared memory", _name);
-
- _address = static_cast<char*>(addr);
-}
-
-
-void SharedMemoryImpl::unmap()
-{
- if (_address)
- {
- ::munmap(_address, _size);
- }
-}
-
-
-void SharedMemoryImpl::close()
-{
- if (_fd != -1)
- {
- ::close(_fd);
- _fd = -1;
- }
- if (!_fileMapped && _server)
- {
- ::shm_unlink(_name.c_str());
- }
-}
-
-
-} // namespace Poco
+//
+// SharedMemoryImpl.cpp
+//
+// Library: Foundation
+// Package: Processes
+// Module: SharedMemoryImpl
+//
+// Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/SharedMemory_POSIX.h"
+#include "Poco/Exception.h"
+#include "Poco/File.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+
+namespace Poco {
+
+
+SharedMemoryImpl::SharedMemoryImpl(const std::string& name, std::size_t size, SharedMemory::AccessMode mode, const void* addrHint, bool server):
+ _size(size),
+ _fd(-1),
+ _address(0),
+ _access(mode),
+ _name("/"),
+ _fileMapped(false),
+ _server(server)
+{
+#if POCO_OS == POCO_OS_HPUX
+ _name.append("tmp/");
+#endif
+
+ _name.append(name);
+
+ int flags = _server ? O_CREAT : 0;
+ if (_access == SharedMemory::AM_WRITE)
+ flags |= O_RDWR;
+ else
+ flags |= O_RDONLY;
+
+ // open the shared memory segment
+ _fd = ::shm_open(_name.c_str(), flags, S_IRUSR | S_IWUSR);
+ if (_fd == -1)
+ throw SystemException("Cannot create shared memory object", _name);
+
+ // now set the correct size for the segment
+ if (_server && -1 == ::ftruncate(_fd, size))
+ {
+ ::close(_fd);
+ _fd = -1;
+ ::shm_unlink(_name.c_str());
+ throw SystemException("Cannot resize shared memory object", _name);
+ }
+ map(addrHint);
+}
+
+
+SharedMemoryImpl::SharedMemoryImpl(const Poco::File& file, SharedMemory::AccessMode mode, const void* addrHint):
+ _size(0),
+ _fd(-1),
+ _address(0),
+ _access(mode),
+ _name(file.path()),
+ _fileMapped(true),
+ _server(false)
+{
+ if (!file.exists() || !file.isFile())
+ throw FileNotFoundException(file.path());
+
+ _size = file.getSize();
+ int flag = O_RDONLY;
+ if (mode == SharedMemory::AM_WRITE)
+ flag = O_RDWR;
+ _fd = ::open(_name.c_str(), flag);
+ if (-1 == _fd)
+ throw OpenFileException("Cannot open memory mapped file", _name);
+
+ map(addrHint);
+}
+
+
+SharedMemoryImpl::~SharedMemoryImpl()
+{
+ unmap();
+ close();
+}
+
+
+void SharedMemoryImpl::map(const void* addrHint)
+{
+ int access = PROT_READ;
+ if (_access == SharedMemory::AM_WRITE)
+ access |= PROT_WRITE;
+
+ void* addr = ::mmap(const_cast<void*>(addrHint), _size, access, MAP_SHARED, _fd, 0);
+ if (addr == MAP_FAILED)
+ throw SystemException("Cannot map file into shared memory", _name);
+
+ _address = static_cast<char*>(addr);
+}
+
+
+void SharedMemoryImpl::unmap()
+{
+ if (_address)
+ {
+ ::munmap(_address, _size);
+ }
+}
+
+
+void SharedMemoryImpl::close()
+{
+ if (_fd != -1)
+ {
+ ::close(_fd);
+ _fd = -1;
+ }
+ if (!_fileMapped && _server)
+ {
+ ::shm_unlink(_name.c_str());
+ }
+}
+
+
+} // namespace Poco