#include "cbf_tree.h"
Go to the source code of this file.
Functions | |
int | cbf_get_bintext (cbf_node *column, unsigned int row, int *type, int *id, cbf_file **file, long *start, size_t *size, int *checked_digest, char *digest, int *elsize, int *elsign, unsigned int *compression) |
int | cbf_set_bintext (cbf_node *column, unsigned int row, int type, int id, cbf_file *file, long start, long size, int checked_digest, const char *digest, int elsize, int elsign, unsigned int compression) |
int | cbf_is_binary (cbf_node *column, unsigned int row) |
int | cbf_is_mimebinary (cbf_node *column, unsigned int row) |
int | cbf_free_value (cbf_context *context, cbf_node *column, unsigned int row) |
int | cbf_set_binary (cbf_node *column, unsigned int row, unsigned int compression, int binary_id, void *value, size_t elsize, int elsign, size_t nelem) |
int | cbf_binary_parameters (cbf_node *column, unsigned int row, unsigned int *compression, int *binary_id, int *eltype, size_t *elsize, int *elsigned, int *elunsigned, size_t *nelem, int *minelem, int *maxelem) |
int | cbf_get_binary (cbf_node *column, unsigned int row, int *binary_id, void *value, size_t elsize, int elsign, size_t nelem, size_t *nelem_read) |
int cbf_binary_parameters | ( | cbf_node * | column, |
unsigned int | row, | ||
unsigned int * | compression, | ||
int * | binary_id, | ||
int * | eltype, | ||
size_t * | elsize, | ||
int * | elsigned, | ||
int * | elunsigned, | ||
size_t * | nelem, | ||
int * | minelem, | ||
int * | maxelem | ||
) |
Definition at line 569 of file cbf_binary.c.
References cbf_binary_parameters(), cbf_check_digest(), cbf_decompress_parameters(), cbf_failnez, cbf_get_bintext(), cbf_is_mimebinary(), cbf_mime_temp(), and cbf_set_fileposition().
Referenced by cbf_binary_parameters(), and cbf_get_integerarrayparameters().
{ cbf_file *file; long start; size_t size, file_elsize, file_nelem; int text_bits, errorcode; /* Check the digest (this will also decode it if necessary) */ cbf_failnez (cbf_check_digest (column, row)) /* Is it an encoded binary section? */ if (cbf_is_mimebinary (column, row)) { /* Convert the value to a normal binary value */ cbf_failnez (cbf_mime_temp (column, row)) /* Rerun the function */ return cbf_binary_parameters (column, row, compression, id, eltype, elsize, elsigned, elunsigned, nelem, minelem, maxelem); } /* Parse the value */ cbf_failnez (cbf_get_bintext (column, row, NULL, id, &file, &start, &size, NULL, NULL, &text_bits, NULL, compression)) /* Position the file at the start of the binary section */ cbf_failnez (cbf_set_fileposition (file, start, SEEK_SET)) /* Get the parameters */ errorcode = cbf_decompress_parameters (eltype, &file_elsize, elsigned, elunsigned, &file_nelem, minelem, maxelem, *compression, file); if (!errorcode) { if (elsize) if (file_elsize > 0) *elsize = file_elsize; else *elsize = (text_bits + CHAR_BIT - 1) / CHAR_BIT; if (nelem) if (file_nelem > 0) *nelem = file_nelem; else *nelem = (size * 8) / text_bits; } return errorcode; }
int cbf_free_value | ( | cbf_context * | context, |
cbf_node * | column, | ||
unsigned int | row | ||
) |
Definition at line 371 of file cbf_binary.c.
References CBF_ARGUMENT, cbf_close_temporary(), cbf_delete_fileconnection(), cbf_failnez, cbf_free_string(), cbf_get_bintext(), cbf_get_columnrow(), cbf_is_binary(), cbf_set_columnrow(), and CBF_TOKEN_TMP_BIN.
Referenced by cbf_set_columnrow().
{ cbf_file *file; const char *text; int is_binary, type; /* Check the argument */ if (!column) return CBF_ARGUMENT; /* Is the value binary? */ is_binary = cbf_is_binary (column, row); /* Parse the (binary) value */ if (is_binary) cbf_failnez (cbf_get_bintext (column, row, &type, NULL, &file, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) /* Get the ASCII value */ cbf_failnez (cbf_get_columnrow (&text, column, row)) /* Set the value to null */ cbf_failnez (cbf_set_columnrow (column, row, NULL, 0)) /* And free it */ cbf_free_string (NULL, text); if (is_binary) if (type == CBF_TOKEN_TMP_BIN) cbf_failnez (cbf_close_temporary (context, &file)) else cbf_failnez (cbf_delete_fileconnection (&file)) /* Success */ return 0; }
int cbf_get_binary | ( | cbf_node * | column, |
unsigned int | row, | ||
int * | binary_id, | ||
void * | value, | ||
size_t | elsize, | ||
int | elsign, | ||
size_t | nelem, | ||
size_t * | nelem_read | ||
) |
Definition at line 662 of file cbf_binary.c.
References bits(), cbf_check_digest(), cbf_decompress(), cbf_decompress_parameters(), cbf_failnez, cbf_get_binary(), cbf_get_bintext(), cbf_is_mimebinary(), cbf_mime_temp(), and cbf_set_fileposition().
Referenced by cbf_get_binary(), and cbf_get_integerarray().
{ cbf_file *file; long start; int eltype_file, elsigned_file, elunsigned_file, minelem_file, maxelem_file, bits, sign; unsigned int compression; size_t nelem_file; /* Check the digest (this will also decode it if necessary) */ cbf_failnez (cbf_check_digest (column, row)) /* Is it an encoded binary section? */ if (cbf_is_mimebinary (column, row)) { /* Convert the value to a normal binary value */ cbf_failnez (cbf_mime_temp (column, row)) /* Rerun the function */ return cbf_get_binary (column, row, id, value, elsize, elsign, nelem, nelem_read); } /* Parse the value */ cbf_failnez (cbf_get_bintext (column, row, NULL, id, &file, &start, NULL, NULL, NULL, &bits, &sign, &compression)) /* Position the file at the start of the binary section */ cbf_failnez (cbf_set_fileposition (file, start, SEEK_SET)) /* Get the parameters and position the file */ cbf_failnez (cbf_decompress_parameters (&eltype_file, NULL, &elsigned_file, &elunsigned_file, &nelem_file, &minelem_file, &maxelem_file, compression, file)) /* Decompress the binary data */ return cbf_decompress (value, elsize, elsign, nelem, nelem_read, compression, bits, sign, file); }
int cbf_get_bintext | ( | cbf_node * | column, |
unsigned int | row, | ||
int * | type, | ||
int * | id, | ||
cbf_file ** | file, | ||
long * | start, | ||
size_t * | size, | ||
int * | checked_digest, | ||
char * | digest, | ||
int * | elsize, | ||
int * | elsign, | ||
unsigned int * | compression | ||
) |
Definition at line 140 of file cbf_binary.c.
References CBF_ASCII, cbf_failnez, cbf_get_columnrow(), and cbf_is_binary().
Referenced by cbf_binary_parameters(), cbf_check_digest(), cbf_free_value(), cbf_get_binary(), cbf_mime_temp(), and cbf_write_binary().
{ cbf_file *file_text; long start_text, size_text; int id_text, type_text, checked_digest_text, bits_text, sign_text; unsigned int compression_text; char digest_text [25]; const char *text; /* Check that the value is binary */ if (!cbf_is_binary (column, row)) return CBF_ASCII; /* Get the value */ cbf_failnez (cbf_get_columnrow (&text, column, row)) /* Parse it */ type_text = *text; sscanf (text + 1, " %x %p %lx %lx %d %24s %x %d %u", &id_text, &file_text, &start_text, &size_text, &checked_digest_text, digest_text, &bits_text, &sign_text, &compression_text); /* Copy the values */ if (type) *type = type_text; if (id) *id = id_text; if (file) *file = file_text; if (start) *start = start_text; if (size) *size = size_text; if (checked_digest) *checked_digest = checked_digest_text; if (digest) strcpy (digest, digest_text); if (bits) *bits = bits_text; if (sign) *sign = sign_text; if (compression) *compression = compression_text; /* Success */ return 0; }
int cbf_is_binary | ( | cbf_node * | column, |
unsigned int | row | ||
) |
Definition at line 321 of file cbf_binary.c.
References cbf_get_columnrow(), CBF_TOKEN_BIN, CBF_TOKEN_MIME_BIN, and CBF_TOKEN_TMP_BIN.
Referenced by cbf_find_nextrow(), cbf_free_value(), cbf_get_bintext(), cbf_get_integerarrayparameters(), cbf_get_value(), and cbf_write_binary().
{ const char *text; /* Get the value */ if (cbf_get_columnrow (&text, column, row)) return 0; if (text) return (*text == CBF_TOKEN_BIN || *text == CBF_TOKEN_TMP_BIN || *text == CBF_TOKEN_MIME_BIN); /* Fail */ return 0; }
int cbf_is_mimebinary | ( | cbf_node * | column, |
unsigned int | row | ||
) |
Definition at line 347 of file cbf_binary.c.
References cbf_get_columnrow(), and CBF_TOKEN_MIME_BIN.
Referenced by cbf_binary_parameters(), cbf_check_digest(), cbf_get_binary(), cbf_mime_temp(), and cbf_write_binary().
{ const char *text; /* Get the value */ if (cbf_get_columnrow (&text, column, row)) return 0; if (text) return (*text == CBF_TOKEN_MIME_BIN); /* Fail */ return 0; }
int cbf_set_binary | ( | cbf_node * | column, |
unsigned int | row, | ||
unsigned int | compression, | ||
int | binary_id, | ||
void * | value, | ||
size_t | elsize, | ||
int | elsign, | ||
size_t | nelem | ||
) |
Definition at line 433 of file cbf_binary.c.
References bits(), cbf_compress(), cbf_delete_fileconnection(), cbf_failnez, CBF_FILESEEK, CBF_FILETELL, cbf_get_fileposition(), cbf_onfailnez, cbf_open_temporary(), cbf_set_bintext(), cbf_set_columnrow(), cbf_set_fileposition(), CBF_TOKEN_TMP_BIN, and cbf_node_struct::context.
Referenced by cbf_set_integerarray().
{ cbf_file *tempfile; char digest [25]; size_t size; long start; int bits; /* Remove the old value */ cbf_failnez (cbf_set_columnrow (column, row, NULL, 1)) /* Get the temporary file */ cbf_failnez (cbf_open_temporary (column->context, &tempfile)) /* Move to the end of the temporary file */ if (cbf_set_fileposition (tempfile, 0, SEEK_END)) return CBF_FILESEEK | cbf_delete_fileconnection (&tempfile); /* Get the starting location */ if (cbf_get_fileposition (tempfile, &start)) return CBF_FILETELL | cbf_delete_fileconnection (&tempfile); /* Add the binary data to the temporary file */ cbf_onfailnez (cbf_compress (value, elsize, elsign, nelem, compression, tempfile, &size, &bits, digest), cbf_delete_fileconnection (&tempfile)) /* Set the value */ cbf_onfailnez (cbf_set_bintext (column, row, CBF_TOKEN_TMP_BIN, binary_id, tempfile, start, size, 1, digest, bits, elsign != 0, compression), cbf_delete_fileconnection (&tempfile)) /* Success */ return 0; }
int cbf_set_bintext | ( | cbf_node * | column, |
unsigned int | row, | ||
int | type, | ||
int | id, | ||
cbf_file * | file, | ||
long | start, | ||
long | size, | ||
int | checked_digest, | ||
const char * | digest, | ||
int | elsize, | ||
int | elsign, | ||
unsigned int | compression | ||
) |
Definition at line 244 of file cbf_binary.c.
References cbf_add_fileconnection(), CBF_ALLOC, cbf_copy_string(), cbf_delete_fileconnection(), cbf_free_string(), cbf_is_base64digest(), cbf_onfailnez, and cbf_set_columnrow().
Referenced by cbf_check_digest(), cbf_mime_temp(), cbf_set_binary(), and cbf_write_binary().
{ char text [(((sizeof (void *) + sizeof (long int) * 2 + sizeof (int) * 3) * CHAR_BIT) >> 2) + 55]; const char *new_text; int errorcode; /* Check that the digest has the correct format */ if (!cbf_is_base64digest (digest)) { digest = "------------------------"; checked_digest = 0; } /* Create the new text */ sprintf (text, "%x %p %lx %lx %1d %24s %x %d %u", id, file, start, size, checked_digest != 0, digest, bits, sign, compression); new_text = cbf_copy_string (NULL, text, type); if (!new_text) return CBF_ALLOC; /* Add a new connection to the file */ cbf_onfailnez (cbf_add_fileconnection (&file, NULL), cbf_free_string (NULL, new_text)) /* Set the new value */ errorcode = cbf_set_columnrow (column, row, new_text, 1); if (errorcode) { cbf_free_string (NULL, new_text); return errorcode | cbf_delete_fileconnection (&file); } /* Success */ return 0; }