Blender  V3.3
filereader_file.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2004-2021 Blender Foundation. All rights reserved. */
3 
8 #ifndef WIN32
9 # include <unistd.h> /* for read close */
10 #else
11 # include "BLI_winstuff.h"
12 # include "winsock2.h"
13 # include <io.h> /* for open close read */
14 #endif
15 
16 #include "BLI_blenlib.h"
17 #include "BLI_filereader.h"
18 
19 #include "MEM_guardedalloc.h"
20 
21 typedef struct {
23 
24  int filedes;
26 
27 static ssize_t file_read(FileReader *reader, void *buffer, size_t size)
28 {
29  RawFileReader *rawfile = (RawFileReader *)reader;
30  ssize_t readsize = read(rawfile->filedes, buffer, size);
31 
32  if (readsize >= 0) {
33  rawfile->reader.offset += readsize;
34  }
35 
36  return readsize;
37 }
38 
39 static off64_t file_seek(FileReader *reader, off64_t offset, int whence)
40 {
41  RawFileReader *rawfile = (RawFileReader *)reader;
42  rawfile->reader.offset = BLI_lseek(rawfile->filedes, offset, whence);
43  return rawfile->reader.offset;
44 }
45 
46 static void file_close(FileReader *reader)
47 {
48  RawFileReader *rawfile = (RawFileReader *)reader;
49  close(rawfile->filedes);
50  MEM_freeN(rawfile);
51 }
52 
54 {
55  RawFileReader *rawfile = MEM_callocN(sizeof(RawFileReader), __func__);
56 
57  rawfile->filedes = filedes;
58 
59  rawfile->reader.read = file_read;
60  rawfile->reader.seek = file_seek;
61  rawfile->reader.close = file_close;
62 
63  return (FileReader *)rawfile;
64 }
int64_t BLI_lseek(int fd, int64_t offset, int whence)
Definition: storage.c:169
Wrapper for reading from various sources (e.g. raw files, compressed files, memory....
Compatibility-like things for windows.
SSIZE_T ssize_t
Definition: BLI_winstuff.h:71
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
static off64_t file_seek(FileReader *reader, off64_t offset, int whence)
static ssize_t file_read(FileReader *reader, void *buffer, size_t size)
FileReader * BLI_filereader_new_file(int filedes)
static void file_close(FileReader *reader)
ccl_global float * buffer
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:31
FileReaderSeekFn seek
off64_t offset
FileReaderCloseFn close
FileReaderReadFn read
FileReader reader