1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h>
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
167874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org#include "webrtc/system_wrappers/interface/file_wrapper.h"
177874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h"
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RWLockWrapper;
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
237874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.orgclass FileWrapperImpl : public FileWrapper {
247874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org public:
257874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  FileWrapperImpl();
267874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  virtual ~FileWrapperImpl();
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
287874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  virtual int FileName(char* file_name_utf8,
297affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org                       size_t size) const OVERRIDE;
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
317affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual bool Open() const OVERRIDE;
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
337874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  virtual int OpenFile(const char* file_name_utf8,
347874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org                       bool read_only,
357874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org                       bool loop = false,
367affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org                       bool text = false) OVERRIDE;
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
387b72264dd14dcffb873d096339de6ed47015ac43henrikg@webrtc.org  virtual int OpenFromFileHandle(FILE* handle,
397b72264dd14dcffb873d096339de6ed47015ac43henrikg@webrtc.org                                 bool manage_file,
407b72264dd14dcffb873d096339de6ed47015ac43henrikg@webrtc.org                                 bool read_only,
417b72264dd14dcffb873d096339de6ed47015ac43henrikg@webrtc.org                                 bool loop = false) OVERRIDE;
427b72264dd14dcffb873d096339de6ed47015ac43henrikg@webrtc.org
437affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual int CloseFile() OVERRIDE;
447affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual int SetMaxFileSize(size_t bytes) OVERRIDE;
457affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual int Flush() OVERRIDE;
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
477affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual int Read(void* buf, int length) OVERRIDE;
487affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual bool Write(const void* buf, int length) OVERRIDE;
497affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual int WriteText(const char* format, ...) OVERRIDE;
507affcd2236a1e8e9d5d70f21dc7a5c385f509d37pbos@webrtc.org  virtual int Rewind() OVERRIDE;
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
527874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org private:
537874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  int CloseFileImpl();
547874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  int FlushImpl();
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
567874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  scoped_ptr<RWLockWrapper> rw_lock_;
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
587874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  FILE* id_;
597b72264dd14dcffb873d096339de6ed47015ac43henrikg@webrtc.org  bool managed_file_handle_;
607874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  bool open_;
617874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  bool looping_;
627874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  bool read_only_;
637874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  size_t max_size_in_bytes_;  // -1 indicates file size limitation is off
647874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  size_t size_in_bytes_;
657874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org  char file_name_utf8_[kMaxFileNameSize];
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
683b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
707874ec93f603b143b2fa66fd98e4218229502555phoglund@webrtc.org#endif  // WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
71