source: trunk/src/io/c_stream.cc @ 125

Last change on this file since 125 was 125, checked in by epyon, 12 years ago
  • fixes, uh
File size: 1.7 KB
Line 
1// Copyright (C) 2012-2013 Kornel Kisielewicz
2// This file is part of NV Libraries.
3// For conditions of distribution and use, see copyright notice in nv.hh
4
5#include <cstdio>
6#include <sys/stat.h>
7#include "nv/io/c_stream.hh"
8#include <limits>
9
10using namespace nv;
11
12c_stream::c_stream()
13        : m_file( nullptr )
14        , m_file_name( "" )
15        , m_file_size( size_t(-1) )
16{
17
18}
19
20c_stream::c_stream( void* pfile, const char* filename )
21        : m_file( pfile )
22        , m_file_name( filename )
23        , m_file_size( size_t(-1) )
24{
25
26}
27
28c_stream::~c_stream()
29{
30        if ( m_file )
31        {
32                ::fclose( (FILE*)m_file );
33        }
34}
35
36size_t c_stream::read( void* buffer, size_t size, size_t count )
37{
38        NV_ASSERT( buffer != nullptr && size != 0 && count != 0, "Bad parameter passed to read!" );
39        return m_file ? ::fread( buffer, size, count, (FILE*)m_file ) : 0;
40}
41
42size_t c_stream::write( void* buffer, size_t size, size_t count )
43{
44        NV_ASSERT( buffer != nullptr && size != 0 && count != 0, "Bad parameter passed to write!" );
45        return m_file ? ::fwrite( buffer, size, count, (FILE*)m_file ) : 0;
46}
47
48bool c_stream::seek( size_t offset, origin orig )
49{
50        return m_file != nullptr && ( ::fseek( (FILE*)m_file, (long)offset, static_cast<int>(orig) ) == 0 );
51}
52
53size_t c_stream::tell()
54{
55        return m_file != nullptr ? ::ftell( (FILE*)m_file ) : 0;
56}
57
58size_t c_stream::size()
59{
60        if ( m_file == nullptr || m_file_name == nullptr )
61        {
62                return 0;
63        }
64
65        if ( m_file_size == size_t(-1) )
66        {
67                struct stat fstat;
68                int result = stat(m_file_name, &fstat );
69                if ( result != 0 )
70                {
71                        return 0;
72                }
73                m_file_size = (size_t) (fstat.st_size);                 
74        }
75
76        return m_file_size;
77}
78
79void c_stream::flush()
80{
81        if ( m_file != nullptr )
82        {
83                ::fflush( (FILE*)m_file );
84        }
85}
Note: See TracBrowser for help on using the repository browser.