SharedBuffer.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include <LibC/SharedBuffer.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <AK/kmalloc.h>
  5. RetainPtr<SharedBuffer> SharedBuffer::create(pid_t peer, int size)
  6. {
  7. void* data;
  8. int shared_buffer_id = create_shared_buffer(peer, size, &data);
  9. if (shared_buffer_id < 0) {
  10. perror("create_shared_buffer");
  11. return nullptr;
  12. }
  13. return adopt(*new SharedBuffer(shared_buffer_id, size, data));
  14. }
  15. RetainPtr<SharedBuffer> SharedBuffer::create_from_shared_buffer_id(int shared_buffer_id)
  16. {
  17. void* data = get_shared_buffer(shared_buffer_id);
  18. if (data == (void*)-1) {
  19. perror("get_shared_buffer");
  20. return nullptr;
  21. }
  22. int size = get_shared_buffer_size(shared_buffer_id);
  23. if (size < 0) {
  24. perror("get_shared_buffer_size");
  25. return nullptr;
  26. }
  27. return adopt(*new SharedBuffer(shared_buffer_id, size, data));
  28. }
  29. SharedBuffer::SharedBuffer(int shared_buffer_id, int size, void* data)
  30. : m_shared_buffer_id(shared_buffer_id)
  31. , m_size(size)
  32. , m_data(data)
  33. {
  34. }
  35. SharedBuffer::~SharedBuffer()
  36. {
  37. if (m_shared_buffer_id >= 0) {
  38. int rc = release_shared_buffer(m_shared_buffer_id);
  39. if (rc < 0) {
  40. perror("release_shared_buffer");
  41. }
  42. }
  43. }
  44. void SharedBuffer::seal()
  45. {
  46. int rc = seal_shared_buffer(m_shared_buffer_id);
  47. if (rc < 0) {
  48. perror("seal_shared_buffer");
  49. ASSERT_NOT_REACHED();
  50. }
  51. }