X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=contrib%2Flar%2Flar.h;fp=contrib%2Flar%2Flar.h;h=a4379f1eb9b0fa18d36167e8398013d126e586b3;hb=36a9415469571fa972b6ff9004401aee393d28ad;hp=0000000000000000000000000000000000000000;hpb=1c383dc244323f5c168ee16824cb5788fefc3667;p=project%2Fluci.git diff --git a/contrib/lar/lar.h b/contrib/lar/lar.h new file mode 100644 index 0000000000..a4379f1eb9 --- /dev/null +++ b/contrib/lar/lar.h @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +int errno; + +#define LAR_DIE(s) \ + do { \ + fprintf(stderr, "%s(%i): %s(): %s\n", \ + __FILE__, __LINE__, __FUNCTION__, s); \ + if( errno ) fprintf(stderr, "%s(%i): %s\n", \ + __FILE__, __LINE__, strerror(errno) ); \ + exit(1); \ + } while(0) + + +#define LAR_FNAME_BUFFER 1024 +#define LAR_FNAME(s) char s[LAR_FNAME_BUFFER] + + +struct lar_index_item { + uint32_t noffset; + uint32_t nlength; + uint32_t foffset; + uint32_t flength; + uint16_t type; + uint16_t flags; + struct lar_index_item *next; +}; + +struct lar_member_item { + uint16_t type; + uint16_t flags; + uint32_t length; + char *data; + char *mmap; + size_t mlen; +}; + +struct lar_archive_handle { + int fd; + off_t length; + char filename[LAR_FNAME_BUFFER]; + struct lar_index_item *index; +}; + +typedef struct lar_index_item lar_index; +typedef struct lar_member_item lar_member; +typedef struct lar_archive_handle lar_archive; + + +int lar_read32( int fd, uint32_t *val ); +int lar_read16( int fd, uint16_t *val ); + +lar_index * lar_get_index( lar_archive *ar ); + +uint32_t lar_get_filename( lar_archive *ar, + lar_index *idx_ptr, char *filename ); + +lar_member * lar_open_member( lar_archive *ar, const char *name ); + +int lar_close_member( lar_member *member ); + +lar_archive * lar_open( const char *filename ); + +int lar_close( lar_archive *ar ); + +