X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fodr-priv.h;h=88e747f68b1d93f7e00d928268d0f1dd04c796b9;hp=54c410f0f28c4e3a014593799d1f725460943e06;hb=96b12227d0e350dab63f26a8bb1c8e2f7f834bf3;hpb=2788a4851b551e1a3efb320a2878b809f2d8a9d7 diff --git a/src/odr-priv.h b/src/odr-priv.h index 54c410f..88e747f 100644 --- a/src/odr-priv.h +++ b/src/odr-priv.h @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data. + * Copyright (C) Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -44,8 +44,7 @@ struct Odr_ber_tag { int lcons; }; -#define odr_max(o) ((o)->size - ((o)->bp - (o)->buf)) -#define odr_offset(o) ((o)->bp - (o)->buf) +#define odr_max(o) ((o)->op->size - ((o)->op->bp - (o)->op->buf)) /** * \brief stack for BER constructed items @@ -63,11 +62,11 @@ struct Odr_ber_tag { */ struct odr_constack { - const unsigned char *base; /** starting point of data */ + const char *base; /** starting point of data */ int base_offset; int len; /** length of data, if known, else -1 (decoding only) */ - const unsigned char *lenb; /** where to encode length */ + const char *lenb; /** where to encode length */ int len_offset; int lenlen; /** length of length-field */ const char *name; /** name of stack entry */ @@ -82,6 +81,12 @@ struct odr_constack * \brief ODR private data */ struct Odr_private { + char *buf; /* memory base */ + const char *bp; /* position in buffer (decoding) */ + int pos; /* current position (encoding) */ + int top; /* top of buffer (max pos when encoding) */ + int size; /* current buffer size (encoding+decoding) */ + /* stack for constructed types (we above) */ struct odr_constack *stack_first; /** first member of allocated stack */ struct odr_constack *stack_top; /** top of stack */ @@ -113,6 +118,8 @@ struct Odr_private { #define ODR_STACK_EMPTY(x) (!(x)->op->stack_top) #define ODR_STACK_NOT_EMPTY(x) ((x)->op->stack_top) +#define odr_tell(o) ((o)->op->pos) + /* Private macro. * write a single character at the current position - grow buffer if * necessary. @@ -122,15 +129,15 @@ struct Odr_private { #define odr_putc(o, c) \ ( \ ( \ - (o)->pos < (o)->size ? \ + (o)->op->pos < (o)->op->size ? \ ( \ - (o)->buf[(o)->pos++] = (c), \ + (o)->op->buf[(o)->op->pos++] = (c), \ 0 \ ) : \ ( \ odr_grow_block((o), 1) == 0 ? \ ( \ - (o)->buf[(o)->pos++] = (c), \ + (o)->op->buf[(o)->op->pos++] = (c), \ 0 \ ) : \ ( \ @@ -140,9 +147,9 @@ struct Odr_private { ) \ ) == 0 ? \ ( \ - (o)->pos > (o)->top ? \ + (o)->op->pos > (o)->op->top ? \ ( \ - (o)->top = (o)->pos, \ + (o)->op->top = (o)->op->pos, \ 0 \ ) : \ 0 \ @@ -154,6 +161,7 @@ struct Odr_private { /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab