Verified Commit e3d3e1d0 authored by Tomáš Stefan's avatar Tomáš Stefan
Browse files

Reading xref section (with all subsections)

added
  - tests
  - fn add_xref_entry
  - fn free_xref_entry
  - fn xref_init
  - fn xref_free
  - fn read_xref_table
  - fn print_xref
  - fn skip_leading_whitespaces
  - fn parse_keyword
removed
  - modes (also sigil_process -> sigil_verify)
parent 552ea368
Loading
Loading
Loading
Loading
+27 −3
Original line number Diff line number Diff line
@@ -2,12 +2,33 @@
#define PDF_SIGIL_AUXILIARY_H

#include <stdio.h>
#include <stdint.h>

#ifndef CHAR_T
#define CHAR_T
    typedef char char_t;
    typedef unsigned char char_t;
#endif /* CHAR_T */

#ifndef SIGIL_ERR_T
#define SIGIL_ERR_T
    typedef uint32_t sigil_err_t;
#endif /* SIGIL_ERR_T */

#ifndef KEYWORD_T
#define KEYWORD_T
    typedef uint32_t keyword_t;
#endif /* KEYWORD_T */

#ifndef FREE_INDICATOR_T
#define FREE_INDICATOR_T
    typedef uint32_t free_indicator_t;
#endif /* FREE_INDICATOR_T */

#define KEYWORD_xref     0
#define KEYWORD_trailer  1

#define IN_USE_ENTRY     0
#define FREE_ENTRY       1

#define COLOR_RED        "\x1b[31m"
#define COLOR_GREEN      "\x1b[32m"
@@ -22,8 +43,11 @@ void sigil_zeroize(void *a, size_t bytes);
int is_digit(const char_t c);
int is_whitespace(const char_t c);

int parse_number(FILE *in, size_t *number);
int parse_free_indicator(FILE *in, char_t *result);
sigil_err_t skip_leading_whitespaces(FILE *in);

sigil_err_t parse_number(FILE *in, size_t *number);
sigil_err_t parse_keyword(FILE *in, keyword_t *keyword);
sigil_err_t parse_free_indicator(FILE *in, free_indicator_t *result);

void print_module_name(const char *module_name, int verbosity);
void print_module_result(int result, int verbosity);
+6 −4
Original line number Diff line number Diff line
@@ -5,9 +5,13 @@

#ifndef CHAR_T
#define CHAR_T
    typedef char char_t;
    typedef unsigned char char_t;
#endif /* CHAR_T */

#ifndef SIGIL_ERR_T
#define SIGIL_ERR_T
    typedef uint32_t sigil_err_t;
#endif /* SIGIL_ERR_T */

#define ERR_NO           0x0000 // [_|_|_|x] 0000 0000
#define ERR_ALLOC        0x0001 // [_|_|_|x] 0000 0001
@@ -27,9 +31,7 @@
#define ERR_15           0x4000 // [_|_|x|_] 0100 0000
#define ERR_16           0x8000 // [_|_|x|_] 1000 0000

typedef uint32_t sigil_err_t;

const char_t *sigil_err_string(sigil_err_t err);
const char *sigil_err_string(sigil_err_t err);

int sigil_error_self_test(int verbosity);

+5 −1
Original line number Diff line number Diff line
#ifndef PDF_SIGIL_HEADER_H
#define PDF_SIGIL_HEADER_H

#include "error.h"
#include "sigil.h"

#ifndef SIGIL_ERR_T
#define SIGIL_ERR_T
    typedef uint32_t sigil_err_t;
#endif /* SIGIL_ERR_T */


sigil_err_t process_header(sigil_t *sgl);

+10 −16
Original line number Diff line number Diff line
@@ -2,13 +2,17 @@
#define PDF_SIGIL_SIGIL_H

#include <stdio.h>
#include "error.h"

#ifndef CHAR_T
#define CHAR_T
    typedef char char_t;
    typedef unsigned char char_t;
#endif /* CHAR_T */

#ifndef SIGIL_ERR_T
#define SIGIL_ERR_T
    typedef uint32_t sigil_err_t;
#endif /* SIGIL_ERR_T */

#ifndef XREF_T
#define XREF_T
    typedef struct {
@@ -26,17 +30,9 @@
#define XREF_TYPE_TABLE    1
#define XREF_TYPE_STREAM   2

#define MODE_UNSET     0
#define MODE_VERIFY    1
#define MODE_SIGN      2

typedef uint32_t mode_t;
struct xref_t;

typedef struct {
    FILE   *file;
    char_t *filepath;
    mode_t  mode;
    char   *filepath;
    short   pdf_x,             /* numbers from PDF header */
            pdf_y;             /*   %PDF-<pdf_x>.<pdf_y>  */
    short   xref_type;
@@ -48,13 +44,11 @@ typedef struct {

sigil_err_t sigil_init(sigil_t **sgl);

sigil_err_t sigil_setup_file(sigil_t *sgl, const char_t *filepath);

sigil_err_t sigil_setup_mode(sigil_t *sgl, mode_t mode);
sigil_err_t sigil_setup_file(sigil_t *sgl, const char *filepath);

sigil_err_t sigil_process(sigil_t *sgl);
sigil_err_t sigil_verify(sigil_t *sgl);

// ... get functions TBD
// ... get functions TODO

void sigil_free(sigil_t *sgl);

+4 −1
Original line number Diff line number Diff line
#ifndef PDF_SIGIL_TRAILER_H
#define PDF_SIGIL_TRAILER_H

#include "error.h"
#ifndef SIGIL_ERR_T
#define SIGIL_ERR_T
    typedef uint32_t sigil_err_t;
#endif /* SIGIL_ERR_T */


sigil_err_t process_trailer(sigil_t *sgl);
Loading