1d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania/* -*- c++ -*- */
2d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania/*
3d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * Copyright (C) 2010 The Android Open Source Project
4d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * All rights reserved.
5d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *
6d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * Redistribution and use in source and binary forms, with or without
7d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * modification, are permitted provided that the following conditions
8d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * are met:
9d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *  * Redistributions of source code must retain the above copyright
10d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *    notice, this list of conditions and the following disclaimer.
11d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *  * Redistributions in binary form must reproduce the above copyright
12d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *    notice, this list of conditions and the following disclaimer in
13d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *    the documentation and/or other materials provided with the
14d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *    distribution.
15d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania *
16d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
23d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * SUCH DAMAGE.
28d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania */
29d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
30d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania#ifndef ANDROID_ASTL_STDIO_FILEBUF__
31d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania#define ANDROID_ASTL_STDIO_FILEBUF__
32d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
33d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania#include <cstdio>
34d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania#include <streambuf>
35d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania#include <ios_pos_types.h>
36d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
37d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania/**
38d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * Implementation of the streambuf used to build the cout and cerr
39d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania * streams.
40d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania */
41d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catanianamespace android {
42d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
43d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Cataniaclass stdio_filebuf: public std::streambuf
44d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania{
45d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania  public:
46d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania    stdio_filebuf(std::FILE* stream);
47d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania    virtual ~stdio_filebuf();
48d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
49d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania  protected:
50d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania    // These are the concrete implementations declared in ostream.
51d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania    virtual std::streamsize xsputn(const char_type* str, std::streamsize num);
52d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania    virtual int sync();
53d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
54d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania  private:
55d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania    FILE *mStream;
56d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania};
57d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
58d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania}  // namespace android
59d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania
60d1e702c1f745428a7bc53cbbd80b0c283ca52de1Nicolas Catania#endif
61