whitespace and include guards
2002/07/11 13:18:11-00:00 !flatcap start to break up the dependency loops in the header files 2002/07/02 23:47:10-00:00 !antona Global replacement of __[su]{8,16,32,64} with [su]{8,16,32,64} and layout.h define it. 2002/06/01 00:41:45-00:00 !antona huge update! 2002/04/27 19:49:09-00:00 !antona Update library, new APIs ntfs_attr_find_vcn(), misc fixes and cleanups, make all the utilities compile, fix bugs I noticed in ntfslabel and it now works properly. 2002/04/20 23:09:42-00:00 !antona Port attribute lookup functions with attribute list support from ntfs tng driver. Port/reimplement extent mft record handling code as well. Rename out all dollar signs from type names and constants. Adapt all callers to new API. Note mkntfs is currently broken due to some needed work. 2002/04/20 01:53:02-00:00 !antona Rename mft code adding ntfs_ prefix. Change all return values to zero on success. Thanks to mattjf for pointing out the inconsistencies. 2002/04/16 12:13:53-00:00 !antona New API function mft.[ch]::read_file_record(). Also some cleanups. 2002/04/15 20:04:25-00:00 !antona Fix all compiler warnings that came up with -Wall. Enabled -Wall for ./configure --enable-debug everywhere. Fix a few bugs in mkntfs that came up in the warnings (just error code paths, nothing major). 2002/04/15 17:51:26-00:00 !antona read/write_mft_record(s) are here 2002/04/15 00:45:28-00:00 !antona Update headers to reflect changes in libntfs. 2002/04/14 13:56:45-00:00 !antona cleanup header files. 2002/04/14 13:34:50-00:00 !antona Throw away all unnecessary crap. 2001/12/15 05:13:08-00:00 !antona Remove atomic ops and add compiler version check. 2001/06/01 02:07:24-00:00 !antona It has been a long time since last commit. At moment have done a lot of work on mkntfs but also at the moment ntfsfix and ntfsdump_logfile and libntfs are broken. Basically only mkntfs works and that is not complete either. 2001/04/11 14:29:11-00:00 !antona Almost fixed compilaton. Remember to declare a struct type with struct NAME { declaration }; rather than the bogus struct { declaration NAME }; then can use typedef NAME othername; on a forward declaration of NAME (struct NAME;) and all is fine... 2001/04/11 11:49:16-00:00 !antona Header file reorganisation so that it compiles. 2001/04/10 23:54:25-00:00 !antona Fixed somethings... 2001/04/10 23:37:19-00:00 !antona Ok, ntfsd was a mistake for userspace. It increases complexity no end while not giving us much functionality. Lets get it working and then worry about the kernel. - As it was the idea originally anyway, so this is just a return on the right track. (-8 We keep the timer and signal handler but the only thing we do is to set a bool flag (ntfs_need_sync) and we will just check this in appropriate places and if it is true we call ntfs_sync_volumes() which sets it back to false. This means no more locking at all of any description and no need to worry about the signal handler interrupting things in bad ways and/or at bad times in the main code. 2001/04/10 22:20:19-00:00 !antona Ok, ntfsd was a mistake for userspace. It increases complexity no end while not giving us much functionality. Lets get it working and then worry about the kernel. - As it was the idea originally anyway, so this is just a return on the right track. (-8 We keep the timer and signal handler but the only thing we do is to set a bool flag (ntfs_need_sync) and we will just check this in appropriate places and if it is true we call ntfs_sync_volumes() which sets it back to false. This means no more locking at all of any description and no need to worry about the signal handler interrupting things in bad ways and/or at bad times in the main code. 2001/04/09 00:05:37-00:00 !antona More or less finished file handling. (Probably some useful functions are still missing but they will be implemented as need arises.) One thing that is stupid at the moment is we don't limit the amount of cached mft_records so if you were to load loads the machine would eventually run out of memory... Can't happen with files as they are limited to 1000, unless you are short of memory. (Hard limit at the moment, set in ntfs_mount(). Maybe ntfsd should be monitoring memory usage and be throwing out unused cache entries and closed_files? That would mean to have locking everywhere, though.) Still missing: - Convert old code to use new stuff. - Add non-resident attributes somewhere. Either into the mft_entry structure or into the ntfs_file structure, but which? At the moment I tend to mft_entry so they can be synced together with the entries by ntfsd. 2001/04/08 01:58:29-00:00 !antona User space conversion of locking complete. I settled for using simple spinlocks and atomic variables and instead of deadlocking/livelocking when using spin_lock(), use spin_trylock() in a while letting go of the cpu between each call and making a maximum of 100 iterations (or we return EDEADLK error code). This is not the most efficient way, especially as can't have multiple readers but it is the simplest way to go about things. Should now have (almost) all required helper functions for dealing with mft entries implemented. Now need the file handling and then convert the whole project to use the new code and then can finally get back to work on attribute searching... 2001/04/05 20:14:45-00:00 !antona Commit of current state of development including locking a la kernel. This doesn't work on user space (semaphores don't work). Just want to have it committed. Will take out locking / modify it where necessary to use pthreads ASAP. 2001/04/03 23:38:54-00:00 !antona Minor fix 2001/04/03 23:35:52-00:00 !antona Few updates. 2001/04/03 22:41:30-00:00 !antona We now have files and keep track of them on a per volume basis and same for inodes (mft_records). At least conceptually anyway. 2001/04/02 02:04:37-00:00 !antona Everything compiles again! Yey! (Don't know about working though, haven't tried it... So be careful...) The definitely final find_{first_}attr() functions are in place. Currently still no support for attribute lists. The two new _RE files contain the C-fied and more or less (more less than more actually) cleaned up functions from the ntfs driver. Once they are cleaned up (find_attr() is already completed but I left it in the _RE files for future reference/educational value) and modified to suit my ideas of how they should work, which are not quite the same as the driver way, they will make it into attrib.[ch]. If anyone gives the new code a try, I would be interested in whether it worked or not... (-; 2001/03/31 15:25:19-00:00 !antona Added a name comparison function. 2001/03/15 23:13:11-00:00 !antona And this one... 2001/03/05 03:15:08-00:00 !antona Forgot a few... 2001/03/05 02:45:35-00:00 !antona Renamed things, broke everything. Should be stabilized now in the headers. Still reworking find attribute stuff but at least I have an idea of how I want to do it now. 2001/03/02 15:03:56-00:00 !antona Update to latest include files. 2001/01/30 12:55:21-00:00 !antona Fixed the compilation issues. 2001/01/30 12:29:03-00:00 !antona And the last move into CVS. The make files. (Note: compilation is untested and all changes have been done without testing so if it doesn't compile at the moment don't be too surprised.) 2001/01/28 05:49:57-00:00 !antona More header development. AttrDef description. 2001/01/27 14:22:02-00:00 !antona Added a logfile dumper as a new utility. Almost finished the first ntfsfix release. (Still missingin CVS are attrib.c for ntfslib and the makefiles to build everything.) Fixes for nested packed structure/union typedefs as gcc doesn't automatically nest the __attribute__ ((__packed__)), even though according to the gcc info page it does. (Thanks to Yuri Per <yuri@acronis.com> for pointing this out.) 2001/01/24 02:13:24-00:00 !antona Add a bunch of headers (attrib.h is work in progress). (Logical change 1.5)edge.strict_endians
parent
481eac5ebf
commit
92b27033b0
106
include/mft.h
106
include/mft.h
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* $Id$
|
||||
*
|
||||
* mft.h - Exports for MFT record handling. Part of the Linux-NTFS project.
|
||||
*
|
||||
* Copyright (c) 2000-2002 Anton Altaparmakov.
|
||||
*
|
||||
* This program/include file 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; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program/include file is distributed in the hope that it will be
|
||||
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program (in the main directory of the Linux-NTFS
|
||||
* distribution in the file COPYING); if not, write to the Free Software
|
||||
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _NTFS_MFT_H
|
||||
#define _NTFS_MFT_H
|
||||
|
||||
#include "volume.h"
|
||||
#include "layout.h"
|
||||
|
||||
extern int ntfs_read_mft_records(const ntfs_volume *vol, const MFT_REF mref,
|
||||
const s64 count, MFT_RECORD *b);
|
||||
|
||||
/**
|
||||
* ntfs_read_mft_record - read a record from the mft
|
||||
* @vol: volume to read from
|
||||
* @mref: mft record number to read
|
||||
* @b: output data buffer
|
||||
*
|
||||
* Read the mft record specified by @mref from volume @vol into buffer @b.
|
||||
* Return 0 on success or -1 on error, with errno set to the error code.
|
||||
*
|
||||
* The read mft record is mst deprotected and is hence ready to use. The caller
|
||||
* should check the record with is_baad_record() in case mst deprotection
|
||||
* failed.
|
||||
*
|
||||
* NOTE: @b has to be at least of size vol->mft_record_size.
|
||||
*/
|
||||
static __inline__ int ntfs_read_mft_record(const ntfs_volume *vol,
|
||||
const MFT_REF mref, MFT_RECORD *b)
|
||||
{
|
||||
return ntfs_read_mft_records(vol, mref, 1, b);
|
||||
}
|
||||
|
||||
extern int ntfs_read_file_record(const ntfs_volume *vol, const MFT_REF mref,
|
||||
MFT_RECORD **mrec, ATTR_RECORD **attr);
|
||||
|
||||
extern int ntfs_write_mft_records(const ntfs_volume *vol, const MFT_REF mref,
|
||||
const s64 count, MFT_RECORD *b);
|
||||
|
||||
/**
|
||||
* ntfs_write_mft_record - write an mft record to disk
|
||||
* @vol: volume to write to
|
||||
* @mref: mft record number to write
|
||||
* @b: data buffer containing the mft record to write
|
||||
*
|
||||
* Write the mft record specified by @mref from buffer @b to volume @vol.
|
||||
* Return 0 on success or -1 on error, with errno set to the error code.
|
||||
*
|
||||
* Before the mft record is written, it is mst protected. After the write, it
|
||||
* is deprotected again, thus resulting in an increase in the update sequence
|
||||
* number inside the buffer @b.
|
||||
*
|
||||
* NOTE: @b has to be at least of size vol->mft_record_size.
|
||||
*/
|
||||
static __inline__ int ntfs_write_mft_record(const ntfs_volume *vol,
|
||||
const MFT_REF mref, MFT_RECORD *b)
|
||||
{
|
||||
return ntfs_write_mft_records(vol, mref, 1, b);
|
||||
}
|
||||
|
||||
/**
|
||||
* ntfs_get_mft_record_data_size - return number of bytes used in mft record @b
|
||||
* @m: mft record to get the data size of
|
||||
*
|
||||
* Takes the mft record @m and returns the number of bytes used in the record
|
||||
* or 0 on error (i.e. @m is not a valid mft record). Zero is not a valid size
|
||||
* for an mft record as it at least has to have the MFT_RECORD, thus making the
|
||||
* minimum size:
|
||||
* (sizeof(MFT_RECORD) + 7) & ~7 + sizeof(ATTR_TYPES) = 52 bytes
|
||||
* Aside: The 8-byte alignment and the 4 bytes for the attribute type are needed
|
||||
* as each mft record has to have a list of attributes even if it only contains
|
||||
* the attribute $END which doesn't contain anything else apart from its type.
|
||||
* Also, you would expect every mft record to contain an update sequence array
|
||||
* as well but that could in theory be non-existent (don't know if Windows'
|
||||
* NTFS driver/chkdsk wouldn't view this as corruption in itself though).
|
||||
*/
|
||||
static __inline__ u32 ntfs_get_mft_record_data_size(const MFT_RECORD *m)
|
||||
{
|
||||
if (!m || !is_mft_record(m->magic))
|
||||
return 0;
|
||||
/* Get the number of used bytes and return it. */
|
||||
return le32_to_cpu(m->bytes_in_use);
|
||||
}
|
||||
|
||||
#endif /* defined _NTFS_MFT_H */
|
||||
|
Loading…
Reference in New Issue