| 1 | 786 | skrzyp | #ifndef CYGONCE_LIBC_STDIO_STDIOFILES_HXX
 | 
      
         | 2 |  |  | #define CYGONCE_LIBC_STDIO_STDIOFILES_HXX
 | 
      
         | 3 |  |  | //========================================================================
 | 
      
         | 4 |  |  | //
 | 
      
         | 5 |  |  | //      stdiofiles.hxx
 | 
      
         | 6 |  |  | //
 | 
      
         | 7 |  |  | //      ISO C library stdio central file access
 | 
      
         | 8 |  |  | //
 | 
      
         | 9 |  |  | //========================================================================
 | 
      
         | 10 |  |  | // ####ECOSGPLCOPYRIGHTBEGIN####
 | 
      
         | 11 |  |  | // -------------------------------------------
 | 
      
         | 12 |  |  | // This file is part of eCos, the Embedded Configurable Operating System.
 | 
      
         | 13 |  |  | // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
 | 
      
         | 14 |  |  | //
 | 
      
         | 15 |  |  | // eCos is free software; you can redistribute it and/or modify it under
 | 
      
         | 16 |  |  | // the terms of the GNU General Public License as published by the Free
 | 
      
         | 17 |  |  | // Software Foundation; either version 2 or (at your option) any later
 | 
      
         | 18 |  |  | // version.
 | 
      
         | 19 |  |  | //
 | 
      
         | 20 |  |  | // eCos is distributed in the hope that it will be useful, but WITHOUT
 | 
      
         | 21 |  |  | // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
      
         | 22 |  |  | // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 | 
      
         | 23 |  |  | // for more details.
 | 
      
         | 24 |  |  | //
 | 
      
         | 25 |  |  | // You should have received a copy of the GNU General Public License
 | 
      
         | 26 |  |  | // along with eCos; if not, write to the Free Software Foundation, Inc.,
 | 
      
         | 27 |  |  | // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
      
         | 28 |  |  | //
 | 
      
         | 29 |  |  | // As a special exception, if other files instantiate templates or use
 | 
      
         | 30 |  |  | // macros or inline functions from this file, or you compile this file
 | 
      
         | 31 |  |  | // and link it with other works to produce a work based on this file,
 | 
      
         | 32 |  |  | // this file does not by itself cause the resulting work to be covered by
 | 
      
         | 33 |  |  | // the GNU General Public License. However the source code for this file
 | 
      
         | 34 |  |  | // must still be made available in accordance with section (3) of the GNU
 | 
      
         | 35 |  |  | // General Public License v2.
 | 
      
         | 36 |  |  | //
 | 
      
         | 37 |  |  | // This exception does not invalidate any other reasons why a work based
 | 
      
         | 38 |  |  | // on this file might be covered by the GNU General Public License.
 | 
      
         | 39 |  |  | // -------------------------------------------
 | 
      
         | 40 |  |  | // ####ECOSGPLCOPYRIGHTEND####
 | 
      
         | 41 |  |  | //========================================================================
 | 
      
         | 42 |  |  | //#####DESCRIPTIONBEGIN####
 | 
      
         | 43 |  |  | //
 | 
      
         | 44 |  |  | // Author(s):     jlarmour
 | 
      
         | 45 |  |  | // Contributors:
 | 
      
         | 46 |  |  | // Date:          2000-04-19
 | 
      
         | 47 |  |  | // Purpose:
 | 
      
         | 48 |  |  | // Description:
 | 
      
         | 49 |  |  | // Usage:         #include 
 | 
      
         | 50 |  |  | //
 | 
      
         | 51 |  |  | //####DESCRIPTIONEND####
 | 
      
         | 52 |  |  | //
 | 
      
         | 53 |  |  | //========================================================================
 | 
      
         | 54 |  |  |  
 | 
      
         | 55 |  |  | // CONFIGURATION
 | 
      
         | 56 |  |  |  
 | 
      
         | 57 |  |  | #include     // libc stdio configuration
 | 
      
         | 58 |  |  |  
 | 
      
         | 59 |  |  | // INCLUDES
 | 
      
         | 60 |  |  |  
 | 
      
         | 61 |  |  | #include           // cyg_bool, cyg_ucount8, cyg_ucount16
 | 
      
         | 62 |  |  | #include      // Cyg_StdioStream
 | 
      
         | 63 |  |  |  
 | 
      
         | 64 |  |  | #ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS
 | 
      
         | 65 |  |  | # include    // mutexes
 | 
      
         | 66 |  |  | #endif
 | 
      
         | 67 |  |  |  
 | 
      
         | 68 |  |  | // CLASSES
 | 
      
         | 69 |  |  |  
 | 
      
         | 70 |  |  | class Cyg_libc_stdio_files
 | 
      
         | 71 |  |  | {
 | 
      
         | 72 |  |  |     // List of open files - global for now
 | 
      
         | 73 |  |  |     static
 | 
      
         | 74 |  |  |     Cyg_StdioStream *files[FOPEN_MAX];
 | 
      
         | 75 |  |  |  
 | 
      
         | 76 |  |  | # ifdef CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS
 | 
      
         | 77 |  |  |     // lock for the above
 | 
      
         | 78 |  |  |     static
 | 
      
         | 79 |  |  |     Cyg_Mutex files_lock;
 | 
      
         | 80 |  |  | # endif
 | 
      
         | 81 |  |  |  
 | 
      
         | 82 |  |  | public:
 | 
      
         | 83 |  |  |  
 | 
      
         | 84 |  |  | # if FOPEN_MAX < 256
 | 
      
         | 85 |  |  |     typedef cyg_ucount8 fd_t;
 | 
      
         | 86 |  |  | # else
 | 
      
         | 87 |  |  |     typedef cyg_ucount16 fd_t;
 | 
      
         | 88 |  |  | # endif
 | 
      
         | 89 |  |  |  
 | 
      
         | 90 |  |  |     static Cyg_StdioStream *
 | 
      
         | 91 |  |  |     get_file_stream( fd_t fd );
 | 
      
         | 92 |  |  |  
 | 
      
         | 93 |  |  |     static void
 | 
      
         | 94 |  |  |     set_file_stream( fd_t fd, Cyg_StdioStream *stream );
 | 
      
         | 95 |  |  |  
 | 
      
         | 96 |  |  |  
 | 
      
         | 97 |  |  |     // the following functions lock(), trylock() and unlock() do nothing
 | 
      
         | 98 |  |  |     // if we haven't got thread-safe streams
 | 
      
         | 99 |  |  |     static cyg_bool
 | 
      
         | 100 |  |  |     lock(void);
 | 
      
         | 101 |  |  |  
 | 
      
         | 102 |  |  |     static cyg_bool
 | 
      
         | 103 |  |  |     trylock(void);
 | 
      
         | 104 |  |  |  
 | 
      
         | 105 |  |  |     static void
 | 
      
         | 106 |  |  |     unlock(void);
 | 
      
         | 107 |  |  |  
 | 
      
         | 108 |  |  | }; // class Cyg_libc_stdio_files
 | 
      
         | 109 |  |  |  
 | 
      
         | 110 |  |  |  
 | 
      
         | 111 |  |  | // Inline functions for this class
 | 
      
         | 112 |  |  | #include 
 | 
      
         | 113 |  |  |  
 | 
      
         | 114 |  |  | #endif // CYGONCE_LIBC_STDIO_STDIOFILES_HXX multiple inclusion protection
 | 
      
         | 115 |  |  |  
 | 
      
         | 116 |  |  | // EOF stdiofiles.hxx
 |