1 /*
2  * File IO handle functions
3  *
4  * Copyright (C) 2009-2020, Joachim Metz <joachim.metz@gmail.com>
5  *
6  * Refer to AUTHORS for acknowledgements.
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #if !defined( _LIBBFIO_FILE_IO_HANDLE_H )
23 #define _LIBBFIO_FILE_IO_HANDLE_H
24 
25 #include <common.h>
26 #include <types.h>
27 
28 #include "libbfio_libcerror.h"
29 #include "libbfio_libcfile.h"
30 
31 #if defined( __cplusplus )
32 extern "C" {
33 #endif
34 
35 typedef struct libbfio_file_io_handle libbfio_file_io_handle_t;
36 
37 struct libbfio_file_io_handle
38 {
39 	/* The name
40 	 */
41 	system_character_t *name;
42 
43 	/* The size of the name
44 	 */
45 	size_t name_size;
46 
47 	/* The file (handle)
48 	 */
49 	libcfile_file_t *file;
50 
51 	/* The access flags
52 	 */
53 	int access_flags;
54 };
55 
56 int libbfio_file_io_handle_initialize(
57      libbfio_file_io_handle_t **file_io_handle,
58      libcerror_error_t **error );
59 
60 int libbfio_file_io_handle_free(
61      libbfio_file_io_handle_t **file_io_handle,
62      libcerror_error_t **error );
63 
64 int libbfio_file_io_handle_clone(
65      libbfio_file_io_handle_t **destination_file_io_handle,
66      libbfio_file_io_handle_t *source_file_io_handle,
67      libcerror_error_t **error );
68 
69 int libbfio_file_io_handle_get_name_size(
70      libbfio_file_io_handle_t *file_io_handle,
71      size_t *name_size,
72      libcerror_error_t **error );
73 
74 int libbfio_file_io_handle_get_name(
75      libbfio_file_io_handle_t *file_io_handle,
76      char *name,
77      size_t name_size,
78      libcerror_error_t **error );
79 
80 int libbfio_file_io_handle_set_name(
81      libbfio_file_io_handle_t *file_io_handle,
82      const char *name,
83      size_t name_length,
84      libcerror_error_t **error );
85 
86 #if defined( HAVE_WIDE_CHARACTER_TYPE )
87 
88 int libbfio_file_io_handle_get_name_size_wide(
89      libbfio_file_io_handle_t *file_io_handle,
90      size_t *name_size,
91      libcerror_error_t **error );
92 
93 int libbfio_file_io_handle_get_name_wide(
94      libbfio_file_io_handle_t *file_io_handle,
95      wchar_t *name,
96      size_t name_size,
97      libcerror_error_t **error );
98 
99 int libbfio_file_io_handle_set_name_wide(
100      libbfio_file_io_handle_t *file_io_handle,
101      const wchar_t *name,
102      size_t name_length,
103      libcerror_error_t **error );
104 
105 #endif /* defined( HAVE_WIDE_CHARACTER_TYPE ) */
106 
107 int libbfio_file_io_handle_open(
108      libbfio_file_io_handle_t *file_io_handle,
109      int access_flags,
110      libcerror_error_t **error );
111 
112 int libbfio_file_io_handle_close(
113      libbfio_file_io_handle_t *file_io_handle,
114      libcerror_error_t **error );
115 
116 ssize_t libbfio_file_io_handle_read_buffer(
117          libbfio_file_io_handle_t *file_io_handle,
118          uint8_t *buffer,
119          size_t size,
120          libcerror_error_t **error );
121 
122 ssize_t libbfio_file_io_handle_write_buffer(
123          libbfio_file_io_handle_t *file_io_handle,
124          const uint8_t *buffer,
125          size_t size,
126          libcerror_error_t **error );
127 
128 off64_t libbfio_file_io_handle_seek_offset(
129          libbfio_file_io_handle_t *file_io_handle,
130          off64_t offset,
131          int whence,
132          libcerror_error_t **error );
133 
134 int libbfio_file_io_handle_exists(
135      libbfio_file_io_handle_t *file_io_handle,
136      libcerror_error_t **error );
137 
138 int libbfio_file_io_handle_is_open(
139      libbfio_file_io_handle_t *file_io_handle,
140      libcerror_error_t **error );
141 
142 int libbfio_file_io_handle_get_size(
143      libbfio_file_io_handle_t *file_io_handle,
144      size64_t *size,
145      libcerror_error_t **error );
146 
147 #if defined( __cplusplus )
148 }
149 #endif
150 
151 #endif /* !defined( _LIBBFIO_FILE_IO_HANDLE_H ) */
152 
153