Blender  V3.3
logmemfile.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2006 Joseph Eagar <joeedh@gmail.com>. */
3 
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13 
14 #include "logImageCore.h"
15 #include "logmemfile.h"
16 
17 int logimage_fseek(LogImageFile *logFile, intptr_t offset, int origin)
18 {
19  if (logFile->file) {
20  fseek(logFile->file, offset, origin);
21  }
22  else { /* we're seeking in memory */
23  if (origin == SEEK_SET) {
24  if (offset > logFile->memBufferSize) {
25  return 1;
26  }
27  logFile->memCursor = logFile->memBuffer + offset;
28  }
29  else if (origin == SEEK_END) {
30  if (offset > logFile->memBufferSize) {
31  return 1;
32  }
33  logFile->memCursor = (logFile->memBuffer + logFile->memBufferSize) - offset;
34  }
35  else if (origin == SEEK_CUR) {
36  uintptr_t pos = (uintptr_t)logFile->memCursor - (uintptr_t)logFile->memBuffer;
37  if (pos + offset > logFile->memBufferSize) {
38  return 1;
39  }
40 
41  logFile->memCursor += offset;
42  }
43  }
44  return 0;
45 }
46 
47 int logimage_fwrite(void *buffer, size_t size, unsigned int count, LogImageFile *logFile)
48 {
49  if (logFile->file) {
50  return fwrite(buffer, size, count, logFile->file);
51  }
52  /* we're writing to memory */
53  /* do nothing as this isn't supported yet */
54  return count;
55 }
56 
57 int logimage_fread(void *buffer, size_t size, unsigned int count, LogImageFile *logFile)
58 {
59  if (logFile->file) {
60  return fread(buffer, size, count, logFile->file);
61  }
62  /* we're reading from memory */
63  unsigned char *buf = (unsigned char *)buffer;
64  uintptr_t pos = (uintptr_t)logFile->memCursor - (uintptr_t)logFile->memBuffer;
65  size_t total_size = size * count;
66  if (pos + total_size > logFile->memBufferSize) {
67  /* how many elements can we read without overflow ? */
68  count = (logFile->memBufferSize - pos) / size;
69  /* recompute the size */
70  total_size = size * count;
71  }
72 
73  if (total_size != 0) {
74  memcpy(buf, logFile->memCursor, total_size);
75  }
76 
77  return count;
78 }
79 
80 int logimage_read_uchar(unsigned char *x, LogImageFile *logFile)
81 {
82  uintptr_t pos = (uintptr_t)logFile->memCursor - (uintptr_t)logFile->memBuffer;
83  if (pos + sizeof(unsigned char) > logFile->memBufferSize) {
84  return 1;
85  }
86 
87  *x = *(unsigned char *)logFile->memCursor;
88  logFile->memCursor += sizeof(unsigned char);
89  return 0;
90 }
91 
92 int logimage_read_ushort(unsigned short *x, LogImageFile *logFile)
93 {
94  uintptr_t pos = (uintptr_t)logFile->memCursor - (uintptr_t)logFile->memBuffer;
95  if (pos + sizeof(unsigned short) > logFile->memBufferSize) {
96  return 1;
97  }
98 
99  *x = *(unsigned short *)logFile->memCursor;
100  logFile->memCursor += sizeof(unsigned short);
101  return 0;
102 }
103 
104 int logimage_read_uint(unsigned int *x, LogImageFile *logFile)
105 {
106  uintptr_t pos = (uintptr_t)logFile->memCursor - (uintptr_t)logFile->memBuffer;
107  if (pos + sizeof(unsigned int) > logFile->memBufferSize) {
108  return 1;
109  }
110 
111  *x = *(unsigned int *)logFile->memCursor;
112  logFile->memCursor += sizeof(unsigned int);
113  return 0;
114 }
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
uint pos
int count
ccl_global float * buffer
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
int logimage_read_ushort(unsigned short *x, LogImageFile *logFile)
Definition: logmemfile.c:92
int logimage_read_uchar(unsigned char *x, LogImageFile *logFile)
Definition: logmemfile.c:80
int logimage_fseek(LogImageFile *logFile, intptr_t offset, int origin)
Definition: logmemfile.c:17
int logimage_read_uint(unsigned int *x, LogImageFile *logFile)
Definition: logmemfile.c:104
int logimage_fread(void *buffer, size_t size, unsigned int count, LogImageFile *logFile)
Definition: logmemfile.c:57
int logimage_fwrite(void *buffer, size_t size, unsigned int count, LogImageFile *logFile)
Definition: logmemfile.c:47
_W64 unsigned int uintptr_t
Definition: stdint.h:119
_W64 int intptr_t
Definition: stdint.h:118
uintptr_t memBufferSize
Definition: logImageCore.h:73
unsigned char * memBuffer
Definition: logImageCore.h:72
unsigned char * memCursor
Definition: logImageCore.h:74