/******************************* LICENCE ************************************** * Any code in this file may be redistributed or modified under the terms of * the GNU General Public Licence as published by the Free Software * Foundation; version 2 of the licence. ****************************** END LICENCE ***********************************/ /****************************************************************************** * Author: * Andrew Smith, http://littlesvr.ca/misc/contactandrew.php * * Contributors: * ******************************************************************************/ /********************************* PURPOSE ************************************ * bkInternal.h * This header file is for #defines and structures only used by bkisofs ******************************** END PURPOSE *********************************/ #ifndef bkInternal_h #define bkInternal_h #include "bk.h" /* number of logical sectors in system area (in practice always 16) */ #define NLS_SYSTEM_AREA 16 /* number of bytes in a logical block (in practice always 2048) */ #define NBYTES_LOGICAL_BLOCK 2048 /******************************************************************************* * Joliet allows max 128 bytes * + 2 separator1 (9660, just in case) * + 2 separator2 (9660, just in case) * + 10 version (9660, just in case) * = 142 bytes (71 characters) * Only a max of 64 characters of this will be stored. (plus '\0') */ #define NCHARS_FILE_ID_MAX_JOLIET 65 #define NBYTES_FILE_ID_MAX_9660 15 /* 8.3 + ";1" */ #define BASETW_PTR(item) ((BaseToWrite*)(item)) #define DIRTW_PTR(item) ((DirToWrite*)(item)) #define FILETW_PTR(item) ((FileToWrite*)(item)) #define SYMLINKTW_PTR(item) ((SymLinkToWrite*)(item)) #define WRITE_CACHE_SIZE 1048576 typedef struct { unsigned numChildren; char** children; } NewPath; typedef struct BaseToWrite { char name9660[NBYTES_FILE_ID_MAX_9660]; /* 8.3 + ";1" max */ char nameRock[NCHARS_FILE_ID_MAX_STORE]; char nameJoliet[NCHARS_FILE_ID_MAX_JOLIET]; unsigned posixFileMode; bk_off_t extentLocationOffset; /* where on image to write location of extent */ unsigned extentNumber; /* extent number */ bk_off_t extentLocationOffset2; /* for svd (joliet) */ bk_off_t offsetForCE; /* if the name won't fit inside the directory record */ struct BaseToWrite* next; } BaseToWrite; typedef struct DirToWrite { BaseToWrite base; unsigned extentNumber2; /* for svd (joliet) */ unsigned dataLength; /* bytes, including blank */ unsigned dataLength2; /* for svd (joliet) */ struct BaseToWrite* children; } DirToWrite; typedef struct FileToWrite { BaseToWrite base; unsigned size; /* in bytes */ BkHardLink* location; /* basically a copy of the following variables */ bool onImage; unsigned offset; /* if on image, in bytes */ char* pathAndName; /* if on filesystem, full path + filename * is to be freed by whenever the File is freed */ BkFile* origFile; /* this pointer only has one purpose: to potentially * identify this file as the boot record. it will never * be dereferenced, just compared to. */ } FileToWrite; typedef struct SymLinkToWrite { BaseToWrite base; char target[NCHARS_SYMLINK_TARGET_MAX]; } SymLinkToWrite; #endif