60 DataWriterPrivate::DataWriterPrivate () |
60 DataWriterPrivate::DataWriterPrivate () |
61 : m_current (0) |
61 : m_current (0) |
62 {} |
62 {} |
63 DataWriterPrivate::~DataWriterPrivate () |
63 DataWriterPrivate::~DataWriterPrivate () |
64 { |
64 { |
65 ::write (m_fd, m_data, m_current); |
65 ::Write (m_fd, m_data, m_current); |
66 ::close (m_fd); |
66 ::Close (m_fd); |
67 } |
67 } |
68 |
68 |
69 |
69 |
70 void |
70 void |
71 DataWriterPrivate::open (char const *filename) |
71 DataWriterPrivate::Open (char const *filename) |
72 { |
72 { |
73 m_fd = ::open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); |
73 m_fd = ::Open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); |
74 assert (m_fd != -1); |
74 assert (m_fd != -1); |
75 } |
75 } |
76 |
76 |
77 #ifndef min |
77 #ifndef min |
78 #define min(a,b) ((a)<(b)?(a):(b)) |
78 #define min(a,b) ((a)<(b)?(a):(b)) |
79 #endif /* min */ |
79 #endif /* min */ |
80 |
80 |
81 void |
81 void |
82 DataWriterPrivate::write (uint8_t *buffer, uint32_t size) |
82 DataWriterPrivate::Write (uint8_t *buffer, uint32_t size) |
83 { |
83 { |
84 while (size > 0) { |
84 while (size > 0) { |
85 uint32_t toCopy = min (BUFFER_SIZE - m_current, size); |
85 uint32_t toCopy = min (BUFFER_SIZE - m_current, size); |
86 memcpy (m_data + m_current, buffer, toCopy); |
86 memcpy (m_data + m_current, buffer, toCopy); |
87 size -= toCopy; |
87 size -= toCopy; |
88 m_current += toCopy; |
88 m_current += toCopy; |
89 buffer += toCopy; |
89 buffer += toCopy; |
90 if (m_current == BUFFER_SIZE) { |
90 if (m_current == BUFFER_SIZE) { |
91 ssize_t written = 0; |
91 ssize_t written = 0; |
92 written = ::write (m_fd, m_data, BUFFER_SIZE); |
92 written = ::Write (m_fd, m_data, BUFFER_SIZE); |
93 assert (written == BUFFER_SIZE); |
93 assert (written == BUFFER_SIZE); |
94 m_current = 0; |
94 m_current = 0; |
95 } |
95 } |
96 } |
96 } |
97 } |
97 } |