]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/common/wfstream.cpp
Semicolon needed.
[wxWidgets.git] / src / common / wfstream.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: fstream.cpp
3// Purpose: "File stream" classes
4// Author: Julian Smart
5// Modified by:
6// Created: 11/07/98
7// RCS-ID: $Id$
8// Copyright: (c) Guilhem Lavaux
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16 #pragma hdrstop
17#endif
18
19#if wxUSE_STREAMS
20
21#include <stdio.h>
22#include "wx/stream.h"
23#include "wx/wfstream.h"
24
25#if wxUSE_FILE
26
27// ----------------------------------------------------------------------------
28// wxFileInputStream
29// ----------------------------------------------------------------------------
30
31wxFileInputStream::wxFileInputStream(const wxString& fileName)
32 : wxInputStream()
33{
34 m_file = new wxFile(fileName, wxFile::read);
35 m_file_destroy = true;
36 if ( !m_file->IsOpened() )
37 m_lasterror = wxSTREAM_READ_ERROR;
38}
39
40wxFileInputStream::wxFileInputStream()
41 : wxInputStream()
42{
43 m_file_destroy = false;
44 m_file = NULL;
45}
46
47wxFileInputStream::wxFileInputStream(wxFile& file)
48{
49 m_file = &file;
50 m_file_destroy = false;
51}
52
53wxFileInputStream::wxFileInputStream(int fd)
54{
55 m_file = new wxFile(fd);
56 m_file_destroy = true;
57}
58
59wxFileInputStream::~wxFileInputStream()
60{
61 if (m_file_destroy)
62 delete m_file;
63}
64
65wxFileOffset wxFileInputStream::GetLength() const
66{
67 return m_file->Length();
68}
69
70size_t wxFileInputStream::OnSysRead(void *buffer, size_t size)
71{
72 ssize_t ret = m_file->Read(buffer, size);
73
74 // NB: we can't use a switch here because HP-UX CC doesn't allow
75 // switching over long long (which size_t is in 64bit mode)
76
77 if ( !ret )
78 {
79 // nothing read, so nothing more to read
80 m_lasterror = wxSTREAM_EOF;
81 }
82 else if ( ret == wxInvalidOffset )
83 {
84 m_lasterror = wxSTREAM_READ_ERROR;
85 ret = 0;
86 }
87 else
88 {
89 // normal case
90 m_lasterror = wxSTREAM_NO_ERROR;
91 }
92
93 return ret;
94}
95
96wxFileOffset wxFileInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
97{
98 return m_file->Seek(pos, mode);
99}
100
101wxFileOffset wxFileInputStream::OnSysTell() const
102{
103 return m_file->Tell();
104}
105
106// ----------------------------------------------------------------------------
107// wxFileOutputStream
108// ----------------------------------------------------------------------------
109
110wxFileOutputStream::wxFileOutputStream(const wxString& fileName)
111{
112 m_file = new wxFile(fileName, wxFile::write);
113 m_file_destroy = true;
114
115 if (!m_file->IsOpened())
116 m_lasterror = wxSTREAM_WRITE_ERROR;
117}
118
119wxFileOutputStream::wxFileOutputStream(wxFile& file)
120{
121 m_file = &file;
122 m_file_destroy = false;
123}
124
125wxFileOutputStream::wxFileOutputStream()
126 : wxOutputStream()
127{
128 m_file_destroy = false;
129 m_file = NULL;
130}
131
132wxFileOutputStream::wxFileOutputStream(int fd)
133{
134 m_file = new wxFile(fd);
135 m_file_destroy = true;
136}
137
138wxFileOutputStream::~wxFileOutputStream()
139{
140 if (m_file_destroy)
141 {
142 Sync();
143 delete m_file;
144 }
145}
146
147size_t wxFileOutputStream::OnSysWrite(const void *buffer, size_t size)
148{
149 size_t ret = m_file->Write(buffer, size);
150
151 m_lasterror = m_file->Error() ? wxSTREAM_WRITE_ERROR : wxSTREAM_NO_ERROR;
152
153 return ret;
154}
155
156wxFileOffset wxFileOutputStream::OnSysTell() const
157{
158 return m_file->Tell();
159}
160
161wxFileOffset wxFileOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
162{
163 return m_file->Seek(pos, mode);
164}
165
166void wxFileOutputStream::Sync()
167{
168 wxOutputStream::Sync();
169 m_file->Flush();
170}
171
172wxFileOffset wxFileOutputStream::GetLength() const
173{
174 return m_file->Length();
175}
176
177// ----------------------------------------------------------------------------
178// wxTempFileOutputStream
179// ----------------------------------------------------------------------------
180
181wxTempFileOutputStream::wxTempFileOutputStream(const wxString& fileName)
182{
183 m_file = new wxTempFile(fileName);
184
185 if (!m_file->IsOpened())
186 m_lasterror = wxSTREAM_WRITE_ERROR;
187}
188
189wxTempFileOutputStream::~wxTempFileOutputStream()
190{
191 if (m_file->IsOpened())
192 Discard();
193 delete m_file;
194}
195
196size_t wxTempFileOutputStream::OnSysWrite(const void *buffer, size_t size)
197{
198 if (IsOk() && m_file->Write(buffer, size))
199 return size;
200 m_lasterror = wxSTREAM_WRITE_ERROR;
201 return 0;
202}
203
204// ----------------------------------------------------------------------------
205// wxFileStream
206// ----------------------------------------------------------------------------
207
208wxFileStream::wxFileStream(const wxString& fileName)
209 : wxFileInputStream(fileName)
210{
211 wxFileOutputStream::m_file = wxFileInputStream::m_file;
212}
213
214#endif //wxUSE_FILE
215
216#if wxUSE_FFILE
217
218// ----------------------------------------------------------------------------
219// wxFFileInputStream
220// ----------------------------------------------------------------------------
221
222wxFFileInputStream::wxFFileInputStream(const wxString& fileName,
223 const wxChar *mode)
224 : wxInputStream()
225{
226 m_file = new wxFFile(fileName, mode);
227 m_file_destroy = true;
228
229 if (!m_file->IsOpened())
230 m_lasterror = wxSTREAM_WRITE_ERROR;
231}
232
233wxFFileInputStream::wxFFileInputStream()
234 : wxInputStream()
235{
236 m_file = NULL;
237 m_file_destroy = false;
238}
239
240wxFFileInputStream::wxFFileInputStream(wxFFile& file)
241{
242 m_file = &file;
243 m_file_destroy = false;
244}
245
246wxFFileInputStream::wxFFileInputStream(FILE *file)
247{
248 m_file = new wxFFile(file);
249 m_file_destroy = true;
250}
251
252wxFFileInputStream::~wxFFileInputStream()
253{
254 if (m_file_destroy)
255 delete m_file;
256}
257
258wxFileOffset wxFFileInputStream::GetLength() const
259{
260 return m_file->Length();
261}
262
263size_t wxFFileInputStream::OnSysRead(void *buffer, size_t size)
264{
265 ssize_t ret = m_file->Read(buffer, size);
266
267 // It is not safe to call Eof() if the file is not opened.
268 if (!m_file->IsOpened() || m_file->Eof())
269 m_lasterror = wxSTREAM_EOF;
270 if (ret == wxInvalidOffset)
271 {
272 m_lasterror = wxSTREAM_READ_ERROR;
273 ret = 0;
274 }
275
276 return ret;
277}
278
279wxFileOffset wxFFileInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
280{
281 return m_file->Seek(pos, mode) ? m_file->Tell() : wxInvalidOffset;
282}
283
284wxFileOffset wxFFileInputStream::OnSysTell() const
285{
286 return m_file->Tell();
287}
288
289// ----------------------------------------------------------------------------
290// wxFFileOutputStream
291// ----------------------------------------------------------------------------
292
293wxFFileOutputStream::wxFFileOutputStream(const wxString& fileName,
294 const wxChar *mode)
295{
296 m_file = new wxFFile(fileName, mode);
297 m_file_destroy = true;
298
299 if (!m_file->IsOpened())
300 {
301 m_lasterror = wxSTREAM_WRITE_ERROR;
302 }
303 else
304 {
305 if (m_file->Error())
306 m_lasterror = wxSTREAM_WRITE_ERROR;
307 }
308}
309
310wxFFileOutputStream::wxFFileOutputStream(wxFFile& file)
311{
312 m_file = &file;
313 m_file_destroy = false;
314}
315
316wxFFileOutputStream::wxFFileOutputStream()
317 : wxOutputStream()
318{
319 m_file = NULL;
320 m_file_destroy = false;
321}
322
323wxFFileOutputStream::wxFFileOutputStream(FILE *file)
324{
325 m_file = new wxFFile(file);
326 m_file_destroy = true;
327}
328
329wxFFileOutputStream::~wxFFileOutputStream()
330{
331 if (m_file_destroy)
332 {
333 Sync();
334 delete m_file;
335 }
336}
337
338size_t wxFFileOutputStream::OnSysWrite(const void *buffer, size_t size)
339{
340 size_t ret = m_file->Write(buffer, size);
341 // It is not safe to call Error() if the file is not opened.
342 if (!m_file->IsOpened() || m_file->Error())
343 m_lasterror = wxSTREAM_WRITE_ERROR;
344 else
345 m_lasterror = wxSTREAM_NO_ERROR;
346 return ret;
347}
348
349wxFileOffset wxFFileOutputStream::OnSysTell() const
350{
351 return m_file->Tell();
352}
353
354wxFileOffset wxFFileOutputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
355{
356 return m_file->Seek(pos, mode) ? m_file->Tell() : wxInvalidOffset;
357}
358
359void wxFFileOutputStream::Sync()
360{
361 wxOutputStream::Sync();
362 m_file->Flush();
363}
364
365wxFileOffset wxFFileOutputStream::GetLength() const
366{
367 return m_file->Length();
368}
369
370// ----------------------------------------------------------------------------
371// wxFFileStream
372// ----------------------------------------------------------------------------
373
374wxFFileStream::wxFFileStream(const wxString& fileName)
375 : wxFFileInputStream(fileName)
376{
377 wxFFileOutputStream::m_file = wxFFileInputStream::m_file;
378}
379
380#endif //wxUSE_FFILE
381
382#endif // wxUSE_STREAMS
383