GNUnet  0.10.x
Macros | Functions
BIO library

Buffered binary disk IO (with endianess conversion) More...

Macros

#define GNUNET_BIO_read_float(h, f)   (GNUNET_BIO_read_fn (h, __FILE__, __LINE__, f, sizeof(float)))
 Read a float. More...
 
#define GNUNET_BIO_read_double(h, f)   (GNUNET_BIO_read_fn (h, __FILE__, __LINE__, f, sizeof(double)))
 Read a double. More...
 
#define GNUNET_BIO_read_int32(h, i)   GNUNET_BIO_read_int32__ (h, __FILE__, __LINE__, (int32_t*) i)
 Read an (u)int32_t. More...
 
#define GNUNET_BIO_read_int64(h, i)   GNUNET_BIO_read_int64__ (h, __FILE__, __LINE__, (int64_t*) i)
 Read an (u)int64_t. More...
 
#define GNUNET_BIO_write_float(h, f)   GNUNET_BIO_write (h, &f, sizeof(float))
 Write a float. More...
 
#define GNUNET_BIO_write_double(h, f)   GNUNET_BIO_write (h, &f, sizeof(double))
 Write a double. More...
 

Functions

struct GNUNET_BIO_ReadHandleGNUNET_BIO_read_open (const char *fn)
 Open a file for reading. More...
 
int GNUNET_BIO_read_close (struct GNUNET_BIO_ReadHandle *h, char **emsg)
 Close an open file. More...
 
int GNUNET_BIO_read (struct GNUNET_BIO_ReadHandle *h, const char *what, void *result, size_t len)
 Read the contents of a binary file into a buffer. More...
 
int GNUNET_BIO_read_fn (struct GNUNET_BIO_ReadHandle *h, const char *file, int line, void *result, size_t len)
 Read the contents of a binary file into a buffer. More...
 
int GNUNET_BIO_read_string (struct GNUNET_BIO_ReadHandle *h, const char *what, char **result, size_t max_length)
 Read 0-terminated string from a file. More...
 
int GNUNET_BIO_read_meta_data (struct GNUNET_BIO_ReadHandle *h, const char *what, struct GNUNET_CONTAINER_MetaData **result)
 Read metadata container from a file. More...
 
int GNUNET_BIO_read_int32__ (struct GNUNET_BIO_ReadHandle *h, const char *file, int line, int32_t *i)
 Read an (u)int32_t. More...
 
int GNUNET_BIO_read_int64__ (struct GNUNET_BIO_ReadHandle *h, const char *file, int line, int64_t *i)
 Read an (u)int64_t. More...
 
struct GNUNET_BIO_WriteHandleGNUNET_BIO_write_open (const char *fn)
 Open a file for writing. More...
 
int GNUNET_BIO_write_close (struct GNUNET_BIO_WriteHandle *h)
 Close an open file for writing. More...
 
int GNUNET_BIO_write (struct GNUNET_BIO_WriteHandle *h, const void *buffer, size_t n)
 Write a buffer to a file. More...
 
int GNUNET_BIO_flush (struct GNUNET_BIO_WriteHandle *h)
 Force a buffered writer to flush its buffer. More...
 
int GNUNET_BIO_write_string (struct GNUNET_BIO_WriteHandle *h, const char *s)
 Write a string to a file. More...
 
int GNUNET_BIO_write_meta_data (struct GNUNET_BIO_WriteHandle *h, const struct GNUNET_CONTAINER_MetaData *m)
 Write metadata container to a file. More...
 
int GNUNET_BIO_write_int32 (struct GNUNET_BIO_WriteHandle *h, int32_t i)
 Write an (u)int32_t. More...
 
int GNUNET_BIO_write_int64 (struct GNUNET_BIO_WriteHandle *h, int64_t i)
 Write an (u)int64_t. More...
 

Detailed Description

Buffered binary disk IO (with endianess conversion)

Macro Definition Documentation

◆ GNUNET_BIO_read_float

#define GNUNET_BIO_read_float (   h,
 
)    (GNUNET_BIO_read_fn (h, __FILE__, __LINE__, f, sizeof(float)))

Read a float.

Parameters
hhande to open file
faddress of float to read

Definition at line 136 of file gnunet_bio_lib.h.

◆ GNUNET_BIO_read_double

#define GNUNET_BIO_read_double (   h,
 
)    (GNUNET_BIO_read_fn (h, __FILE__, __LINE__, f, sizeof(double)))

Read a double.

Parameters
hhande to open file
faddress of double to read

Definition at line 146 of file gnunet_bio_lib.h.

◆ GNUNET_BIO_read_int32

#define GNUNET_BIO_read_int32 (   h,
 
)    GNUNET_BIO_read_int32__ (h, __FILE__, __LINE__, (int32_t*) i)

◆ GNUNET_BIO_read_int64

#define GNUNET_BIO_read_int64 (   h,
 
)    GNUNET_BIO_read_int64__ (h, __FILE__, __LINE__, (int64_t*) i)

Read an (u)int64_t.

Parameters
hhande to open file
iaddress of 64-bit integer to read

Definition at line 192 of file gnunet_bio_lib.h.

Referenced by deserialize_download(), deserialize_fi_node(), deserialize_unindex_file(), load_hostlist_file(), read_download_request(), and read_start_time().

◆ GNUNET_BIO_write_float

#define GNUNET_BIO_write_float (   h,
 
)    GNUNET_BIO_write (h, &f, sizeof(float))

Write a float.

Parameters
hhande to open file
ffloat to write (must be a variable)

Definition at line 274 of file gnunet_bio_lib.h.

◆ GNUNET_BIO_write_double

#define GNUNET_BIO_write_double (   h,
 
)    GNUNET_BIO_write (h, &f, sizeof(double))

Write a double.

Parameters
hhande to open file
fdouble to write (must be a variable)

Definition at line 284 of file gnunet_bio_lib.h.

Function Documentation

◆ GNUNET_BIO_read_open()

struct GNUNET_BIO_ReadHandle* GNUNET_BIO_read_open ( const char *  fn)

Open a file for reading.

Parameters
fnfile name to be opened
Returns
IO handle on success, NULL on error

Definition at line 94 of file bio.c.

References BIO_BUFFER_SIZE, GNUNET_BIO_ReadHandle::buffer, GNUNET_BIO_ReadHandle::fd, GNUNET_DISK_file_open(), GNUNET_DISK_OPEN_READ, GNUNET_DISK_PERM_NONE, GNUNET_malloc, h, and GNUNET_BIO_ReadHandle::size.

Referenced by deserialize_download_file(), deserialize_publish_file(), deserialize_search_file(), deserialize_search_result(), deserialize_subdownload(), deserialize_unindex_file(), get_read_handle(), load(), load_hostlist_file(), load_state(), read_index_list(), and read_update_information_graph().

95 {
96  struct GNUNET_DISK_FileHandle *fd;
97  struct GNUNET_BIO_ReadHandle *h;
98 
100  if (NULL == fd)
101  return NULL;
102  h = GNUNET_malloc (sizeof (struct GNUNET_BIO_ReadHandle) + BIO_BUFFER_SIZE);
103  h->buffer = (char *) &h[1];
104  h->size = BIO_BUFFER_SIZE;
105  h->fd = fd;
106  return h;
107 }
Open the file for reading.
struct GNUNET_DISK_FileHandle * fd
Underlying file abstraction.
Definition: bio.c:58
Nobody is allowed to do anything to the file.
#define BIO_BUFFER_SIZE
Size for I/O buffers.
Definition: bio.c:41
size_t size
Total size of buffer.
Definition: bio.c:78
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
static char * fn
Filename of the unique file.
char * buffer
I/O buffer.
Definition: bio.c:68
int fd
File handle on other OSes.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1673
Handle used to access files (and pipes).
#define GNUNET_malloc(size)
Wrapper around malloc.
Handle for buffered reading.
Definition: bio.c:53
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_read_close()

int GNUNET_BIO_read_close ( struct GNUNET_BIO_ReadHandle h,
char **  emsg 
)

Close an open file.

Reports if any errors reading from the file were encountered.

Parameters
hfile handle
emsgset to the error message
Returns
GNUNET_OK on success, GNUNET_SYSERR otherwise

Definition at line 119 of file bio.c.

References GNUNET_BIO_ReadHandle::emsg, GNUNET_BIO_ReadHandle::fd, GNUNET_DISK_file_close(), GNUNET_free, GNUNET_free_non_null, GNUNET_OK, and GNUNET_SYSERR.

Referenced by deserialize_download_file(), deserialize_file_information(), deserialize_publish_file(), deserialize_search_file(), deserialize_search_result(), deserialize_subdownload(), deserialize_unindex_file(), load(), load_hostlist_file(), load_state(), read_index_list(), and read_update_information_graph().

121 {
122  int err;
123 
124  err = (NULL == h->emsg) ? GNUNET_OK : GNUNET_SYSERR;
125  if (emsg != NULL)
126  *emsg = h->emsg;
127  else
130  GNUNET_free (h);
131  return err;
132 }
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1817
struct GNUNET_DISK_FileHandle * fd
Underlying file abstraction.
Definition: bio.c:58
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
char * emsg
Error message, NULL if there were no errors.
Definition: bio.c:63
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_read()

int GNUNET_BIO_read ( struct GNUNET_BIO_ReadHandle h,
const char *  what,
void *  result,
size_t  len 
)

Read the contents of a binary file into a buffer.

Parameters
hhandle to an open file
whatdescribes what is being read (for error message creation)
resultthe buffer to write the result to
lenthe number of bytes to read
Returns
GNUNET_OK on success, GNUNET_SYSERR on failure

Definition at line 145 of file bio.c.

References _, GNUNET_BIO_ReadHandle::buffer, GNUNET_BIO_ReadHandle::emsg, GNUNET_BIO_ReadHandle::fd, GNUNET_asprintf(), GNUNET_assert, GNUNET_DISK_file_read(), GNUNET_memcpy, GNUNET_OK, GNUNET_SYSERR, GNUNET_BIO_ReadHandle::have, GNUNET_BIO_ReadHandle::pos, result, ret, GNUNET_BIO_ReadHandle::size, and STRERROR.

Referenced by deserialize_fi_node(), deserialize_publish_file(), deserialize_search(), deserialize_search_result(), deserialize_unindex_file(), GNUNET_BIO_read_fn(), GNUNET_BIO_read_meta_data(), GNUNET_BIO_read_string(), load(), load_state(), read_download_request(), and read_index_list().

148 {
149  char *dst = result;
150  size_t min;
151  size_t pos;
152  ssize_t ret;
153 
154  if (NULL != h->emsg)
155  return GNUNET_SYSERR;
156  pos = 0;
157  do
158  {
159  /* first, use buffer */
160  min = h->have - h->pos;
161  if (min > 0)
162  {
163  if (min > len - pos)
164  min = len - pos;
165  GNUNET_memcpy (&dst[pos],
166  &h->buffer[h->pos],
167  min);
168  h->pos += min;
169  pos += min;
170  }
171  if (pos == len)
172  return GNUNET_OK; /* done! */
173  GNUNET_assert (((off_t) h->have) == h->pos);
174  /* fill buffer */
175  ret = GNUNET_DISK_file_read (h->fd,
176  h->buffer,
177  h->size);
178  if (-1 == ret)
179  {
180  GNUNET_asprintf (&h->emsg,
181  _("Error reading `%s': %s"),
182  what,
183  STRERROR (errno));
184  return GNUNET_SYSERR;
185  }
186  if (0 == ret)
187  {
188  GNUNET_asprintf (&h->emsg,
189  _("Error reading `%s': %s"),
190  what,
191  _("End of file"));
192  return GNUNET_SYSERR;
193  }
194  h->pos = 0;
195  h->have = ret;
196  }
197  while (pos < len); /* should always be true */
198  return GNUNET_OK;
199 }
ssize_t GNUNET_DISK_file_read(const struct GNUNET_DISK_FileHandle *h, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: disk.c:881
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define STRERROR(i)
Definition: plibc.h:676
struct GNUNET_DISK_FileHandle * fd
Underlying file abstraction.
Definition: bio.c:58
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
static int ret
Final status code.
Definition: gnunet-arm.c:89
size_t size
Total size of buffer.
Definition: bio.c:78
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
#define GNUNET_memcpy(dst, src, n)
size_t have
Number of bytes available in read buffer.
Definition: bio.c:73
static int result
Global testing status.
char * buffer
I/O buffer.
Definition: bio.c:68
off_t pos
Current read offset in buffer.
Definition: bio.c:83
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
char * emsg
Error message, NULL if there were no errors.
Definition: bio.c:63
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_read_fn()

int GNUNET_BIO_read_fn ( struct GNUNET_BIO_ReadHandle h,
const char *  file,
int  line,
void *  result,
size_t  len 
)

Read the contents of a binary file into a buffer.

Parameters
hhandle to an open file
filename of the source file
lineline number in the source file
resultthe buffer to write the result to
lenthe number of bytes to read
Returns
GNUNET_OK on success, GNUNET_SYSERR on failure

Definition at line 213 of file bio.c.

References GNUNET_BIO_read(), GNUNET_snprintf(), and PATH_MAX.

Referenced by GNUNET_BIO_read_int32__(), and GNUNET_BIO_read_int64__().

218 {
219  char what[PATH_MAX + 1024];
220 
221  GNUNET_snprintf (what, sizeof (what), "%s:%d", file, line);
222  return GNUNET_BIO_read (h, what, result, len);
223 }
int GNUNET_snprintf(char *buf, size_t size, const char *format,...)
Like snprintf, just aborts if the buffer is of insufficient size.
int GNUNET_BIO_read(struct GNUNET_BIO_ReadHandle *h, const char *what, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: bio.c:145
static char * line
Desired phone line (string to be converted to a hash).
static int result
Global testing status.
#define PATH_MAX
Assumed maximum path length (for source file names).
Definition: bio.c:34
uint16_t len
length of data (which is always a uint32_t, but presumably this can be used to specify that fewer byt...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_read_string()

int GNUNET_BIO_read_string ( struct GNUNET_BIO_ReadHandle h,
const char *  what,
char **  result,
size_t  max_length 
)

Read 0-terminated string from a file.

Parameters
hhandle to an open file
whatdescribes what is being read (for error message creation)
resultthe buffer to store a pointer to the (allocated) string to (note that *result could be set to NULL as well)
max_lengthmaximum allowed length for the string
Returns
GNUNET_OK on success, GNUNET_SYSERR on failure

Definition at line 237 of file bio.c.

References _, buf, GNUNET_BIO_ReadHandle::emsg, GNUNET_asprintf(), GNUNET_BIO_read(), GNUNET_BIO_read_int32, GNUNET_free, GNUNET_free_non_null, GNUNET_malloc, GNUNET_OK, and GNUNET_SYSERR.

Referenced by deserialize_download(), deserialize_fi_node(), deserialize_publish_file(), deserialize_search(), deserialize_search_result(), deserialize_unindex_file(), load_hostlist_file(), load_state(), read_index_list(), and read_update_information_graph().

241 {
242  char *buf;
243  uint32_t big;
244 
245  if (GNUNET_OK != GNUNET_BIO_read_int32 (h, &big))
246  {
248  GNUNET_asprintf (&h->emsg, _("Error reading length of string `%s'"), what);
249  return GNUNET_SYSERR;
250  }
251  if (0 == big)
252  {
253  *result = NULL;
254  return GNUNET_OK;
255  }
256  if (big > max_length)
257  {
258  GNUNET_asprintf (&h->emsg, _("String `%s' longer than allowed (%u > %u)"),
259  what, big, max_length);
260  return GNUNET_SYSERR;
261  }
262  buf = GNUNET_malloc (big);
263  *result = buf;
264  buf[--big] = '\0';
265  if (0 == big)
266  return GNUNET_OK;
267  if (GNUNET_OK != GNUNET_BIO_read (h, what, buf, big))
268  {
269  GNUNET_free (buf);
270  *result = NULL;
271  return GNUNET_SYSERR;
272  }
273  return GNUNET_OK;
274 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
int GNUNET_BIO_read(struct GNUNET_BIO_ReadHandle *h, const char *what, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: bio.c:145
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
static char buf[2048]
static int result
Global testing status.
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
#define GNUNET_BIO_read_int32(h, i)
Read an (u)int32_t.
char * emsg
Error message, NULL if there were no errors.
Definition: bio.c:63
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_read_meta_data()

int GNUNET_BIO_read_meta_data ( struct GNUNET_BIO_ReadHandle h,
const char *  what,
struct GNUNET_CONTAINER_MetaData **  result 
)

Read metadata container from a file.

Parameters
hhandle to an open file
whatdescribes what is being read (for error message creation)
resultthe buffer to store a pointer to the (allocated) metadata
Returns
GNUNET_OK on success, GNUNET_SYSERR on failure

Definition at line 286 of file bio.c.

References _, buf, GNUNET_BIO_ReadHandle::emsg, GNUNET_asprintf(), GNUNET_BIO_read(), GNUNET_BIO_read_int32, GNUNET_CONTAINER_meta_data_deserialize(), GNUNET_free, GNUNET_malloc, GNUNET_OK, GNUNET_SYSERR, MAX_META_DATA, meta, and GNUNET_BIO_ReadHandle::size.

Referenced by deserialize_download(), deserialize_fi_node(), deserialize_search_result(), and read_update_information_graph().

289 {
290  uint32_t size;
291  char *buf;
293 
294  if (GNUNET_OK !=
296  (int32_t *) & size))
297  return GNUNET_SYSERR;
298  if (size == 0)
299  {
300  *result = NULL;
301  return GNUNET_OK;
302  }
303  if (size > MAX_META_DATA)
304  {
305  GNUNET_asprintf (&h->emsg,
306  _("Serialized metadata `%s' larger than allowed (%u>%u)"),
307  what,
308  size,
309  MAX_META_DATA);
310  return GNUNET_SYSERR;
311  }
312  buf = GNUNET_malloc (size);
313  if (GNUNET_OK !=
314  GNUNET_BIO_read (h,
315  what,
316  buf,
317  size))
318  {
319  GNUNET_free (buf);
320  return GNUNET_SYSERR;
321  }
323  size);
324  if (NULL == meta)
325  {
326  GNUNET_free (buf);
327  GNUNET_asprintf (&h->emsg,
328  _("Metadata `%s' failed to deserialize"),
329  what);
330  return GNUNET_SYSERR;
331  }
332  GNUNET_free (buf);
333  *result = meta;
334  return GNUNET_OK;
335 }
struct GNUNET_CONTAINER_MetaData * GNUNET_CONTAINER_meta_data_deserialize(const char *input, size_t size)
Deserialize meta-data.
#define MAX_META_DATA
Maximum size allowed for meta data written/read from disk.
Definition: bio.c:47
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
int GNUNET_BIO_read(struct GNUNET_BIO_ReadHandle *h, const char *what, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: bio.c:145
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
Meta data to associate with a file, directory or namespace.
static char buf[2048]
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
static unsigned int size
Size of the "table".
Definition: peer.c:67
#define GNUNET_BIO_read_int32(h, i)
Read an (u)int32_t.
static struct GNUNET_CONTAINER_MetaData * meta
Meta-data provided via command-line option.
char * emsg
Error message, NULL if there were no errors.
Definition: bio.c:63
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_read_int32__()

int GNUNET_BIO_read_int32__ ( struct GNUNET_BIO_ReadHandle h,
const char *  file,
int  line,
int32_t *  i 
)

Read an (u)int32_t.

Parameters
hhande to open file
filename of the source file
lineline number in the code
iaddress of 32-bit integer to read
Returns
GNUNET_OK on success, GNUNET_SYSERR on error
Parameters
hhande to open file
filename of the source file
lineline number in the source file
iaddress of 32-bit integer to read
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 348 of file bio.c.

References GNUNET_BIO_read_fn(), GNUNET_OK, and GNUNET_SYSERR.

352 {
353  int32_t big;
354 
355  if (GNUNET_OK !=
357  file,
358  line,
359  &big,
360  sizeof (int32_t)))
361  return GNUNET_SYSERR;
362  *i = ntohl (big);
363  return GNUNET_OK;
364 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
static char * line
Desired phone line (string to be converted to a hash).
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
int GNUNET_BIO_read_fn(struct GNUNET_BIO_ReadHandle *h, const char *file, int line, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: bio.c:213
Here is the call graph for this function:

◆ GNUNET_BIO_read_int64__()

int GNUNET_BIO_read_int64__ ( struct GNUNET_BIO_ReadHandle h,
const char *  file,
int  line,
int64_t *  i 
)

Read an (u)int64_t.

Parameters
hhande to open file
filename of the source file
lineline number in the code
iaddress of 64-bit integer to read
Returns
GNUNET_OK on success, GNUNET_SYSERR on error
Parameters
hhande to open file
filename of the source file
lineline number in the source file
iaddress of 64-bit integer to read
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 377 of file bio.c.

References GNUNET_BIO_read_fn(), GNUNET_ntohll(), GNUNET_OK, and GNUNET_SYSERR.

381 {
382  int64_t big;
383 
384  if (GNUNET_OK !=
386  file,
387  line,
388  &big,
389  sizeof (int64_t)))
390  return GNUNET_SYSERR;
391  *i = GNUNET_ntohll (big);
392  return GNUNET_OK;
393 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
static char * line
Desired phone line (string to be converted to a hash).
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
int GNUNET_BIO_read_fn(struct GNUNET_BIO_ReadHandle *h, const char *file, int line, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: bio.c:213
uint64_t GNUNET_ntohll(uint64_t n)
Convert unsigned 64-bit integer to host byte order.
Definition: common_endian.c:48
Here is the call graph for this function:

◆ GNUNET_BIO_write_open()

struct GNUNET_BIO_WriteHandle* GNUNET_BIO_write_open ( const char *  fn)

Open a file for writing.

Parameters
fnfile name to be opened
Returns
IO handle on success, NULL on error

Definition at line 430 of file bio.c.

References BIO_BUFFER_SIZE, GNUNET_BIO_WriteHandle::buffer, GNUNET_BIO_ReadHandle::fd, GNUNET_BIO_WriteHandle::fd, GNUNET_DISK_file_open(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_TRUNCATE, GNUNET_DISK_OPEN_WRITE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_malloc, h, and GNUNET_BIO_WriteHandle::size.

Referenced by get_write_handle(), get_write_handle_in_dir(), GNUNET_FS_download_sync_(), GST_stats_init(), logger_run(), run(), save(), save_hostlist_file(), save_state(), write_index_list(), and write_update_information_graph().

431 {
432  struct GNUNET_DISK_FileHandle *fd;
433  struct GNUNET_BIO_WriteHandle *h;
434 
440  if (NULL == fd)
441  return NULL;
442  h = GNUNET_malloc (sizeof (struct GNUNET_BIO_WriteHandle) + BIO_BUFFER_SIZE);
443  h->buffer = (char *) &h[1];
444  h->size = BIO_BUFFER_SIZE;
445  h->fd = fd;
446  return h;
447 }
Create file if it doesn&#39;t exist.
#define BIO_BUFFER_SIZE
Size for I/O buffers.
Definition: bio.c:41
struct GNUNET_DISK_FileHandle * fd
Underlying file handle.
Definition: bio.c:404
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
static char * fn
Filename of the unique file.
Truncate file if it exists.
char * buffer
I/O buffer.
Definition: bio.c:409
Handle for buffered writing.
Definition: bio.c:399
Open the file for writing.
size_t size
Total size of buffer.
Definition: bio.c:419
int fd
File handle on other OSes.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1673
Handle used to access files (and pipes).
#define GNUNET_malloc(size)
Wrapper around malloc.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_write_close()

int GNUNET_BIO_write_close ( struct GNUNET_BIO_WriteHandle h)

Close an open file for writing.

Parameters
hfile handle
Returns
GNUNET_OK on success, GNUNET_SYSERR otherwise
Parameters
hfile handle
Returns
GNUNET_OK on success, GNUNET_SYSERR otherwise

Definition at line 457 of file bio.c.

References GNUNET_BIO_WriteHandle::fd, GNUNET_BIO_flush(), GNUNET_DISK_file_close(), GNUNET_free, GNUNET_OK, GNUNET_SYSERR, and ret.

Referenced by GNUNET_FS_download_sync_(), GNUNET_FS_file_information_sync_(), GNUNET_FS_publish_sync_(), GNUNET_FS_search_result_sync_(), GNUNET_FS_search_sync_(), GNUNET_FS_unindex_sync_(), GST_stats_destroy(), save(), save_hostlist_file(), save_state(), shutdown_task(), write_index_list(), and write_update_information_graph().

458 {
459  int ret;
460 
461  ret = GNUNET_SYSERR;
462  if ( (NULL != h->fd) &&
463  (GNUNET_OK == (ret = GNUNET_BIO_flush (h))) )
465  GNUNET_free (h);
466  return ret;
467 }
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1817
int GNUNET_BIO_flush(struct GNUNET_BIO_WriteHandle *h)
Force a buffered writer to flush its buffer.
Definition: bio.c:478
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
struct GNUNET_DISK_FileHandle * fd
Underlying file handle.
Definition: bio.c:404
static int ret
Final status code.
Definition: gnunet-arm.c:89
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_write()

int GNUNET_BIO_write ( struct GNUNET_BIO_WriteHandle h,
const void *  buffer,
size_t  n 
)

Write a buffer to a file.

Parameters
hhandle to open file
bufferthe data to write
nnumber of bytes to write
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 505 of file bio.c.

References GNUNET_BIO_ReadHandle::buffer, GNUNET_BIO_WriteHandle::buffer, GNUNET_BIO_WriteHandle::fd, GNUNET_assert, GNUNET_BIO_flush(), GNUNET_break, GNUNET_memcpy, GNUNET_OK, GNUNET_SYSERR, GNUNET_BIO_WriteHandle::have, GNUNET_BIO_ReadHandle::pos, and GNUNET_BIO_WriteHandle::size.

Referenced by copy_from_reader(), GNUNET_BIO_write_int32(), GNUNET_BIO_write_int64(), GNUNET_BIO_write_meta_data(), GNUNET_BIO_write_string(), GNUNET_FS_file_information_sync_(), GNUNET_FS_publish_sync_(), GNUNET_FS_search_result_sync_(), GNUNET_FS_search_sync_(), GNUNET_FS_unindex_sync_(), handle_log_msg(), sample_load_task(), save(), write_download_request(), write_index_list(), and write_item().

508 {
509  const char *src = buffer;
510  size_t min;
511  size_t pos;
512 
513  if (NULL == h->fd)
514  return GNUNET_SYSERR;
515  pos = 0;
516  do
517  {
518  /* first, just use buffer */
519  min = h->size - h->have;
520  if (min > n - pos)
521  min = n - pos;
522  GNUNET_memcpy (&h->buffer[h->have],
523  &src[pos],
524  min);
525  pos += min;
526  h->have += min;
527  if (pos == n)
528  return GNUNET_OK; /* done */
529  GNUNET_assert (h->have == h->size);
530  if (GNUNET_OK != GNUNET_BIO_flush (h))
531  return GNUNET_SYSERR; /* error */
532  }
533  while (pos < n); /* should always be true */
534  GNUNET_break (0);
535  return GNUNET_OK;
536 }
int GNUNET_BIO_flush(struct GNUNET_BIO_WriteHandle *h)
Force a buffered writer to flush its buffer.
Definition: bio.c:478
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
struct GNUNET_DISK_FileHandle * fd
Underlying file handle.
Definition: bio.c:404
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define GNUNET_memcpy(dst, src, n)
size_t have
Number of bytes already in buffer.
Definition: bio.c:414
char * buffer
I/O buffer.
Definition: bio.c:409
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
size_t size
Total size of buffer.
Definition: bio.c:419
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_flush()

int GNUNET_BIO_flush ( struct GNUNET_BIO_WriteHandle h)

Force a buffered writer to flush its buffer.

Parameters
hthe writer handle
Returns
GNUNET_OK upon success. Upon failure GNUNET_SYSERR is returned and the file is closed

Definition at line 478 of file bio.c.

References GNUNET_BIO_WriteHandle::buffer, GNUNET_BIO_WriteHandle::fd, GNUNET_DISK_file_close(), GNUNET_DISK_file_write(), GNUNET_OK, GNUNET_SYSERR, GNUNET_BIO_WriteHandle::have, and ret.

Referenced by GNUNET_BIO_write(), and GNUNET_BIO_write_close().

479 {
480  ssize_t ret;
481 
482  ret = GNUNET_DISK_file_write (h->fd,
483  h->buffer,
484  h->have);
485  if (ret != (ssize_t) h->have)
486  {
488  h->fd = NULL;
489  return GNUNET_SYSERR; /* error */
490  }
491  h->have = 0;
492  return GNUNET_OK;
493 }
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1817
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
struct GNUNET_DISK_FileHandle * fd
Underlying file handle.
Definition: bio.c:404
static int ret
Final status code.
Definition: gnunet-arm.c:89
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:1049
size_t have
Number of bytes already in buffer.
Definition: bio.c:414
char * buffer
I/O buffer.
Definition: bio.c:409
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_write_string()

int GNUNET_BIO_write_string ( struct GNUNET_BIO_WriteHandle h,
const char *  s 
)

Write a string to a file.

Parameters
hhandle to open file
sstring to write (can be NULL)
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 547 of file bio.c.

References GNUNET_BIO_write(), GNUNET_BIO_write_int32(), GNUNET_OK, and GNUNET_SYSERR.

Referenced by GNUNET_FS_download_sync_(), GNUNET_FS_file_information_sync_(), GNUNET_FS_publish_sync_(), GNUNET_FS_search_result_sync_(), GNUNET_FS_search_sync_(), GNUNET_FS_unindex_sync_(), save_hostlist_file(), write_index_list(), write_item(), and write_update_information_graph().

549 {
550  uint32_t slen;
551 
552  slen = (uint32_t) ((s == NULL) ? 0 : strlen (s) + 1);
553  if (GNUNET_OK != GNUNET_BIO_write_int32 (h, slen))
554  return GNUNET_SYSERR;
555  if (0 != slen)
556  return GNUNET_BIO_write (h, s, slen - 1);
557  return GNUNET_OK;
558 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
int GNUNET_BIO_write_int32(struct GNUNET_BIO_WriteHandle *h, int32_t i)
Write an (u)int32_t.
Definition: bio.c:605
int GNUNET_BIO_write(struct GNUNET_BIO_WriteHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: bio.c:505
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_write_meta_data()

int GNUNET_BIO_write_meta_data ( struct GNUNET_BIO_WriteHandle h,
const struct GNUNET_CONTAINER_MetaData m 
)

Write metadata container to a file.

Parameters
hhandle to open file
mmetadata to write
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 569 of file bio.c.

References buf, GNUNET_BIO_write(), GNUNET_BIO_write_int32(), GNUNET_CONTAINER_meta_data_serialize(), GNUNET_CONTAINER_META_DATA_SERIALIZE_PART, GNUNET_free, GNUNET_OK, GNUNET_SYSERR, MAX_META_DATA, and GNUNET_BIO_ReadHandle::size.

Referenced by GNUNET_FS_download_sync_(), GNUNET_FS_file_information_sync_(), GNUNET_FS_search_result_sync_(), and write_update_information_graph().

571 {
572  ssize_t size;
573  char *buf;
574 
575  if (m == NULL)
576  return GNUNET_BIO_write_int32 (h, 0);
577  buf = NULL;
578  size =
581  if (size == -1)
582  {
583  GNUNET_free (buf);
584  return GNUNET_SYSERR;
585  }
586  if ((GNUNET_OK != GNUNET_BIO_write_int32 (h, (uint32_t) size)) ||
587  (GNUNET_OK != GNUNET_BIO_write (h, buf, size)))
588  {
589  GNUNET_free (buf);
590  return GNUNET_SYSERR;
591  }
592  GNUNET_free (buf);
593  return GNUNET_OK;
594 }
ssize_t GNUNET_CONTAINER_meta_data_serialize(const struct GNUNET_CONTAINER_MetaData *md, char **target, size_t max, enum GNUNET_CONTAINER_MetaDataSerializationOptions opt)
Serialize meta-data to target.
If not enough space is available, it is acceptable to only serialize some of the metadata.
#define MAX_META_DATA
Maximum size allowed for meta data written/read from disk.
Definition: bio.c:47
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
static char buf[2048]
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
static unsigned int size
Size of the "table".
Definition: peer.c:67
int GNUNET_BIO_write_int32(struct GNUNET_BIO_WriteHandle *h, int32_t i)
Write an (u)int32_t.
Definition: bio.c:605
int GNUNET_BIO_write(struct GNUNET_BIO_WriteHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: bio.c:505
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_write_int32()

int GNUNET_BIO_write_int32 ( struct GNUNET_BIO_WriteHandle h,
int32_t  i 
)

Write an (u)int32_t.

Parameters
hhande to open file
i32-bit integer to write
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 605 of file bio.c.

References GNUNET_BIO_write().

Referenced by GNUNET_BIO_write_meta_data(), GNUNET_BIO_write_string(), GNUNET_FS_download_sync_(), GNUNET_FS_file_information_sync_(), GNUNET_FS_publish_sync_(), GNUNET_FS_search_result_sync_(), GNUNET_FS_search_sync_(), GNUNET_FS_unindex_sync_(), save_hostlist_file(), save_state(), write_download_request(), and write_update_information_graph().

607 {
608  int32_t big;
609 
610  big = htonl (i);
611  return GNUNET_BIO_write (h, &big, sizeof (int32_t));
612 }
int GNUNET_BIO_write(struct GNUNET_BIO_WriteHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: bio.c:505
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_BIO_write_int64()

int GNUNET_BIO_write_int64 ( struct GNUNET_BIO_WriteHandle h,
int64_t  i 
)

Write an (u)int64_t.

Parameters
hhande to open file
i64-bit integer to write
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 623 of file bio.c.

References GNUNET_BIO_write(), and GNUNET_htonll().

Referenced by GNUNET_FS_download_sync_(), GNUNET_FS_file_information_sync_(), GNUNET_FS_unindex_sync_(), handle_p2p_estimate(), save_hostlist_file(), write_download_request(), and write_start_time().

625 {
626  int64_t big;
627 
628  big = GNUNET_htonll (i);
629  return GNUNET_BIO_write (h, &big, sizeof (int64_t));
630 }
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
int GNUNET_BIO_write(struct GNUNET_BIO_WriteHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: bio.c:505
Here is the call graph for this function:
Here is the caller graph for this function: