Functions

cbf_read_binary.c File Reference

#include "cbf.h"
#include "cbf_file.h"
#include "cbf_context.h"
#include "cbf_binary.h"
#include "cbf_codes.h"
#include <ctype.h>
Include dependency graph for cbf_read_binary.c:

Go to the source code of this file.

Functions

int cbf_parse_binaryheader (cbf_file *file, size_t *size, long *id, unsigned int *compression, int mime)

Function Documentation

int cbf_parse_binaryheader ( cbf_file file,
size_t *  size,
long *  id,
unsigned int *  compression,
int  mime 
)

Definition at line 135 of file cbf_read_binary.c.

References cbf_failnez, CBF_FORMAT, cbf_get_character(), cbf_get_integer(), and cbf_reset_bits().

Referenced by cbf_lex().

{
  unsigned int file_size, file_compression;
  
  int file_id, c;
  

    /* Skip ASCII characters */
    
  do
  
    c = cbf_get_character (file);

  while (isspace (c) || isgraph (c));


    /* Skip the separators:
    
               Byte

               -1?    Ctrl-L     12 (FF) 
                0     Ctrl-Z     26 (SUB)
                1     Ctrl-D      4 (EOT)
                2               213
              3-6     id
             7-14     size                */


  while (c == 12 || c == 26 || c == 4)
  
    c = cbf_get_character (file);


    /* OK? */
          
  if (c != 213)
        
    return CBF_FORMAT;
          
          
    /* Discard any bits in the buffer */
          
  cbf_failnez (cbf_reset_bits (file))

    /* If there was a mime header, there is no id,  size or compression */

  if (mime) return 0;

    /* id */

  cbf_failnez (cbf_get_integer (file, &file_id, 1, 64))

  if (id)
          
    *id = file_id;


    /* Size */
          
  cbf_failnez (cbf_get_integer (file, (int *) &file_size, 0, 64))
     
  if (size)
     
    *size = file_size;

    /* Compression Type */
          
  cbf_failnez (cbf_get_integer (file, (int *) &file_compression, 0, 64))
     
  if (compression)
     
    *compression = file_compression;


    /* Success */
    
  return 0;      
}