#ifndef COMMON_H #define COMMON_H #include #include #include #include #include #ifdef WIN32 #define fseeko fseeko64 #define ftello ftello64 #define off_t off64_t #define mkdir(x, y) mkdir(x) #define PATH_SEPARATOR "\\" #else #define PATH_SEPARATOR "/" #endif #define TRUE 1 #define FALSE 0 #define FLIPENDIAN(x) flipEndian((unsigned char *)(&(x)), sizeof(x)) #define FLIPENDIANLE(x) flipEndianLE((unsigned char *)(&(x)), sizeof(x)) #define IS_BIG_ENDIAN 0 #define IS_LITTLE_ENDIAN 1 #define TIME_OFFSET_FROM_UNIX 2082844800L #define APPLE_TO_UNIX_TIME(x) ((x) - TIME_OFFSET_FROM_UNIX) #define UNIX_TO_APPLE_TIME(x) ((x) + TIME_OFFSET_FROM_UNIX) #define ASSERT(x, m) if(!(x)) { fflush(stdout); fprintf(stderr, "error: %s\n", m); perror("error"); fflush(stderr); exit(1); } extern char endianness; static inline void flipEndian(unsigned char* x, int length) { int i; unsigned char tmp; if(endianness == IS_BIG_ENDIAN) { return; } else { for(i = 0; i < (length / 2); i++) { tmp = x[i]; x[i] = x[length - i - 1]; x[length - i - 1] = tmp; } } } static inline void flipEndianLE(unsigned char* x, int length) { int i; unsigned char tmp; if(endianness == IS_LITTLE_ENDIAN) { return; } else { for(i = 0; i < (length / 2); i++) { tmp = x[i]; x[i] = x[length - i - 1]; x[length - i - 1] = tmp; } } } static inline void hexToBytes(const char* hex, uint8_t** buffer, size_t* bytes) { *bytes = strlen(hex) / 2; *buffer = (uint8_t*) malloc(*bytes); size_t i; for(i = 0; i < *bytes; i++) { uint32_t byte; sscanf(hex, "%2x", &byte); (*buffer)[i] = byte; hex += 2; } } static inline void hexToInts(const char* hex, unsigned int** buffer, size_t* bytes) { *bytes = strlen(hex) / 2; *buffer = (unsigned int*) malloc((*bytes) * sizeof(int)); size_t i; for(i = 0; i < *bytes; i++) { sscanf(hex, "%2x", &((*buffer)[i])); hex += 2; } } struct io_func_struct; typedef int (*readFunc)(struct io_func_struct* io, off_t location, size_t size, void *buffer); typedef int (*writeFunc)(struct io_func_struct* io, off_t location, size_t size, void *buffer); typedef void (*closeFunc)(struct io_func_struct* io); typedef struct io_func_struct { void* data; readFunc read; writeFunc write; closeFunc close; } io_func; struct AbstractFile; unsigned char* decodeBase64(char* toDecode, size_t* dataLength); void writeBase64(struct AbstractFile* file, unsigned char* data, size_t dataLength, int tabLength, int width); char* convertBase64(unsigned char* data, size_t dataLength, int tabLength, int width); #endif