Blender V4.3
filereader_file.c
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2004-2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#ifndef WIN32
10# include <unistd.h> /* for read close */
11#else
12# include "BLI_winstuff.h"
13# include "winsock2.h"
14# include <io.h> /* for open close read */
15#endif
16
17#include "BLI_blenlib.h"
18#include "BLI_filereader.h"
19
20#include "MEM_guardedalloc.h"
21
22typedef struct {
24
27
28static int64_t file_read(FileReader *reader, void *buffer, size_t size)
29{
30 RawFileReader *rawfile = (RawFileReader *)reader;
31 int64_t readsize = BLI_read(rawfile->filedes, buffer, size);
32
33 if (readsize >= 0) {
34 rawfile->reader.offset += readsize;
35 }
36
37 return readsize;
38}
39
40static off64_t file_seek(FileReader *reader, off64_t offset, int whence)
41{
42 RawFileReader *rawfile = (RawFileReader *)reader;
43 rawfile->reader.offset = BLI_lseek(rawfile->filedes, offset, whence);
44 return rawfile->reader.offset;
45}
46
47static void file_close(FileReader *reader)
48{
49 RawFileReader *rawfile = (RawFileReader *)reader;
50 close(rawfile->filedes);
51 MEM_freeN(rawfile);
52}
53
55{
56 RawFileReader *rawfile = MEM_callocN(sizeof(RawFileReader), __func__);
57
58 rawfile->filedes = filedes;
59
60 rawfile->reader.read = file_read;
61 rawfile->reader.seek = file_seek;
62 rawfile->reader.close = file_close;
63
64 return (FileReader *)rawfile;
65}
int64_t BLI_lseek(int fd, int64_t offset, int whence)
Definition storage.cc:197
int64_t BLI_read(int fd, void *buf, size_t nbytes)
Definition fileops_c.cc:96
Wrapper for reading from various sources (e.g. raw files, compressed files, memory....
Compatibility-like things for windows.
Read Guarded memory(de)allocation.
FileReader * BLI_filereader_new_file(int filedes)
static int64_t file_read(FileReader *reader, void *buffer, size_t size)
static off64_t file_seek(FileReader *reader, off64_t offset, int whence)
static void file_close(FileReader *reader)
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
__int64 int64_t
Definition stdint.h:89
FileReaderSeekFn seek
off64_t offset
FileReaderCloseFn close
FileReaderReadFn read
FileReader reader