/* ----------------------------------------------------------------------- * * * Copyright 2004-2008 H. Peter Anvin - All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, Inc., 53 Temple Place Ste 330, * Boston MA 02111-1307, USA; either version 2 of the License, or * (at your option) any later version; incorporated herein by reference. * * ----------------------------------------------------------------------- */ /* * libfat.h * * Headers for the libfat library */ #ifndef LIBFAT_H #define LIBFAT_H #include #include #define LIBFAT_SECTOR_SHIFT 9 #define LIBFAT_SECTOR_SIZE 512 #define LIBFAT_SECTOR_MASK 511 typedef uint64_t libfat_sector_t; struct libfat_filesystem; struct libfat_direntry { libfat_sector_t sector; int offset; unsigned char entry[32]; }; /* * Open the filesystem. The readfunc is the function to read * sectors, in the format: * int readfunc(intptr_t readptr, void *buf, size_t secsize, * libfat_sector_t secno) * * ... where readptr is a private argument. * * A return value of != secsize is treated as error. */ struct libfat_filesystem *libfat_open(int (*readfunc) (intptr_t, void *, size_t, libfat_sector_t), intptr_t readptr); void libfat_close(struct libfat_filesystem *); /* * Convert a cluster number (or 0 for the root directory) to a * sector number. Return -1 on failure. */ libfat_sector_t libfat_clustertosector(const struct libfat_filesystem *fs, int32_t cluster); /* * Get the next sector of either the root directory or a FAT chain. * Returns 0 on end of file and -1 on error. */ libfat_sector_t libfat_nextsector(struct libfat_filesystem *fs, libfat_sector_t s); /* * Flush all cached sectors for this filesystem. */ void libfat_flush(struct libfat_filesystem *fs); /* * Get a pointer to a specific sector. */ void *libfat_get_sector(struct libfat_filesystem *fs, libfat_sector_t n); /* * Search a FAT directory for a particular pre-mangled filename. * Copies the directory entry into direntry and returns 0 if found. */ int32_t libfat_searchdir(struct libfat_filesystem *fs, int32_t dirclust, const void *name, struct libfat_direntry *direntry); #endif /* LIBFAT_H */