1997-04-30 00:15:03 +08:00
|
|
|
|
\input texinfo @c -*-texinfo-*-
|
|
|
|
|
@c %**start of header
|
|
|
|
|
@setfilename libext2fs.info
|
1999-07-19 23:43:58 +08:00
|
|
|
|
@settitle The EXT2FS Library (version 1.15)
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@synindex tp fn
|
|
|
|
|
@comment %**end of header
|
|
|
|
|
|
|
|
|
|
@ifinfo
|
|
|
|
|
@format
|
|
|
|
|
START-INFO-DIR-ENTRY
|
|
|
|
|
* libext2fs: (libext2fs.info). The EXT2FS library.
|
|
|
|
|
END-INFO-DIR-ENTRY
|
|
|
|
|
@end format
|
|
|
|
|
@end ifinfo
|
|
|
|
|
|
|
|
|
|
@c smallbook
|
|
|
|
|
|
|
|
|
|
@iftex
|
|
|
|
|
@finalout
|
|
|
|
|
@end iftex
|
|
|
|
|
|
|
|
|
|
@c Note: the edition number is listed in *three* places; please update
|
|
|
|
|
@c all three. Also, update the month and year where appropriate.
|
|
|
|
|
|
|
|
|
|
@c ==> Update edition number for settitle and subtitle, and in the
|
|
|
|
|
@c ==> following paragraph; update date, too.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ifinfo
|
|
|
|
|
This file documents the ext2fs library, a library for manipulating the
|
|
|
|
|
ext2 filesystem.
|
|
|
|
|
|
1998-07-06 03:37:53 +08:00
|
|
|
|
Copyright (C) 1997, 1998 Theodore Ts'o
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
Permission is granted to make and distribute verbatim copies of
|
|
|
|
|
this manual provided the copyright notice and this permission notice
|
|
|
|
|
are preserved on all copies.
|
|
|
|
|
|
|
|
|
|
@ignore
|
|
|
|
|
Permission is granted to process this file through TeX and print the
|
|
|
|
|
results, provided the printed document carries copying permission
|
|
|
|
|
notice identical to this one except for the removal of this paragraph
|
|
|
|
|
(this paragraph not being relevant to the printed manual).
|
|
|
|
|
|
|
|
|
|
@end ignore
|
|
|
|
|
Permission is granted to copy and distribute modified versions of this
|
|
|
|
|
manual under the conditions for verbatim copying, provided that the entire
|
|
|
|
|
resulting derived work is distributed under the terms of a permission
|
|
|
|
|
notice identical to this one.
|
|
|
|
|
|
|
|
|
|
Permission is granted to copy and distribute translations of this manual
|
|
|
|
|
into another language, under the above conditions for modified versions,
|
|
|
|
|
except that this permission notice may be stated in a translation approved
|
|
|
|
|
by the author.
|
|
|
|
|
@end ifinfo
|
|
|
|
|
|
|
|
|
|
@setchapternewpage on
|
|
|
|
|
@titlepage
|
|
|
|
|
@c use the new format for titles
|
|
|
|
|
|
|
|
|
|
@title The EXT2FS Library
|
|
|
|
|
@subtitle The EXT2FS Library
|
1999-07-19 23:43:58 +08:00
|
|
|
|
@subtitle Version 1.15
|
|
|
|
|
@subtitle July 1999
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
@author by Theodore Ts'o
|
|
|
|
|
|
|
|
|
|
@c Include the Distribution inside the titlepage so
|
|
|
|
|
@c that headings are turned off.
|
|
|
|
|
|
|
|
|
|
@tex
|
|
|
|
|
\global\parindent=0pt
|
|
|
|
|
\global\parskip=8pt
|
|
|
|
|
\global\baselineskip=13pt
|
|
|
|
|
@end tex
|
|
|
|
|
|
|
|
|
|
@page
|
|
|
|
|
@vskip 0pt plus 1filll
|
1998-07-06 03:37:53 +08:00
|
|
|
|
Copyright @copyright{} 1997, 1998 Theodore Ts'o
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
@sp 2
|
|
|
|
|
|
|
|
|
|
Permission is granted to make and distribute verbatim copies of
|
|
|
|
|
this manual provided the copyright notice and this permission notice
|
|
|
|
|
are preserved on all copies.
|
|
|
|
|
|
|
|
|
|
Permission is granted to copy and distribute modified versions of this
|
|
|
|
|
manual under the conditions for verbatim copying, provided that the entire
|
|
|
|
|
resulting derived work is distributed under the terms of a permission
|
|
|
|
|
notice identical to this one.
|
|
|
|
|
|
|
|
|
|
Permission is granted to copy and distribute translations of this manual
|
|
|
|
|
into another language, under the above conditions for modified versions,
|
|
|
|
|
except that this permission notice may be stated in a translation approved
|
|
|
|
|
by the Foundation.
|
|
|
|
|
@end titlepage
|
|
|
|
|
@headings double
|
|
|
|
|
|
|
|
|
|
@ifinfo
|
|
|
|
|
@node Top, Introduction to the EXT2FS Library, (dir), (dir)
|
|
|
|
|
|
|
|
|
|
@top The EXT2FS Library
|
|
|
|
|
|
1999-07-19 23:43:58 +08:00
|
|
|
|
This manual documents the EXT2FS Library, version 1.15.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
@end ifinfo
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Introduction to the EXT2FS Library::
|
|
|
|
|
* EXT2FS Library Functions::
|
|
|
|
|
* Concept Index::
|
|
|
|
|
* Function Index::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Introduction to the EXT2FS Library, EXT2FS Library Functions, Top, Top
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@chapter Introduction to the EXT2FS Library
|
|
|
|
|
|
|
|
|
|
The EXT2FS library is designed to allow user-level programs to
|
|
|
|
|
manipulate an ext2 filesystem.
|
|
|
|
|
|
|
|
|
|
@node EXT2FS Library Functions, Concept Index, Introduction to the EXT2FS Library, Top
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@chapter EXT2FS Library Functions
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Filesystem-level functions::
|
|
|
|
|
* Inode Functions::
|
|
|
|
|
* Directory functions::
|
|
|
|
|
* Bitmap Functions::
|
1997-04-30 01:48:10 +08:00
|
|
|
|
* EXT2 data abstractions::
|
1997-04-30 00:15:03 +08:00
|
|
|
|
* Byte-swapping functions::
|
|
|
|
|
* Other functions::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Filesystem-level functions, Inode Functions, EXT2FS Library Functions, EXT2FS Library Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section Filesystem-level functions
|
|
|
|
|
|
|
|
|
|
The following functions operate on a filesystem handle. Most EXT2FS
|
|
|
|
|
Library functions require a filesystem handle as their first argument.
|
|
|
|
|
There are two functions which create a filesystem handle,
|
|
|
|
|
@code{ext2fs_open} and @code{ext2fs_initialize}.
|
|
|
|
|
|
|
|
|
|
The filesystem can also be closed using @code{ext2fs_close}, and any
|
|
|
|
|
changes to the superblock and group descripts can be written out to disk
|
|
|
|
|
using @code{ext2fs_flush}.
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Opening an ext2 filesystem::
|
|
|
|
|
* Closing and flushing out changes::
|
|
|
|
|
* Initializing a filesystem::
|
|
|
|
|
* Filesystem flag functions::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Opening an ext2 filesystem, Closing and flushing out changes, Filesystem-level functions, Filesystem-level functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Opening an ext2 filesystem
|
|
|
|
|
|
|
|
|
|
Most libext2fs functions take a filesystem handle of type
|
|
|
|
|
@code{ext2_filsys}. A filesystem handle is created either by opening
|
|
|
|
|
an existing function using @code{ext2fs_open}, or by initializing a new
|
|
|
|
|
filesystem using @code{ext2fs_initialize}.
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_open (const char *@var{name}, int @var{flags}, int @var{superblock}, int @var{block_size}, io_manager @var{manager}, ext2_filsys *@var{ret_fs})
|
|
|
|
|
|
|
|
|
|
Opens a filesystem named @var{name}, using the the io_manager
|
|
|
|
|
@var{manager} to define the input/output routines needed to read and
|
|
|
|
|
write the filesystem. In the case of the @code{unix_io} io_manager,
|
|
|
|
|
@var{name} is interpreted as the Unix filename of the filesystem image.
|
|
|
|
|
This is often a device file, such as @file{/dev/hda1}.
|
|
|
|
|
|
|
|
|
|
The @var{superblock} parameter specifies the block number of the
|
|
|
|
|
superblock which should be used when opening the filesystem.
|
|
|
|
|
If @var{superblock} is zero, @code{ext2fs_open} will use the primary
|
|
|
|
|
superblock located at offset 1024 bytes from the start of the filesystem
|
|
|
|
|
image.
|
|
|
|
|
|
|
|
|
|
The @var{block_size} parameter specifies the block size used by the
|
|
|
|
|
filesystem. Normally this is determined automatically from the
|
|
|
|
|
filesystem uperblock. If @var{block_size} is non-zero, it must match
|
|
|
|
|
the block size found in the superblock, or the error
|
|
|
|
|
@code{EXT2_ET_UNEXPECTED_BLOCK_SIZE} will be returned. The
|
|
|
|
|
@var{block_size} parameter is also used to help fund the superblock when
|
|
|
|
|
@var{superblock} is non-zero.
|
|
|
|
|
|
|
|
|
|
The @var{flags} argument contains a bitmask of flags which control how
|
|
|
|
|
the filesystem open should be handled.
|
|
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
|
@item EXT2_FLAG_RW
|
|
|
|
|
Open the filesystem for reading and writing. Without this flag, the
|
|
|
|
|
filesystem is opened for reading only.
|
|
|
|
|
|
|
|
|
|
@item EXT2_FLAG_FORCE
|
|
|
|
|
Open the filesystem regardless of the feature sets listed in the
|
|
|
|
|
superblock.
|
|
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Closing and flushing out changes, Initializing a filesystem, Opening an ext2 filesystem, Filesystem-level functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Closing and flushing out changes
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_flush (ext2_filsys @var{fs})
|
|
|
|
|
|
|
|
|
|
Write any changes to the high-level filesystem data structures in the
|
|
|
|
|
@var{fs} filesystem. The following data structures will be written out:
|
|
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
|
@item The filesystem superblock
|
|
|
|
|
@item The filesystem group descriptors
|
|
|
|
|
@item The filesystem bitmaps, if read in via @code{ext2fs_read_bitmaps}.
|
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_free (ext2_filsys @var{fs})
|
|
|
|
|
|
|
|
|
|
Close the io_manager abstraction for @var{fs} and release all memory
|
|
|
|
|
associated with the filesystem handle.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_close (ext2_filsys @var{fs})
|
|
|
|
|
|
|
|
|
|
Flush out any changes to the high-level filesystem data structures using
|
|
|
|
|
@code{ext2fs_flush} if the filesystem is marked dirty; then close and
|
|
|
|
|
free the filesystem using @code{ext2fs_free}.
|
|
|
|
|
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Initializing a filesystem, Filesystem flag functions, Closing and flushing out changes, Filesystem-level functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Initializing a filesystem
|
|
|
|
|
|
|
|
|
|
An ext2 filesystem is initializing by the @code{mke2fs} program. The
|
|
|
|
|
two functions described here, @code{ext2fs_initialize} and
|
|
|
|
|
@code{ext2fs_allocate_tables} do much of the initial work for setting up
|
|
|
|
|
a filesystem. However, they don't do the whole job. @code{mke2fs}
|
|
|
|
|
calls @code{ext2fs_initialize} to set up the filesystem superblock, and
|
|
|
|
|
calls @code{ext2fs_allocate_tables} to allocate space for the inode
|
|
|
|
|
table, and the inode and block bitmaps. In addition, @code{mke2fs} must
|
|
|
|
|
also initialize the inode tables by clearing them with zeros, create the
|
|
|
|
|
root and lost+found directories, and reserve the reserved inodes.
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_initialize (const char *@var{name}, int @var{flags}, struct ext2_super_block *@var{param}, io_manager @var{manager}, ext2_filsys *@var{ret_fs})
|
|
|
|
|
|
|
|
|
|
This function is used by the @code{mke2fs} program to initialize a
|
|
|
|
|
filesystem. The @code{ext2fs_initialize} function creates a filesystem
|
|
|
|
|
handle which is returned in @var{ret_fs} that has been properly setup
|
|
|
|
|
for a filesystem to be located in @var{name}, using the io_manager
|
|
|
|
|
@var{manager}. The prototype superblock in @var{param} is used to
|
|
|
|
|
supply parameters such as the number of blocks in the filesystem, the
|
|
|
|
|
block size, etc.
|
|
|
|
|
|
|
|
|
|
The @code{ext2fs_initialize} function does not actually do any I/O; that
|
|
|
|
|
will be done when the application program calls @code{ext2fs_close} or
|
|
|
|
|
@code{ext2fs_flush}. Also, this function only initializes the
|
|
|
|
|
superblock and group descriptor structures. It does not create the
|
|
|
|
|
inode table or the root directory. This must be done by the calling
|
|
|
|
|
application, such as @code{mke2fs}.
|
|
|
|
|
|
|
|
|
|
The following values may be set in the @var{param} prototype superblock;
|
|
|
|
|
if a value of 0 is found in a field, @code{ext2fs_initialize} will use a
|
|
|
|
|
default value. The calling application should zero out the prototype
|
|
|
|
|
entire superblock, and then fill in any appropriate values.
|
|
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
|
|
|
|
|
|
@item s_blocks_count
|
|
|
|
|
The number of blocks in the filesystem. This parameter is mandatory and
|
|
|
|
|
must be set by the calling application.
|
|
|
|
|
|
|
|
|
|
@item s_inodes_count
|
|
|
|
|
The number of inodes in the filesystem. The
|
|
|
|
|
default value is determined by calculating the size of the filesystem,
|
|
|
|
|
and creating one inode for every 4096 bytes.
|
|
|
|
|
|
|
|
|
|
@item s_r_blocks_count
|
|
|
|
|
The number of blocks which should be reserved for the superuser. The
|
|
|
|
|
default value is zero blocks.
|
|
|
|
|
|
|
|
|
|
@item s_log_block_size
|
|
|
|
|
The blocksize of the filesystem. Valid values are 0 (1024 bytes), 1
|
|
|
|
|
(2048 bytes), or 2 (4096 bytes). The default blocksize is 1024 bytes.
|
|
|
|
|
|
|
|
|
|
@item s_log_frag_size
|
|
|
|
|
The size of fragments. The ext2 filesystem does not support fragments
|
|
|
|
|
(and may never support fragments). Currently this field must be the
|
|
|
|
|
same as @code{s_log_block_size}.
|
|
|
|
|
|
|
|
|
|
@item s_first_data_block
|
|
|
|
|
The first data block for the filesystem. For filesystem with a
|
|
|
|
|
blocksize of 1024 bytes, this value must be at least 1, since the
|
|
|
|
|
superblock is located in block number 1. For filesystems with larger
|
|
|
|
|
blocksizes, the superblock is still located at an offset of 1024 bytes,
|
|
|
|
|
so the superblock is located in block number 0. By default, this value
|
|
|
|
|
is set to 1 for filesystems with a block size of 1024 bytes, or 0 for
|
|
|
|
|
filesystems with larger blocksizes.
|
|
|
|
|
|
|
|
|
|
@item s_max_mnt_count
|
|
|
|
|
This field defines the number of times that the filesystem can be
|
|
|
|
|
mounted before it should be checked using @code{e2fsck}. When
|
|
|
|
|
@code{e2fsck} is run without the @samp{-f} option, @code{e2fsck} will
|
|
|
|
|
skip the filesystem check if the number of times that the filesystem has
|
|
|
|
|
been mounted is less than @code{s_max_mnt_count} and if the interval
|
|
|
|
|
between the last time a filesystem check was performed and the current
|
|
|
|
|
time is less than @code{s_checkinterval} (see below). The default value
|
|
|
|
|
of @code{s_max_mnt_count} is 20.
|
|
|
|
|
|
|
|
|
|
@item s_checkinterval
|
|
|
|
|
This field defines the minimal interval between filesystem checks. See
|
|
|
|
|
the previous entry for a discussion of how this field is used by
|
|
|
|
|
@code{e2fsck}. The default value of this field is 180 days (six
|
|
|
|
|
months).
|
|
|
|
|
|
|
|
|
|
@item s_errors
|
|
|
|
|
This field defines the behavior which should be used by the kernel of
|
|
|
|
|
errors are detected in the filesystem. Possible values include:
|
|
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
|
@item EXT2_ERRORS_CONTINUE
|
|
|
|
|
Continue execution when errors are detected.
|
|
|
|
|
|
|
|
|
|
@item EXT2_ERRORS_RO
|
|
|
|
|
Remount the filesystem read-only.
|
|
|
|
|
|
|
|
|
|
@item EXT2_ERRORS_PANIC
|
|
|
|
|
Panic.
|
|
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
|
|
The default behavior is @samp{EXT2_ERRORS_CONTINUE}.
|
|
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_allocate_tables (ext2_filsys @var{fs})
|
|
|
|
|
Allocate space for the inode table and the block and inode bitmaps. The
|
|
|
|
|
inode tables and block and inode bitmaps aren't actually initialized;
|
|
|
|
|
this function just allocates the space for them.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Filesystem flag functions, , Initializing a filesystem, Filesystem-level functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Filesystem flag functions
|
|
|
|
|
|
|
|
|
|
The filesystem handle has a number of flags which can be manipulated
|
|
|
|
|
using the following function. Some of these flags affect how the
|
|
|
|
|
libext2fs filesystem behaves; others are provided solely for the
|
|
|
|
|
application's convenience.
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_mark_changed (ext2_filsys @var{fs})
|
|
|
|
|
@deftypefunx int ext2fs_test_changed (ext2_filsys @var{fs})
|
|
|
|
|
This flag indicates whether or not the filesystem has been changed.
|
|
|
|
|
It is not used by the ext2fs library.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_mark_super_dirty (ext2_filsys @var{fs})
|
|
|
|
|
Mark the filesystem @var{fs} as being dirty; this will cause
|
|
|
|
|
the superblock information to be flushed out when @code{ext2fs_close} is
|
|
|
|
|
called. @code{ext2fs_mark_super_dirty} will also set the filesystem
|
|
|
|
|
changed flag. The dirty flag is automatically cleared by
|
|
|
|
|
@code{ext2fs_flush} when the superblock is written to disk.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_mark_valid (ext2_filsys @var{fs})
|
|
|
|
|
@deftypefunx void ext2fs_unmark_valid (ext2_filsys @var{fs})
|
|
|
|
|
@deftypefunx int ext2fs_test_valid (ext2_filsys @var{fs})
|
|
|
|
|
This flag indicates whether or not the filesystem is free of errors.
|
|
|
|
|
It is not used by libext2fs, and is solely for the application's
|
|
|
|
|
convenience.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_mark_ib_dirty (ext2_filsys @var{fs})
|
|
|
|
|
@deftypefunx void ext2fs_mark_bb_dirty (ext2_filsys @var{fs})
|
|
|
|
|
@deftypefunx int ext2fs_test_ib_dirty (ext2_filsys @var{fs})
|
|
|
|
|
@deftypefunx int ext2fs_test_bb_dirty (ext2_filsys @var{fs})
|
|
|
|
|
These flags indicate whether or not the inode or block bitmaps have been
|
|
|
|
|
modified. If the flag is set, it will cause the appropriate bitmap
|
|
|
|
|
to be written when the filesystem is closed or flushed.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Inode Functions, Directory functions, Filesystem-level functions, EXT2FS Library Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section Inode Functions
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Reading and writing inodes::
|
|
|
|
|
* Iterating over inodes in a filesystem::
|
|
|
|
|
* Iterating over blocks in an inode::
|
|
|
|
|
* Inode Convenience Functions::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Reading and writing inodes, Iterating over inodes in a filesystem, Inode Functions, Inode Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Reading and writing inodes
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_inode (ext2_filsys @var{fs}, ino_t @var{ino}, struct ext2_inode *@var{inode})
|
|
|
|
|
Read the inode number @var{ino} into @var{inode}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_write_inode(ext2_filsys @var{fs}, ino_t @var{ino}, struct ext2_inode *@var{inode})
|
|
|
|
|
Write @var{inode} to inode @var{ino}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Iterating over inodes in a filesystem, Iterating over blocks in an inode, Reading and writing inodes, Inode Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Iterating over inodes in a filesystem
|
|
|
|
|
|
|
|
|
|
The inode_scan abstraction is useful for iterating over all the inodes
|
|
|
|
|
in a filesystem.
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_open_inode_scan (ext2_filsys @var{fs}, int @var{buffer_blocks}, ext2_inode_scan *@var{scan})
|
|
|
|
|
Initialize the iteration variable @var{scan}. This variable is used by
|
|
|
|
|
@code{ext2fs_get_next_inode}. The @var{buffer_blocks} parameter
|
|
|
|
|
controls how many blocks of the inode table are read in at a time. A
|
|
|
|
|
large number of blocks requires more memory, but reduces the overhead in
|
|
|
|
|
seeking and reading from the disk. If @var{buffer_blocks} is zero, a
|
|
|
|
|
suitable default value will be used.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_close_inode_scan (ext2_inode_scan @var{scan})
|
|
|
|
|
Release the memory associated with @var{scan} and invalidate it.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_get_next_inode (ext2_inode_scan @var{scan}, ino_t *@var{ino}, struct ext2_inode *@var{inode})
|
|
|
|
|
|
|
|
|
|
This function returns the next inode from the filesystem; the inode
|
|
|
|
|
number of the inode is stored in @var{ino}, and the inode is stored in
|
|
|
|
|
@var{inode}.
|
|
|
|
|
|
|
|
|
|
If the inode is located in a block that has been marked as bad,
|
|
|
|
|
@code{ext2fs_get_next_inode} will return the error
|
|
|
|
|
@code{EXT2_ET_BAD_BLOCK_IN_INODE_TABLE}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_inode_scan_goto_blockgroup (ext2_inode_scan @var{scan}, int @var{group})
|
|
|
|
|
Start the inode scan at a particular ext2 blockgroup, @var{group}.
|
|
|
|
|
This function may be safely called at any time while @var{scan} is valid.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_set_inode_callback (ext2_inode_scan @var{scan}, errcode_t (*done_group)(ext2_filsys @var{fs}, ext2_inode_scan @var{scan}, dgrp_t @var{group}, void * @var{private}), void *@var{done_group_data})
|
|
|
|
|
Register a callback function which will be called by
|
|
|
|
|
@code{ext2_get_next_inode} when all of the inodes in a block group have
|
|
|
|
|
been processed.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun int ext2fs_inode_scan_flags (ext2_inode_scan @var{scan}, int @var{set_flags}, int @var{clear_flags})
|
|
|
|
|
|
|
|
|
|
Set the scan_flags @var{set_flags} and clear the scan_flags @var{clear_flags}.
|
|
|
|
|
The following flags can be set using this interface:
|
|
|
|
|
|
|
|
|
|
@table @samp
|
|
|
|
|
|
|
|
|
|
@item EXT2_SF_SKIP_MISSING_ITABLE
|
|
|
|
|
When a block group is missing an inode table, skip it. If this flag is
|
|
|
|
|
not set @code{ext2fs_get_next_inode} will return the error
|
|
|
|
|
EXT2_ET_MISSING_INODE_TABLE.
|
|
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Iterating over blocks in an inode, Inode Convenience Functions, Iterating over inodes in a filesystem, Inode Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Iterating over blocks in an inode
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_block_iterate (ext2_filsys @var{fs}, ino_t @var{ino}, int @var{flags}, char *block_buf, int (*func)(ext2_filsys @var{fs}, blk_t *@var{blocknr}, int @var{blockcnt}, void *@var{private}), void *@var{private})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
1998-07-05 01:52:41 +08:00
|
|
|
|
@deftypefun errcode_t ext2fs_block_iterate2 (ext2_filsys @var{fs}, ino_t @var{ino}, int @var{flags}, char *@var{block}_buf, int (*func)(ext2_filsys @var{fs}, blk_t *@var{blocknr}, e2_blkcnt_t @var{blockcnt}, blk_t @var{ref_blk}, int @var{ref_offset}, void *@var{private}), void *@var{private})
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Inode Convenience Functions, , Iterating over blocks in an inode, Inode Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Convenience functions for Inodes
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_get_blocks (ext2_filsys @var{fs}, ino_t @var{ino}, blk_t *@var{blocks})
|
1997-04-30 01:48:10 +08:00
|
|
|
|
|
|
|
|
|
Returns an array of blocks corresponding to the direct,
|
|
|
|
|
indirect, doubly indirect, and triply indirect blocks as stored in the
|
|
|
|
|
inode structure.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_check_directory (ext2_filsys @var{fs}, ino_t @var{ino})
|
1997-04-30 01:48:10 +08:00
|
|
|
|
Returns 0 if @var{ino} is a directory, and @code{ENOTDIR} if it is not.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun int ext2_inode_has_valid_blocks (struct ext2_inode *@var{inode})
|
|
|
|
|
|
|
|
|
|
Returns 1 if the inode's block entries actually valid block entries, and
|
|
|
|
|
0 if not. Inodes which represent devices and fast symbolic links do not
|
|
|
|
|
contain valid block entries.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Directory functions, Bitmap Functions, Inode Functions, EXT2FS Library Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section Directory functions
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Directory block functions::
|
|
|
|
|
* Iterating over a directory::
|
|
|
|
|
* Creating and expanding directories::
|
|
|
|
|
* Creating and removing directory entries::
|
|
|
|
|
* Looking up filenames::
|
|
|
|
|
* Translating inode numbers to filenames::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Directory block functions, Iterating over a directory, Directory functions, Directory functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Directory block functions
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_write_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_new_dir_block (ext2_filsys @var{fs}, ino_t @var{dir}_ino, ino_t @var{parent_ino}, char **@var{block})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Iterating over a directory, Creating and expanding directories, Directory block functions, Directory functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Iterating over a directory
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_dir_iterate (ext2_filsys @var{fs}, ino_t @var{dir}, int @var{flags}, char *@var{block_buf}, int (*@var{func})(struct ext2_dir_entry *@var{dirent}, int @var{offset}, int @var{blocksize}, char *@var{buf}, void *@var{private}), void *@var{private})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Creating and expanding directories, Creating and removing directory entries, Iterating over a directory, Directory functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Creating and expanding directories
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_mkdir (ext2_filsys @var{fs}, ino_t @var{parent}, ino_t @var{inum}, const char *@var{name})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_expand_dir (ext2_filsys @var{fs}, ino_t @var{dir})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Creating and removing directory entries, Looking up filenames, Creating and expanding directories, Directory functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Creating and removing directory entries
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_link (ext2_filsys @var{fs}, ino_t @var{dir}, const char *@var{name}, ino_t @var{ino}, int flags)
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_unlink (ext2_filsys @var{fs}, ino_t @var{dir}, const char *@var{name}, ino_t @var{ino}, int @var{flags})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Looking up filenames, Translating inode numbers to filenames, Creating and removing directory entries, Directory functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Looking up filenames
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_lookup (ext2_filsys @var{fs}, ino_t @var{dir}, const char *@var{name}, int @var{namelen}, char *@var{buf}, ino_t *@var{inode})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_namei (ext2_filsys @var{fs}, ino_t @var{root}, ino_t @var{cwd}, const char *@var{name}, ino_t *@var{inode})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_namei_follow (ext2_filsys @var{fs}, ino_t @var{root}, ino_t @var{cwd}, const char *@var{name}, ino_t *@var{inode})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_follow_link (ext2_filsys @var{fs}, ino_t @var{root}, ino_t @var{cwd}, ino_t @var{inode}, ino_t *@var{res}_inode)
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Translating inode numbers to filenames, , Looking up filenames, Directory functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Translating inode numbers to filenames
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_get_pathname (ext2_filsys @var{fs}, ino_t @var{dir}, ino_t @var{ino}, char **@var{name})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@node Bitmap Functions, EXT2 data abstractions, Directory functions, EXT2FS Library Functions
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section Bitmap Functions
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Reading and Writing Bitmaps::
|
|
|
|
|
* Allocating Bitmaps::
|
|
|
|
|
* Free bitmaps::
|
|
|
|
|
* Bitmap Operations::
|
|
|
|
|
* Comparing bitmaps::
|
|
|
|
|
* Modifying Bitmaps::
|
|
|
|
|
* Resizing Bitmaps::
|
|
|
|
|
* Clearing Bitmaps::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Reading and Writing Bitmaps, Allocating Bitmaps, Bitmap Functions, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Reading and Writing Bitmaps
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_write_inode_bitmap (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_write_block_bitmap (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_inode_bitmap (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_block_bitmap (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_bitmaps (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_write_bitmaps (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Allocating Bitmaps, Free bitmaps, Reading and Writing Bitmaps, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Allocating Bitmaps
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_allocate_generic_bitmap (__u32 @var{start}, __u32 @var{end}, _u32 @var{real_end}, const char *@var{descr}, ext2fs_generic_bitmap *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_allocate_block_bitmap (ext2_filsys @var{fs}, const char *@var{descr}, ext2fs_block_bitmap *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_allocate_inode_bitmap (ext2_filsys @var{fs}, const char *@var{descr}, ext2fs_inode_bitmap *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Free bitmaps, Bitmap Operations, Allocating Bitmaps, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Freeing bitmaps
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_free_generic_bitmap (ext2fs_inode_bitmap @var{bitmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_free_block_bitmap (ext2fs_block_bitmap @var{bitmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_free_inode_bitmap (ext2fs_inode_bitmap @var{bitmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Bitmap Operations, Comparing bitmaps, Free bitmaps, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Bitmap Operations
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_mark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block})
|
|
|
|
|
|
|
|
|
|
@deftypefunx void ext2fs_unmark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block})
|
|
|
|
|
|
|
|
|
|
@deftypefunx int ext2fs_test_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block})
|
|
|
|
|
|
|
|
|
|
These functions set, clear, and test bits in a block bitmap @var{bitmap}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_mark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{inode})
|
|
|
|
|
|
|
|
|
|
@deftypefunx void ext2fs_unmark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{inode})
|
|
|
|
|
|
|
|
|
|
@deftypefunx int ext2fs_test_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{inode})
|
|
|
|
|
|
|
|
|
|
These functions set, clear, and test bits in an inode bitmap @var{bitmap}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_fast_mark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block})
|
|
|
|
|
|
|
|
|
|
@deftypefunx void ext2fs_fast_unmark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block})
|
|
|
|
|
|
|
|
|
|
@deftypefunx int ext2fs_fast_test_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block})
|
|
|
|
|
|
|
|
|
|
@deftypefunx void ext2fs_fast_mark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{inode})
|
|
|
|
|
|
|
|
|
|
@deftypefunx void ext2fs_fast_unmark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{inode})
|
|
|
|
|
|
|
|
|
|
@deftypefunx int ext2fs_fast_test_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{inode})
|
|
|
|
|
|
|
|
|
|
These ``fast'' functions are like their normal counterparts; however,
|
|
|
|
|
they are implemented as inline functions and do not perform bounds
|
|
|
|
|
checks on the inode number or block number; they are assumed to be
|
|
|
|
|
correct. They should only be used in speed-critical applications, where
|
|
|
|
|
the inode or block number has already been validated by other means.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun blk_t ext2fs_get_block_bitmap_start (ext2fs_block_bitmap @var{bitmap})
|
|
|
|
|
@deftypefunx ino_t ext2fs_get_inode_bitmap_start (ext2fs_inode_bitmap @var{bitmap})
|
|
|
|
|
Return the first inode or block which is stored in the bitmap.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun blk_t ext2fs_get_block_bitmap_end (ext2fs_block_bitmap @var{bitmap})
|
|
|
|
|
@deftypefunx ino_t ext2fs_get_inode_bitmap_end (ext2fs_inode_bitmap @var{bitmap})
|
|
|
|
|
|
|
|
|
|
Return the first inode or block which is stored in the bitmap.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Comparing bitmaps, Modifying Bitmaps, Bitmap Operations, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Comparing bitmaps
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_compare_block_bitmap (ext2fs_block_bitmap @var{bm1}, ext2fs_block_bitmap @var{bm2})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_compare_inode_bitmap (ext2fs_inode_bitmap @var{bm1}, ext2fs_inode_bitmap @var{bm2})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Modifying Bitmaps, Resizing Bitmaps, Comparing bitmaps, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Modifying Bitmaps
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_fudge_inode_bitmap_end (ext2fs_inode_bitmap @var{bitmap}, ino_t @var{end}, ino_t *@var{oend})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_fudge_block_bitmap_end (ext2fs_block_bitmap @var{bitmap}, blk_t @var{end}, blk_t *@var{oend})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Resizing Bitmaps, Clearing Bitmaps, Modifying Bitmaps, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Resizing Bitmaps
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_resize_generic_bitmap (__u32 @var{new_end}, __u32 @var{new_real_end}, ext2fs_generic_bitmap @var{bmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_resize_inode_bitmap (__u32 @var{new_end}, __u32 @var{new_real_end}, ext2fs_inode_bitmap @var{bmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_resize_block_bitmap (__u32 @var{new_end}, __u32 @var{new_real_end}, ext2fs_block_bitmap @var{bmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Clearing Bitmaps, , Resizing Bitmaps, Bitmap Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Clearing Bitmaps
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_clear_inode_bitmap (ext2fs_inode_bitmap @var{bitmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_clear_block_bitmap (ext2fs_block_bitmap @var{bitmap})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@node EXT2 data abstractions, Byte-swapping functions, Bitmap Functions, EXT2FS Library Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section EXT2 data abstractions
|
|
|
|
|
|
|
|
|
|
The ext2 library has a number of abstractions which are useful for ext2
|
|
|
|
|
utility programs.
|
|
|
|
|
|
|
|
|
|
@menu
|
|
|
|
|
* Badblocks list management::
|
|
|
|
|
* Directory-block list management::
|
|
|
|
|
* Inode count functions::
|
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Badblocks list management, Directory-block list management, EXT2 data abstractions, EXT2 data abstractions
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@comment node-name, next, previous, up
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@subsection Badblocks list management
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_badblocks_list_create (ext2_badblocks_list *@var{ret}, int @var{size})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_badblocks_list_free (ext2_badblocks_list @var{bb})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_badblocks_list_add (ext2_badblocks_list @var{bb}, blk_t @var{blk})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun int ext2fs_badblocks_list_test (ext2_badblocks_list @var{bb}, blk_t @var{blk})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_badblocks_list_iterate_begin (ext2_badblocks_list @var{bb}, ext2_badblocks_iterate *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun int ext2fs_badblocks_list_iterate (ext2_badblocks_iterate iter, blk_t *@var{blk})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_badblocks_list_iterate_end (ext2_badblocks_iterate @var{iter})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_update_bb_inode (ext2_filsys @var{fs}, ext2_badblocks_list @var{bb_list})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_bb_inode (ext2_filsys @var{fs}, ext2_badblocks_list *@var{bb_list})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_read_bb_FILE (ext2_filsys @var{fs}, FILE *f, ext2_badblocks_list *@var{bb_list}, void (*invalid)(ext2_filsys @var{fs}, blk_t @var{blk}))
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@node Directory-block list management, Inode count functions, Badblocks list management, EXT2 data abstractions
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@comment node-name, next, previous, up
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@subsection Directory-block list management
|
|
|
|
|
|
|
|
|
|
The dblist abstraction stores a list of blocks belonging to
|
|
|
|
|
directories. This list can be useful when a program needs to interate
|
|
|
|
|
over all directory entries in a filesystem; @code{e2fsck} does this in
|
|
|
|
|
pass 2 of its operations, and @code{debugfs} needs to do this when it is
|
|
|
|
|
trying to turn an inode number into a pathname.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_init_dblist (ext2_filsys @var{fs}, ext2_dblist *@var{ret_dblist})
|
1997-04-30 01:48:10 +08:00
|
|
|
|
|
|
|
|
|
Creates a dblist data structure and return it in @var{ret_dblist}.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_free_dblist (ext2_dblist @var{dblist})
|
1997-04-30 01:48:10 +08:00
|
|
|
|
|
|
|
|
|
Free a dblist data structure.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@deftypefun errcode_t ext2fs_add_dir_block (ext2_dblist @var{dblist}, ino_t @var{ino}, blk_t @var{blk}, int @var{blockcnt})
|
|
|
|
|
|
|
|
|
|
Add an entry to the dblist data structure. This call records the fact
|
|
|
|
|
that block number @var{blockcnt} of directory inode @var{ino} is stored
|
|
|
|
|
in block @var{blk}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_set_dir_block (ext2_dblist @var{dblist}, ino_t @var{ino}, blk_t @var{blk}, int @var{blockcnt})
|
|
|
|
|
|
|
|
|
|
Change an entry in the dblist data structure; this changes the location
|
|
|
|
|
of block number @var{blockcnt} of directory indoe @var{ino} to be block
|
|
|
|
|
@var{blk}.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@deftypefun errcode_t ext2fs_dblist_iterate (ext2_dblist @var{dblist}, int (*func)(ext2_filsys @var{fs}, struct ext2_db_entry *@var{db_info}, void *@var{private}), void *@var{private})
|
|
|
|
|
|
|
|
|
|
This iterator calls @var{func} for every entry in the dblist data structure.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@deftypefun errcode_t ext2fs_dblist_dir_iterate (ext2_dblist @var{dblist}, int flags, char *@var{block_buf}, int (*func)(ino_t @var{dir}, int @var{entry}, struct ext2_dir_entry *@var{dirent}, int @var{offset}, int @var{blocksize}, char *@var{buf}, void *@var{private}), void *@var{private})
|
|
|
|
|
|
|
|
|
|
This iterator takes reads in the directory block indicated in each
|
|
|
|
|
dblist entry, and calls @var{func} for each directory entry in each
|
|
|
|
|
directory block. If @var{dblist} contains all the directory blocks in a
|
|
|
|
|
filesystem, this function provides a convenient way to iterate over all
|
|
|
|
|
directory entries for that filesystem.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@node Inode count functions, , Directory-block list management, EXT2 data abstractions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@subsection Inode count functions
|
|
|
|
|
|
|
|
|
|
The icount abstraction is a specialized data type used by @code{e2fsck}
|
|
|
|
|
to store how many times a particular inode is referenced by the
|
|
|
|
|
filesystem. This is used twice; once to store the actual number of times
|
|
|
|
|
that the inode is reference; and once to store the claimed number of times
|
|
|
|
|
the inode is referenced according to the inode structure.
|
|
|
|
|
|
|
|
|
|
This abstraction is designed to be extremely efficient for storing this
|
|
|
|
|
sort of information, by taking advantage of the following properties of
|
|
|
|
|
inode counts, namely (1) inode counts are very often zero (because
|
|
|
|
|
the inode is currrently not in use), and (2) many files have a inode
|
|
|
|
|
count of 1 (because they are a file which has no additional hard links).
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_create_icount2(ext2_filsys @var{fs}, int @var{flags}, int @var{size}, ext2_icount_t @var{hint}, ext2_icount_t *@var{ret})
|
|
|
|
|
|
|
|
|
|
Creates an icount stucture for a filesystem @var{fs}, with initial space
|
|
|
|
|
for @var{size} inodes whose count is greater than 1. The @var{flags}
|
|
|
|
|
parameter is either 0 or @code{EXT2_ICOUNT_OPT_INCREMENT}, which
|
|
|
|
|
indicates that icount structure should be able to increment inode counts
|
|
|
|
|
quickly. The icount structure is returned in @var{ret}. The returned
|
|
|
|
|
icount structure initially has a count of zero for all inodes.
|
|
|
|
|
|
|
|
|
|
The @var{hint} parameter allows the caller to optionally pass in another
|
|
|
|
|
icount structure which is used to initialize the array of inodes whose
|
|
|
|
|
count is greater than 1. It is used purely as a speed optimization so
|
|
|
|
|
that the icount structure can determine in advance which inodes are
|
|
|
|
|
likely to contain a count grater than 1.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_free_icount(ext2_icount_t @var{icount})
|
|
|
|
|
|
|
|
|
|
Frees an icount structure.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_icount_fetch(ext2_icount_t @var{icount}, ino_t @var{ino}, __u16 *@var{ret})
|
|
|
|
|
|
|
|
|
|
Returns in @var{ret} fetches the count for a particular inode @var{ino}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_icount_increment(ext2_icount_t @var{icount}, ino_t @var{ino}, __u16 *@var{ret})
|
|
|
|
|
|
|
|
|
|
Increments the ref count for inode @var{ino}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_icount_decrement(ext2_icount_t @var{icount}, ino_t @var{ino}, __u16 *@var{ret})
|
|
|
|
|
|
|
|
|
|
Decrements the ref count for inode @var{ino}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_icount_store(ext2_icount_t @var{icount}, ino_t @var{ino}, __u16 @var{count})
|
|
|
|
|
|
|
|
|
|
Sets the reference count for inode @var{ino} to be @var{count}.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun ino_t ext2fs_get_icount_size(ext2_icount_t @var{icount})
|
|
|
|
|
|
|
|
|
|
Returns the current number of inodes in @var{icount} which has a count
|
|
|
|
|
greater than 1.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_icount_validate(ext2_icount_t @var{icount}, FILE *@var{f})
|
|
|
|
|
|
|
|
|
|
Validates the internal rep invariant of @var{icount}; if there are any
|
|
|
|
|
problems, print out debugging information to @var{f}. This function is
|
|
|
|
|
intended for debugging and testing use only.
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Byte-swapping functions, Other functions, EXT2 data abstractions, EXT2FS Library Functions
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section Byte-swapping functions
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_swap_super (struct ext2_super_block * @var{super})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_swap_group_desc (struct ext2_group_desc *@var{gdp})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun void ext2fs_swap_inode (ext2_filsys @var{fs}, struct ext2_inode *@var{to}, struct ext2_inode *@var{from}, int @var{hostorder})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun int ext2fs_native_flag (void)
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Other functions, , Byte-swapping functions, EXT2FS Library Functions
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@section Other functions
|
|
|
|
|
|
|
|
|
|
/* alloc.c */
|
|
|
|
|
@deftypefun errcode_t ext2fs_new_inode (ext2_filsys @var{fs}, ino_t @var{dir}, int @var{mode}, ext2fs_inode_bitmap @var{map}, ino_t *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_new_block (ext2_filsys @var{fs}, blk_t @var{goal}, ext2fs_block_bitmap @var{map}, blk_t *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2fs_get_free_blocks (ext2_filsys @var{fs}, blk_t @var{start}, blk_t @var{finish}, int @var{num}, ext2fs_block_bitmap @var{map}, blk_t *@var{ret})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
/* check_desc.c */
|
|
|
|
|
@deftypefun errcode_t ext2fs_check_desc (ext2_filsys @var{fs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun errcode_t ext2_get_num_dirs (ext2_filsys @var{fs}, ino_t *@var{ret_num_dirs})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* getsize.c */
|
|
|
|
|
@deftypefun errcode_t ext2fs_get_device_size (const char *@var{file}, int @var{blocksize}, blk_t *@var{retblocks})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ismounted.c */
|
|
|
|
|
@deftypefun errcode_t ext2fs_check_if_mounted (const char *@var{file}, int *@var{mount_flags})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
/* version.c */
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@deftypefun int ext2fs_get_library_version(const char **@var{ver_string}, const char **@var{date_string})
|
|
|
|
|
|
|
|
|
|
This function returns the current version of the ext2 library. The
|
|
|
|
|
return value contains an integer version code, which consists of the
|
|
|
|
|
major version number of the library multiplied by 100, plus the minor
|
|
|
|
|
version number of the library. Hence, if the library version is 1.08,
|
|
|
|
|
the returned value will be 108.
|
|
|
|
|
|
|
|
|
|
If @var{ver_string} and/or @var{date_string} are non-NULL, they will be
|
|
|
|
|
set to point at a constant string containing the library version and/or
|
|
|
|
|
release date, respectively.
|
1997-04-30 00:15:03 +08:00
|
|
|
|
@end deftypefun
|
|
|
|
|
|
1997-04-30 01:48:10 +08:00
|
|
|
|
@deftypefun int ext2fs_parse_version_string(const char *@var{ver_string})
|
|
|
|
|
|
|
|
|
|
This function takes a version string which may included in an
|
|
|
|
|
application and returns a version code using the same algorithm used by
|
|
|
|
|
@code{ext2fs_get_library_version}. It can be used by programs included
|
|
|
|
|
in the @code{e2fsprogs} distribution to assure that they are using an
|
|
|
|
|
up-to-date ext2 shared library.
|
|
|
|
|
@end deftypefun
|
1997-04-30 00:15:03 +08:00
|
|
|
|
|
|
|
|
|
/* inline functions */
|
|
|
|
|
@deftypefun int ext2fs_group_of_blk (ext2_filsys @var{fs}, blk_t @var{blk})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
@deftypefun int ext2fs_group_of_ino (ext2_filsys @var{fs}, ino_t @var{ino})
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Concept Index, Function Index, EXT2FS Library Functions, Top
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@unnumbered Concept Index
|
|
|
|
|
@printindex cp
|
|
|
|
|
|
|
|
|
|
@c ----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
@node Function Index, , Concept Index, Top
|
|
|
|
|
@comment node-name, next, previous, up
|
|
|
|
|
@unnumbered Function and Type Index
|
|
|
|
|
@printindex fn
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@contents
|
|
|
|
|
@bye
|