| \input texinfo    @c -*-texinfo-*- | 
 | @c %**start of header | 
 | @setfilename libext2fs.info | 
 | @settitle The EXT2FS Library (version 1.44.2) | 
 | @synindex tp fn | 
 | @comment %**end of header | 
 |  | 
 | @ifinfo | 
 | @dircategory Development | 
 | @direntry | 
 | * libext2fs: (libext2fs).                  The EXT2FS library. | 
 | @end direntry | 
 | @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. | 
 |  | 
 | Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, | 
 | 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 by Theodore Ts'o | 
 |  | 
 | 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 | 
 | @subtitle Version 1.44.2 | 
 | @subtitle May 2018 | 
 |  | 
 | @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 | 
 | Copyright @copyright{} 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, | 
 | 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Theodore Ts'o | 
 |  | 
 | @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 | 
 |  | 
 | @node Top, Introduction to the EXT2FS Library, (dir), (dir) | 
 |  | 
 | @top The EXT2FS Library | 
 |  | 
 | This manual documents the EXT2FS Library, version 1.44.2. | 
 |  | 
 | @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::   | 
 | * File I/O Functions::           | 
 | * Inode Functions::              | 
 | * Directory functions::          | 
 | * Bitmap Functions::             | 
 | * EXT2 data abstractions::       | 
 | * Byte-swapping functions::      | 
 | * Other functions::              | 
 | @end menu | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node Filesystem-level functions, File I/O 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 descriptors 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 filesystem 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 superblock.  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 find 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 File I/O Functions, Inode Functions, Filesystem-level functions, EXT2FS Library Functions | 
 | @comment  node-name,  next,  previous,  up | 
 | @section File I/O Functions | 
 |  | 
 | The following functions provide a convenient abstraction to read or | 
 | write a file in an filesystem.  The interface is similar in spirit to | 
 | the Linux/POSIX file I/O system calls. | 
 |  | 
 | @menu | 
 | * File handle manipulation::     | 
 | * Reading and writing data::     | 
 | * Changing the file offset ::    | 
 | * Getting the file size::        | 
 | @end menu | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node File handle manipulation, Reading and writing data, File I/O Functions, File I/O Functions | 
 | @comment  node-name,  next,  previous,  up | 
 | @subsection File handle manipulation | 
 |  | 
 | The file handle functions much like a file descriptor in the Linux/POSIX | 
 | file I/O system calls.  Unlike the Linux/POSIX system calls, files are | 
 | opened via inode numbers instead of via pathnames.  To resolve a | 
 | pathname to an inode number, use the function @code{ext2fs_namei} or to | 
 | create a new file, use @code{ext2fs_new_inode} and @code{ext2fs_link}. | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_open2 (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}, int @var{flags}, ext2_file_t *@var{ret}) | 
 | @deftypefunx errcode_t ext2fs_file_open (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, ext2_file_t *@var{ret}) | 
 |  | 
 | Opens a file identified by inode number @var{ino} in filesystem @var{fs} | 
 | and returns a file handle in @var{ret}.  If an inode structure is | 
 | provided in @var{inode}, then it is used instead of reading the inode | 
 | from the filesystem. | 
 |  | 
 | The @var{flags} argument contains a bitmask of flags which control how | 
 | the file should be opened. | 
 |  | 
 | @table @code | 
 | @item EXT2_FILE_WRITE | 
 | Open the file for reading and writing.  Without this flag, the file is | 
 | opened for writing only. | 
 |  | 
 | @item EXT2_FILE_CREATE | 
 | Create the file if it is not already present. | 
 |  | 
 | @end table | 
 | @end deftypefun | 
 |  | 
 | @deftypefun ext2_filsys ext2fs_file_get_fs (ext2_file_t @var{file}) | 
 | Return the filesystem handle where the open file @var{file} was opened. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_close (ext2_file_t @var{file}) | 
 | Close the file handle @var{file}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_flush (ext2_file_t @var{file}) | 
 | Force any data written via @code{ext2fs_file_write} to disk. | 
 | @end deftypefun | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node Reading and writing data, Changing the file offset , File handle manipulation, File I/O Functions | 
 | @comment  node-name,  next,  previous,  up | 
 | @subsection Reading and writing data | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_read (ext2_file_t @var{file}, void *@var{buf}, unsigned int @var{wanted}, unsigned int *@var{got}) | 
 | Read @var{wanted} bytes of data from @var{file} store it in the buffer | 
 | @var{buf}.  The number of bytes that was actually read is returned | 
 | via @var{got}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_write (ext2_file_t @var{file}, const void *@var{buf}, unsigned int @var{nbytes}, unsigned int *@var{written}) | 
 | Write @var{wanted} bytes of data from the buffer @var{buf} to the | 
 | current file position of @var{file}.  The number of bytes that was  | 
 | actually written is returned via @var{written}. | 
 | @end deftypefun | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node Changing the file offset , Getting the file size, Reading and writing data, File I/O Functions | 
 | @comment  node-name,  next,  previous,  up | 
 | @subsection Changing the file offset | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_llseek (ext2_file_t @var{file}, __u64 @var{offset}, int @var{whence}, __u64 *@var{ret_pos}) | 
 | @deftypefunx errcode_t ext2fs_file_lseek (ext2_file_t @var{file}, ext2_off_t @var{offset}, int @var{whence}, ext2_off_t *@var{ret_pos}) | 
 | Change the current file position of @var{file} according to the | 
 | directive @var{whence} as follows: | 
 |  | 
 | @table @code | 
 | @item EXT2_SEEK_SET | 
 | The file position is set to @var{offset} bytes from the beginning of the | 
 | file. | 
 |  | 
 | @item EXT2_SEEK_CUR | 
 | The file position set to its current location plus @var{offset} bytes. | 
 |  | 
 | @item EXT2_SEEK_END | 
 | The file position is set to the size of the file plus @var{offset} | 
 | bytes. | 
 | @end table | 
 |  | 
 | The current offset is returned via @var{ret_pos}. | 
 | @end deftypefun | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node Getting the file size,  , Changing the file offset , File I/O Functions | 
 | @comment  node-name,  next,  previous,  up | 
 | @subsection Getting the file size | 
 |  | 
 | @deftypefun errcode_t ext2fs_file_get_lsize (ext2_file_t @var{file}, __u64 *@var{ret_size}) | 
 | Return the size of the file @var{file} in @var{ret_size}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun ext2_off_t ext2fs_file_get_size (ext2_file_t @var{file}) | 
 | Return the size of the file @var{file}. | 
 | @end deftypefun | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node Inode Functions, Directory functions, File I/O 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}, ext2_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}, ext2_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}, ext2_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}, ext2_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}) | 
 |  | 
 | Iterate over all of the blocks in inode number @var{ino} in filesystem | 
 | @var{fs}, by calling the function @var{func} for each block in the | 
 | inode.  The @var{block_buf} parameter should either be NULL, or if the | 
 | @code{ext2fs_block_iterate} function is called repeatedly, the overhead | 
 | of allocating and freeing scratch memory can be avoided by passing a | 
 | pointer to a scratch buffer which must be at least as big as three times the | 
 | filesystem's blocksize.   | 
 |  | 
 | The @var{flags} parameter controls how the iterator will function: | 
 |  | 
 | @table @samp | 
 |  | 
 | @item BLOCK_FLAG_HOLE | 
 | This flag indicates that the interator function should be called on | 
 | blocks where the block number is zero (also known as ``holes''.)  It is | 
 | also known as BLOCK_FLAG_APPEND, since it is also used by functions | 
 | such as ext2fs_expand_dir() to add a new block to an inode. | 
 |  | 
 | @item BLOCK_FLAG_DEPTH_TRAVERSE | 
 | This flag indicates that the iterator function for the | 
 | indirect, doubly indirect, etc. blocks should be called after all | 
 | of the blocks contained in the indirect blocks are processed. | 
 | This is useful if you are going to be deallocating blocks from an | 
 | inode. | 
 |  | 
 | @item BLOCK_FLAG_DATA_ONLY | 
 | This flag indicates that the iterator function should be | 
 | called for data blocks only. | 
 |  | 
 | @end table | 
 |  | 
 | The callback function @var{func} is called with a number of parameters; | 
 | the @var{fs} and @var{private} parameters are self-explanatory, and | 
 | their values are taken from the parameters to | 
 | @code{ext2fs_block_iterate}.  (The @var{private} data structure is | 
 | generally used by callers to @code{ext2fs_block_iterate} so that some | 
 | private data structure can be passed to the callback function.  The  | 
 | @var{blockcnt} parameter, if non-negative, indicates the logical block | 
 | number of a data block in the inode.  If @var{blockcnt} is less than | 
 | zero, then @var{func} was called on a metadata block, and @var{blockcnt} | 
 | will be one of the following values:  BLOCK_COUNT_IND, BLOCK_COUNT_DIND, | 
 | BLOCK_COUNT_TIND, or BLOCK_COUNT_TRANSLATOR.  The @var{blocknr} is a | 
 | pointer to the inode or indirect block entry listing physical block | 
 | number.  The callback function may modify the physical block number, if | 
 | it returns the @var{BLOCK_CHANGED} flag. | 
 |  | 
 |  | 
 | The callback function @var{func} returns a result code which is composed of | 
 | the logical OR of the following flags: | 
 |  | 
 | @table @samp | 
 |  | 
 | @item BLOCK_CHANGED | 
 |  | 
 | This flag indicates that callback function has modified the physical | 
 | block number pointed to by @var{blocknr}. | 
 |  | 
 | @item BLOCK_ABORT | 
 |  | 
 | This flag requests that @code{ext2fs_block_iterate} to stop immediately | 
 | and return to the caller. | 
 |  | 
 | @end table | 
 |  | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_block_iterate2 (ext2_filsys @var{fs}, ext2_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}) | 
 |  | 
 | This function is much like @code{ext2fs_block_iterate}, except that the | 
 | @var{blockcnt} type is a 64-bit signed quantity, to support larger | 
 | files, and the addition of the @var{ref_blk} and @var{ref_offset} | 
 | arguments passed to the callback function, which identify the location | 
 | of the physical block pointed to by pointer @var{blocknr}.  If | 
 | @var{ref_blk} is zero, then @var{ref_offset} contains the offset into | 
 | the @code{i_blocks} array.  If @var{ref_blk} is non-zero, then the physical | 
 | block location is contained inside an indirect block group, and | 
 | @var{ref_offset} contains the offset into the indirect block. | 
 |  | 
 | @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}, ext2_ino_t @var{ino}, blk_t *@var{blocks}) | 
 |  | 
 | Returns an array of blocks corresponding to the direct, | 
 | indirect, doubly indirect, and triply indirect blocks as stored in the | 
 | inode structure. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_check_directory (ext2_filsys @var{fs}, ext2_ino_t @var{ino}) | 
 | Returns 0 if @var{ino} is a directory, and @code{ENOTDIR} if it is not. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun int ext2fs_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. | 
 | @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}) | 
 |  | 
 | This function reads a directory block, performing | 
 | byte swapping if necessary. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_write_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf}) | 
 |  | 
 | This function writes a directory block, performing | 
 | byte swapping if necessary. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_new_dir_block (ext2_filsys @var{fs}, ext2_ino_t @var{dir_ino}, ext2_ino_t @var{parent_ino}, char **@var{block}) | 
 |  | 
 | This function creates a new directory block in @var{block}.  If | 
 | @var{dir_ino} is non-zero, then @var{dir_ino} and @var{parent_ino} are used | 
 | to initialize directory entries for @file{.} and @file{..}, respectively. | 
 | @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}, ext2_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}) | 
 |  | 
 | This function iterates over all of the directory entries in the | 
 | directory @var{dir}, calling the callback function @var{func} for each | 
 | directory entry in the directory.  The @var{block_buf} parameter should | 
 | either be NULL, or if the @code{ext2fs_dir_iterate} function is  | 
 | called repeatedly, the overhead of allocating and freeing  | 
 | scratch memory can be avoided by passing a pointer to a scratch buffer | 
 | which must be at least as big as the filesystem's blocksize.   | 
 |  | 
 | The @var{flags} parameter controls how the iterator will function: | 
 |  | 
 | @table @samp | 
 |  | 
 | @item DIRENT_FLAG_INCLUDE_EMPTY | 
 |  | 
 | This flag indicates that the callback function should be called even  | 
 | for deleted or empty directory entries. | 
 |  | 
 | @end table | 
 |  | 
 | @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}, ext2_ino_t @var{parent}, ext2_ino_t @var{inum}, const char *@var{name}) | 
 |  | 
 | This function creates a new directory.  If @var{inum} is zero, then a | 
 | new inode will be allocated; otherwise, the directory will be created in | 
 | the inode specified by @var{inum}.  If @var{name} specifies the name of | 
 | the new directory; if it is non-NULL, then the new directory will be | 
 | linked into the parent directory @var{parent}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_expand_dir (ext2_filsys @var{fs}, ext2_ino_t @var{dir}) | 
 |  | 
 | This function adds a new empty directory block and appends it to  | 
 | the directory @var{dir}.  This allows functions such as | 
 | @code{ext2fs_link} to add new directory entries to a directory which is full. | 
 |  | 
 | @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}, ext2_ino_t @var{dir}, const char *@var{name}, ext2_ino_t @var{ino}, int flags) | 
 |  | 
 | This function adds a new directory entry to the directory @var{dir},  | 
 | with @var{name} and @var{ino} specifying the name and inode number in | 
 | the directory entry, respectively.   | 
 |  | 
 | The low 3 bits of the flags field is used to specify the file type of | 
 | inode:   (No other flags are currently defined.) | 
 |  | 
 | @table @samp | 
 |  | 
 | @item EXT2_FT_UNKNOWN | 
 |  | 
 | The file type is unknown. | 
 |  | 
 | @item EXT2_FT_REG_FILE | 
 |  | 
 | The file type is a normal file. | 
 |  | 
 | @item EXT2_FT_DIR | 
 |  | 
 | The file type is a directory. | 
 |  | 
 | @item EXT2_FT_CHRDEV | 
 |  | 
 | The file type is a character device. | 
 |  | 
 | @item EXT2_FT_BLKDEV | 
 |  | 
 | The file type is a block device. | 
 |  | 
 | @item EXT2_FT_FIFO | 
 |  | 
 | The file type is a named pipe. | 
 |  | 
 | @item EXT2_FT_SOCK | 
 |  | 
 | The file type is a unix domain socket. | 
 |  | 
 | @item EXT2_FT_SYMLINK | 
 |  | 
 | The file type is a symbolic link. | 
 | @end table  | 
 |  | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_unlink (ext2_filsys @var{fs}, ext2_ino_t @var{dir}, const char *@var{name}, ext2_ino_t @var{ino}, int @var{flags}) | 
 |  | 
 | This function removes a directory entry from @var{dir}. | 
 | The directory entry to be removed is the first one which is | 
 | matched by @var{name} and @var{ino}.  If @var{name} is non-NULL,  | 
 | the directory entry's name must match @var{name}.  If @var{ino} is | 
 | non-zero, the directory entry's inode number must match @var{ino}. | 
 | No flags are currently defined for @code{ext2fs_unlink}; callers should | 
 | pass in zero to this parameter. | 
 |  | 
 | @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}, ext2_ino_t @var{dir}, const char *@var{name}, int @var{namelen}, char *@var{buf}, ext2_ino_t *@var{inode}) | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_namei (ext2_filsys @var{fs}, ext2_ino_t @var{root}, ext2_ino_t @var{cwd}, const char *@var{name}, ext2_ino_t *@var{inode}) | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_namei_follow (ext2_filsys @var{fs}, ext2_ino_t @var{root}, ext2_ino_t @var{cwd}, const char *@var{name}, ext2_ino_t *@var{inode}) | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_follow_link (ext2_filsys @var{fs}, ext2_ino_t @var{root}, ext2_ino_t @var{cwd}, ext2_ino_t @var{inode}, ext2_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}, ext2_ino_t @var{dir}, ext2_ino_t @var{ino}, char **@var{name}) | 
 | @end deftypefun | 
 |  | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @node Bitmap Functions, EXT2 data abstractions, Directory functions, EXT2FS Library Functions | 
 | @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}, ext2_ino_t @var{inode}) | 
 |  | 
 | @deftypefunx void ext2fs_unmark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) | 
 |  | 
 | @deftypefunx int ext2fs_test_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_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}, ext2_ino_t @var{inode}) | 
 |  | 
 | @deftypefunx void ext2fs_fast_unmark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) | 
 |  | 
 | @deftypefunx int ext2fs_fast_test_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_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 ext2_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 ext2_ino_t ext2fs_get_inode_bitmap_end (ext2fs_inode_bitmap @var{bitmap}) | 
 |  | 
 | Return the last 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}, ext2_ino_t @var{end}, ext2_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}) | 
 |  | 
 | This function sets all of the bits in the inode bitmap @var{bitmap} to  | 
 | be zero. | 
 |  | 
 | @end deftypefun | 
 |  | 
 | @deftypefun void ext2fs_clear_block_bitmap (ext2fs_block_bitmap @var{bitmap}) | 
 |  | 
 | This function sets all of the bits in the block bitmap @var{bitmap} to  | 
 | be zero. | 
 | @end deftypefun | 
 |  | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @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 | 
 | @comment  node-name,  next,  previous,  up | 
 | @subsection Badblocks list management | 
 |  | 
 |  | 
 | @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 ---------------------------------------------------------------------- | 
 |  | 
 | @node Directory-block list management, Inode count functions, Badblocks list management, EXT2 data abstractions | 
 | @comment  node-name,  next,  previous,  up | 
 | @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. | 
 |  | 
 | @deftypefun errcode_t ext2fs_init_dblist (ext2_filsys @var{fs}, ext2_dblist *@var{ret_dblist}) | 
 |  | 
 | Creates a dblist data structure and returns it in @var{ret_dblist}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun void ext2fs_free_dblist (ext2_dblist @var{dblist}) | 
 |  | 
 | Free a dblist data structure. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_add_dir_block (ext2_dblist @var{dblist}, ext2_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}, ext2_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 inode @var{ino} to be block | 
 | @var{blk}.  | 
 | @end deftypefun | 
 |  | 
 | @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. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_dblist_dir_iterate (ext2_dblist @var{dblist}, int flags, char *@var{block_buf}, int (*func)(ext2_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. | 
 | @end deftypefun | 
 |  | 
 | @c ---------------------------------------------------------------------- | 
 |  | 
 | @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 currently 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 structure 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}, ext2_ino_t @var{ino}, __u16 *@var{ret}) | 
 |  | 
 | Returns in @var{ret} the count for a particular inode @var{ino}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun errcode_t ext2fs_icount_increment (ext2_icount_t @var{icount}, ext2_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}, ext2_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}, ext2_ino_t @var{ino}, __u16 @var{count}) | 
 |  | 
 | Sets the reference count for inode @var{ino} to be @var{count}. | 
 | @end deftypefun | 
 |  | 
 | @deftypefun ext2_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 | 
 | @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}, ext2_ino_t @var{dir}, int @var{mode}, ext2fs_inode_bitmap @var{map}, ext2_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 ext2fs_get_num_dirs (ext2_filsys @var{fs}, ext2_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 | 
 |  | 
 | /* version.c */ | 
 |  | 
 | @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. | 
 | @end deftypefun | 
 |  | 
 | @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 | 
 |  | 
 | /* inline functions */ | 
 | @deftypefun int ext2fs_group_of_blk (ext2_filsys @var{fs}, blk_t @var{blk}) | 
 |  | 
 | This function returns the block group which contains the block @var{blk}. | 
 |  | 
 | @end deftypefun | 
 |  | 
 | @deftypefun int ext2fs_group_of_ino (ext2_filsys @var{fs}, ext2_ino_t @var{ino}) | 
 |  | 
 | This function returns the block group which contains the inode @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 |