CHDK_DE Vorschauversion  Trunk Rev. 5302
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
fileutil.c-Dateireferenz
#include "stdlib.h"
#include "fileutil.h"
+ Include-Abhängigkeitsdiagramm für fileutil.c:

gehe zum Quellcode dieser Datei

Funktionen

static char * _load_file (const char *name, int *rv_size, int *st_size, int add0)
 
char * load_file_to_length (const char *name, int *rv_size, int add0, int length)
 
char * load_file (const char *name, int *rv_size, int add0)
 
int process_file (const char *filename, callback_process_file callback, int add0)
 
int load_int_value_file (const char *filename, int *value_p)
 
void save_int_value_file (const char *filename, int value)
 

Dokumentation der Funktionen

static char* _load_file ( const char *  name,
int *  rv_size,
int *  st_size,
int  add0 
)
static

Definiert in Zeile 14 der Datei fileutil.c.

15 {
16  int fd;
17  int ssize = -1; // stat() size
18  int rsize = -1; // # of bytes actually read
19  char* buf = 0; // memory buffer to return
20 
21  if (add0 != 0) add0 = 1; // Sanity check
22 
23  // get file stats
24  struct stat st;
25  if (stat(name,&st) == 0)
26  {
27  // get file size & check size is valid
28  ssize = st.st_size;
29  if ((st_size != 0) && (*st_size > 0) && (ssize > *st_size)) // Limit size read to the size requested
30  ssize = *st_size;
31  if (ssize > 0)
32  {
33  // open file & check file is valid
34  fd = open( name, O_RDONLY, 0777 );
35  if (fd >= 0)
36  {
37  // allocate uncached buffer to read into & check valid
38  char *ubuf = umalloc(512);
39  if (ubuf != 0)
40  {
41  // allocate output buffer and check valid
42  // add 1 to file size if terminating 0 is required
43  buf = malloc(ssize+add0);
44  if (buf != 0)
45  {
46  // loop over file reading in 512 bytes chunks
47  int lsize = 0;
48  rsize = 0;
49  while (lsize < ssize)
50  {
51  int len = ssize - lsize;
52  if (len > 512) len = 512;
53  rsize += read(fd, ubuf, len);
54  memcpy(buf+lsize,ubuf,len);
55  lsize += len;
56  }
57  if (add0) buf[ssize] = 0;
58  }
59  ufree(ubuf);
60  }
61  close(fd);
62  }
63  }
64  }
65 
66  // save stat() size and read() size
67  if (rv_size) *rv_size = rsize;
68  if (st_size) *st_size = ssize;
69 
70  return buf;
71 }
char* load_file ( const char *  name,
int *  rv_size,
int  add0 
)

Definiert in Zeile 102 der Datei fileutil.c.

103 {
104  return load_file_to_length(name, rv_size, add0, 0);
105 }
char* load_file_to_length ( const char *  name,
int *  rv_size,
int  add0,
int  length 
)

Definiert in Zeile 79 der Datei fileutil.c.

80 {
81  int rsize, ssize = length;
82 
83  char* buf = _load_file(name, &rsize, &ssize, add0);
84 
85  if (rv_size) *rv_size = rsize;
86 
87  if (rsize != ssize)
88  {
89  if (buf) free(buf);
90  buf = 0;
91  if (rv_size) *rv_size = -1;
92  }
93 
94  return buf;
95 }
int load_int_value_file ( const char *  filename,
int *  value_p 
)

Definiert in Zeile 134 der Datei fileutil.c.

135 {
136  char *buf;
137 
138  buf = load_file(filename, 0, 1);
139  if (!buf)
140  return 0;
141 
142  if (value_p)
143  *value_p = strtol(buf, NULL, 10 /*dec*/);
144  free(buf);
145 
146  return 1;
147 }
int process_file ( const char *  filename,
callback_process_file  callback,
int  add0 
)

Definiert in Zeile 115 der Datei fileutil.c.

116 {
117  int size;
118 
119  char *buf = load_file(filename, &size, add0);
120 
121  size = callback(buf, size);
122 
123  if (buf)
124  free(buf);
125 
126  return size;
127 }
void save_int_value_file ( const char *  filename,
int  value 
)

Definiert in Zeile 151 der Datei fileutil.c.

152 {
153  char* buf = umalloc(20);
154  if ( !buf )
155  return;
156 
157  sprintf(buf,"%d", value);
158 
159  int fd = open( filename, O_WRONLY|O_CREAT|O_TRUNC, 0777);
160  if (fd>=0)
161  {
162  write(fd, buf, strlen(buf)+1);
163  close(fd);
164  }
165  ufree(buf);
166 }