1 \input texinfo @c -*-texinfo-*- 2 @c %**start of header 3 @setfilename libext2fs.info 4 @settitle The EXT2FS Library (version 1.41.11) 5 @synindex tp fn 6 @comment %**end of header 7 8 @ifinfo 9 @dircategory Development 10 @direntry 11 * libext2fs: (libext2fs). The EXT2FS library. 12 @end direntry 13 @end ifinfo 14 15 @c smallbook 16 17 @iftex 18 @finalout 19 @end iftex 20 21 @c Note: the edition number is listed in *three* places; please update 22 @c all three. Also, update the month and year where appropriate. 23 24 @c ==> Update edition number for settitle and subtitle, and in the 25 @c ==> following paragraph; update date, too. 26 27 28 @ifinfo 29 This file documents the ext2fs library, a library for manipulating the 30 ext2 filesystem. 31 32 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 33 2006, 2007, 2008, 2009 by Theodore Ts'o 34 35 Permission is granted to make and distribute verbatim copies of 36 this manual provided the copyright notice and this permission notice 37 are preserved on all copies. 38 39 @ignore 40 Permission is granted to process this file through TeX and print the 41 results, provided the printed document carries copying permission 42 notice identical to this one except for the removal of this paragraph 43 (this paragraph not being relevant to the printed manual). 44 45 @end ignore 46 Permission is granted to copy and distribute modified versions of this 47 manual under the conditions for verbatim copying, provided that the entire 48 resulting derived work is distributed under the terms of a permission 49 notice identical to this one. 50 51 Permission is granted to copy and distribute translations of this manual 52 into another language, under the above conditions for modified versions, 53 except that this permission notice may be stated in a translation approved 54 by the author. 55 @end ifinfo 56 57 @setchapternewpage on 58 @titlepage 59 @c use the new format for titles 60 61 @title The EXT2FS Library 62 @subtitle The EXT2FS Library 63 @subtitle Version 1.41.11 64 @subtitle March 2010 65 66 @author by Theodore Ts'o 67 68 @c Include the Distribution inside the titlepage so 69 @c that headings are turned off. 70 71 @tex 72 \global\parindent=0pt 73 \global\parskip=8pt 74 \global\baselineskip=13pt 75 @end tex 76 77 @page 78 @vskip 0pt plus 1filll 79 Copyright @copyright{} 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 80 2005 Theodore Ts'o 81 82 @sp 2 83 84 Permission is granted to make and distribute verbatim copies of 85 this manual provided the copyright notice and this permission notice 86 are preserved on all copies. 87 88 Permission is granted to copy and distribute modified versions of this 89 manual under the conditions for verbatim copying, provided that the entire 90 resulting derived work is distributed under the terms of a permission 91 notice identical to this one. 92 93 Permission is granted to copy and distribute translations of this manual 94 into another language, under the above conditions for modified versions, 95 except that this permission notice may be stated in a translation approved 96 by the Foundation. 97 @end titlepage 98 @headings double 99 100 @ifinfo 101 @node Top, Introduction to the EXT2FS Library, (dir), (dir) 102 103 @top The EXT2FS Library 104 105 This manual documents the EXT2FS Library, version 1.41.11. 106 107 @end ifinfo 108 109 @menu 110 * Introduction to the EXT2FS Library:: 111 * EXT2FS Library Functions:: 112 * Concept Index:: 113 * Function Index:: 114 @end menu 115 116 @c ---------------------------------------------------------------------- 117 118 @node Introduction to the EXT2FS Library, EXT2FS Library Functions, Top, Top 119 @comment node-name, next, previous, up 120 @chapter Introduction to the EXT2FS Library 121 122 The EXT2FS library is designed to allow user-level programs to 123 manipulate an ext2 filesystem. 124 125 @node EXT2FS Library Functions, Concept Index, Introduction to the EXT2FS Library, Top 126 @comment node-name, next, previous, up 127 @chapter EXT2FS Library Functions 128 129 @menu 130 * Filesystem-level functions:: 131 * File I/O Functions:: 132 * Inode Functions:: 133 * Directory functions:: 134 * Bitmap Functions:: 135 * EXT2 data abstractions:: 136 * Byte-swapping functions:: 137 * Other functions:: 138 @end menu 139 140 @c ---------------------------------------------------------------------- 141 142 @node Filesystem-level functions, File I/O Functions, EXT2FS Library Functions, EXT2FS Library Functions 143 @comment node-name, next, previous, up 144 @section Filesystem-level functions 145 146 The following functions operate on a filesystem handle. Most EXT2FS 147 Library functions require a filesystem handle as their first argument. 148 There are two functions which create a filesystem handle, 149 @code{ext2fs_open} and @code{ext2fs_initialize}. 150 151 The filesystem can also be closed using @code{ext2fs_close}, and any 152 changes to the superblock and group descripts can be written out to disk 153 using @code{ext2fs_flush}. 154 155 @menu 156 * Opening an ext2 filesystem:: 157 * Closing and flushing out changes:: 158 * Initializing a filesystem:: 159 * Filesystem flag functions:: 160 @end menu 161 162 @c ---------------------------------------------------------------------- 163 164 @node Opening an ext2 filesystem, Closing and flushing out changes, Filesystem-level functions, Filesystem-level functions 165 @comment node-name, next, previous, up 166 @subsection Opening an ext2 filesystem 167 168 Most libext2fs functions take a filesystem handle of type 169 @code{ext2_filsys}. A filesystem handle is created either by opening 170 an existing function using @code{ext2fs_open}, or by initializing a new 171 filesystem using @code{ext2fs_initialize}. 172 173 @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}) 174 175 Opens a filesystem named @var{name}, using the the io_manager 176 @var{manager} to define the input/output routines needed to read and 177 write the filesystem. In the case of the @code{unix_io} io_manager, 178 @var{name} is interpreted as the Unix filename of the filesystem image. 179 This is often a device file, such as @file{/dev/hda1}. 180 181 The @var{superblock} parameter specifies the block number of the 182 superblock which should be used when opening the filesystem. 183 If @var{superblock} is zero, @code{ext2fs_open} will use the primary 184 superblock located at offset 1024 bytes from the start of the filesystem 185 image. 186 187 The @var{block_size} parameter specifies the block size used by the 188 filesystem. Normally this is determined automatically from the 189 filesystem uperblock. If @var{block_size} is non-zero, it must match 190 the block size found in the superblock, or the error 191 @code{EXT2_ET_UNEXPECTED_BLOCK_SIZE} will be returned. The 192 @var{block_size} parameter is also used to help fund the superblock when 193 @var{superblock} is non-zero. 194 195 The @var{flags} argument contains a bitmask of flags which control how 196 the filesystem open should be handled. 197 198 @table @code 199 @item EXT2_FLAG_RW 200 Open the filesystem for reading and writing. Without this flag, the 201 filesystem is opened for reading only. 202 203 @item EXT2_FLAG_FORCE 204 Open the filesystem regardless of the feature sets listed in the 205 superblock. 206 207 @end table 208 @end deftypefun 209 210 @c ---------------------------------------------------------------------- 211 212 @node Closing and flushing out changes, Initializing a filesystem, Opening an ext2 filesystem, Filesystem-level functions 213 @comment node-name, next, previous, up 214 @subsection Closing and flushing out changes 215 216 @deftypefun errcode_t ext2fs_flush (ext2_filsys @var{fs}) 217 218 Write any changes to the high-level filesystem data structures in the 219 @var{fs} filesystem. The following data structures will be written out: 220 221 @itemize @bullet 222 @item The filesystem superblock 223 @item The filesystem group descriptors 224 @item The filesystem bitmaps, if read in via @code{ext2fs_read_bitmaps}. 225 @end itemize 226 227 @end deftypefun 228 229 @deftypefun void ext2fs_free (ext2_filsys @var{fs}) 230 231 Close the io_manager abstraction for @var{fs} and release all memory 232 associated with the filesystem handle. 233 @end deftypefun 234 235 @deftypefun errcode_t ext2fs_close (ext2_filsys @var{fs}) 236 237 Flush out any changes to the high-level filesystem data structures using 238 @code{ext2fs_flush} if the filesystem is marked dirty; then close and 239 free the filesystem using @code{ext2fs_free}. 240 241 @end deftypefun 242 243 @c ---------------------------------------------------------------------- 244 245 @node Initializing a filesystem, Filesystem flag functions, Closing and flushing out changes, Filesystem-level functions 246 @comment node-name, next, previous, up 247 @subsection Initializing a filesystem 248 249 An ext2 filesystem is initializing by the @code{mke2fs} program. The 250 two functions described here, @code{ext2fs_initialize} and 251 @code{ext2fs_allocate_tables} do much of the initial work for setting up 252 a filesystem. However, they don't do the whole job. @code{mke2fs} 253 calls @code{ext2fs_initialize} to set up the filesystem superblock, and 254 calls @code{ext2fs_allocate_tables} to allocate space for the inode 255 table, and the inode and block bitmaps. In addition, @code{mke2fs} must 256 also initialize the inode tables by clearing them with zeros, create the 257 root and lost+found directories, and reserve the reserved inodes. 258 259 @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}) 260 261 This function is used by the @code{mke2fs} program to initialize a 262 filesystem. The @code{ext2fs_initialize} function creates a filesystem 263 handle which is returned in @var{ret_fs} that has been properly setup 264 for a filesystem to be located in @var{name}, using the io_manager 265 @var{manager}. The prototype superblock in @var{param} is used to 266 supply parameters such as the number of blocks in the filesystem, the 267 block size, etc. 268 269 The @code{ext2fs_initialize} function does not actually do any I/O; that 270 will be done when the application program calls @code{ext2fs_close} or 271 @code{ext2fs_flush}. Also, this function only initializes the 272 superblock and group descriptor structures. It does not create the 273 inode table or the root directory. This must be done by the calling 274 application, such as @code{mke2fs}. 275 276 The following values may be set in the @var{param} prototype superblock; 277 if a value of 0 is found in a field, @code{ext2fs_initialize} will use a 278 default value. The calling application should zero out the prototype 279 entire superblock, and then fill in any appropriate values. 280 281 @table @code 282 283 @item s_blocks_count 284 The number of blocks in the filesystem. This parameter is mandatory and 285 must be set by the calling application. 286 287 @item s_inodes_count 288 The number of inodes in the filesystem. The 289 default value is determined by calculating the size of the filesystem, 290 and creating one inode for every 4096 bytes. 291 292 @item s_r_blocks_count 293 The number of blocks which should be reserved for the superuser. The 294 default value is zero blocks. 295 296 @item s_log_block_size 297 The blocksize of the filesystem. Valid values are 0 (1024 bytes), 1 298 (2048 bytes), or 2 (4096 bytes). The default blocksize is 1024 bytes. 299 300 @item s_log_frag_size 301 The size of fragments. The ext2 filesystem does not support fragments 302 (and may never support fragments). Currently this field must be the 303 same as @code{s_log_block_size}. 304 305 @item s_first_data_block 306 The first data block for the filesystem. For filesystem with a 307 blocksize of 1024 bytes, this value must be at least 1, since the 308 superblock is located in block number 1. For filesystems with larger 309 blocksizes, the superblock is still located at an offset of 1024 bytes, 310 so the superblock is located in block number 0. By default, this value 311 is set to 1 for filesystems with a block size of 1024 bytes, or 0 for 312 filesystems with larger blocksizes. 313 314 @item s_max_mnt_count 315 This field defines the number of times that the filesystem can be 316 mounted before it should be checked using @code{e2fsck}. When 317 @code{e2fsck} is run without the @samp{-f} option, @code{e2fsck} will 318 skip the filesystem check if the number of times that the filesystem has 319 been mounted is less than @code{s_max_mnt_count} and if the interval 320 between the last time a filesystem check was performed and the current 321 time is less than @code{s_checkinterval} (see below). The default value 322 of @code{s_max_mnt_count} is 20. 323 324 @item s_checkinterval 325 This field defines the minimal interval between filesystem checks. See 326 the previous entry for a discussion of how this field is used by 327 @code{e2fsck}. The default value of this field is 180 days (six 328 months). 329 330 @item s_errors 331 This field defines the behavior which should be used by the kernel of 332 errors are detected in the filesystem. Possible values include: 333 334 @table @samp 335 @item EXT2_ERRORS_CONTINUE 336 Continue execution when errors are detected. 337 338 @item EXT2_ERRORS_RO 339 Remount the filesystem read-only. 340 341 @item EXT2_ERRORS_PANIC 342 Panic. 343 344 @end table 345 346 The default behavior is @samp{EXT2_ERRORS_CONTINUE}. 347 348 @end table 349 350 @end deftypefun 351 352 @deftypefun errcode_t ext2fs_allocate_tables (ext2_filsys @var{fs}) 353 Allocate space for the inode table and the block and inode bitmaps. The 354 inode tables and block and inode bitmaps aren't actually initialized; 355 this function just allocates the space for them. 356 @end deftypefun 357 358 @c ---------------------------------------------------------------------- 359 360 @node Filesystem flag functions, , Initializing a filesystem, Filesystem-level functions 361 @comment node-name, next, previous, up 362 @subsection Filesystem flag functions 363 364 The filesystem handle has a number of flags which can be manipulated 365 using the following function. Some of these flags affect how the 366 libext2fs filesystem behaves; others are provided solely for the 367 application's convenience. 368 369 @deftypefun void ext2fs_mark_changed (ext2_filsys @var{fs}) 370 @deftypefunx int ext2fs_test_changed (ext2_filsys @var{fs}) 371 This flag indicates whether or not the filesystem has been changed. 372 It is not used by the ext2fs library. 373 @end deftypefun 374 375 @deftypefun void ext2fs_mark_super_dirty (ext2_filsys @var{fs}) 376 Mark the filesystem @var{fs} as being dirty; this will cause 377 the superblock information to be flushed out when @code{ext2fs_close} is 378 called. @code{ext2fs_mark_super_dirty} will also set the filesystem 379 changed flag. The dirty flag is automatically cleared by 380 @code{ext2fs_flush} when the superblock is written to disk. 381 @end deftypefun 382 383 @deftypefun void ext2fs_mark_valid (ext2_filsys @var{fs}) 384 @deftypefunx void ext2fs_unmark_valid (ext2_filsys @var{fs}) 385 @deftypefunx int ext2fs_test_valid (ext2_filsys @var{fs}) 386 This flag indicates whether or not the filesystem is free of errors. 387 It is not used by libext2fs, and is solely for the application's 388 convenience. 389 @end deftypefun 390 391 @deftypefun void ext2fs_mark_ib_dirty (ext2_filsys @var{fs}) 392 @deftypefunx void ext2fs_mark_bb_dirty (ext2_filsys @var{fs}) 393 @deftypefunx int ext2fs_test_ib_dirty (ext2_filsys @var{fs}) 394 @deftypefunx int ext2fs_test_bb_dirty (ext2_filsys @var{fs}) 395 These flags indicate whether or not the inode or block bitmaps have been 396 modified. If the flag is set, it will cause the appropriate bitmap 397 to be written when the filesystem is closed or flushed. 398 @end deftypefun 399 400 @c ---------------------------------------------------------------------- 401 402 @node File I/O Functions, Inode Functions, Filesystem-level functions, EXT2FS Library Functions 403 @comment node-name, next, previous, up 404 @section File I/O Functions 405 406 The following functions provide a convenient abstraction to read or 407 write a file in an filesystem. The interface is similar in spirit to 408 the Linux/POSIX file I/O system calls. 409 410 @menu 411 * File handle manipulation:: 412 * Reading and writing data:: 413 * Changing the file offset :: 414 * Getting the file size:: 415 @end menu 416 417 @c ---------------------------------------------------------------------- 418 419 @node File handle manipulation, Reading and writing data, File I/O Functions, File I/O Functions 420 @comment node-name, next, previous, up 421 @subsection File handle manipulation 422 423 The file handle functions much like a file descriptor in the Linux/POSIX 424 file I/O system calls. Unlike the Linux/POSIX system calls, files are 425 opened via inode numbers instead of via pathnames. To resolve a 426 pathname to an inode number, use the function @code{ext2fs_namei} or to 427 create a new file, use @code{ext2fs_new_inode} and @code{ext2fs_link}. 428 429 @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}) 430 @deftypefunx errcode_t ext2fs_file_open (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, int @var{flags}, ext2_file_t *@var{ret}) 431 432 Opens a file identified by inode number @var{ino} in filesystem @var{fs} 433 and returns a file handle in @var{ret}. If an inode structure is 434 provided in @var{inode}, then it is used instead of reading the inode 435 from the filesystem. 436 437 The @var{flags} argument contains a bitmask of flags which control how 438 the file should be opened. 439 440 @table @code 441 @item EXT2_FILE_WRITE 442 Open the file for reading and writing. Without this flag, the file is 443 opened for writing only. 444 445 @item EXT2_FILE_CREATE 446 Create the file if it is not already present. 447 448 @end table 449 @end deftypefun 450 451 @deftypefun ext2_filsys ext2fs_file_get_fs (ext2_file_t @var{file}) 452 Return the filesystem handle where the open file @var{file} was opened. 453 @end deftypefun 454 455 @deftypefun errcode_t ext2fs_file_close (ext2_file_t @var{file}) 456 Close the file handle @var{file}. 457 @end deftypefun 458 459 @deftypefun errcode_t ext2fs_file_flush (ext2_file_t @var{file}) 460 Force any data written via @code{ext2fs_file_write} to disk. 461 @end deftypefun 462 463 @c ---------------------------------------------------------------------- 464 465 @node Reading and writing data, Changing the file offset , File handle manipulation, File I/O Functions 466 @comment node-name, next, previous, up 467 @subsection Reading and writing data 468 469 @deftypefun errcode_t ext2fs_file_read (ext2_file_t @var{file}, void *@var{buf}, unsigned int @var{wanted}, unsigned int *@var{got}) 470 Read @var{wanted} bytes of data from @var{file} store it in the buffer 471 @var{buf}. The number of bytes that was actually read is returned 472 via @var{got}. 473 @end deftypefun 474 475 @deftypefun errcode_t ext2fs_file_write (ext2_file_t @var{file}, const void *@var{buf}, unsigned int @var{nbytes}, unsigned int *@var{written}) 476 Write @var{wanted} bytes of data from the buffer @var{buf} to the 477 current file position of @var{file}. The number of bytes that was 478 actually written is returned via @var{got}. 479 @end deftypefun 480 481 @c ---------------------------------------------------------------------- 482 483 @node Changing the file offset , Getting the file size, Reading and writing data, File I/O Functions 484 @comment node-name, next, previous, up 485 @subsection Changing the file offset 486 487 @deftypefun errcode_t ext2fs_file_llseek (ext2_file_t @var{file}, __u64 @var{offset}, int @var{whence}, __u64 *@var{ret_pos}) 488 @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}) 489 Change the current file position of @var{file} according to the 490 directive @var{whence} as follows: 491 492 @table @code 493 @item EXT2_SEEK_SET 494 The file position is set to @var{offset} bytes from the beginning of the 495 file. 496 497 @item EXT2_SEEK_CUR 498 The file position set to its current location plus @var{offset} bytes. 499 500 @item EXT2_SEEK_END 501 The file position is set to the size of the file plus @var{offset} 502 bytes. 503 @end table 504 505 The current offset is returned via @var{ret_pos}. 506 @end deftypefun 507 508 @c ---------------------------------------------------------------------- 509 510 @node Getting the file size, , Changing the file offset , File I/O Functions 511 @comment node-name, next, previous, up 512 @subsection Getting the file size 513 514 @deftypefun errcode_t ext2fs_file_get_lsize (ext2_file_t @var{file}, __u64 *@var{ret_size}) 515 Return the size of the file @var{file} in @var{ret_size}. 516 @end deftypefun 517 518 @deftypefun ext2_off_t ext2fs_file_get_size (ext2_file_t @var{file}) 519 Return the size of the file @var{file}. 520 @end deftypefun 521 522 @c ---------------------------------------------------------------------- 523 524 @node Inode Functions, Directory functions, File I/O Functions, EXT2FS Library Functions 525 @comment node-name, next, previous, up 526 @section Inode Functions 527 528 @menu 529 * Reading and writing inodes:: 530 * Iterating over inodes in a filesystem:: 531 * Iterating over blocks in an inode:: 532 * Inode Convenience Functions:: 533 @end menu 534 535 @c ---------------------------------------------------------------------- 536 537 @node Reading and writing inodes, Iterating over inodes in a filesystem, Inode Functions, Inode Functions 538 @comment node-name, next, previous, up 539 @subsection Reading and writing inodes 540 541 @deftypefun errcode_t ext2fs_read_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}) 542 Read the inode number @var{ino} into @var{inode}. 543 @end deftypefun 544 545 @deftypefun errcode_t ext2fs_write_inode (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, struct ext2_inode *@var{inode}) 546 Write @var{inode} to inode @var{ino}. 547 @end deftypefun 548 549 550 @c ---------------------------------------------------------------------- 551 552 @node Iterating over inodes in a filesystem, Iterating over blocks in an inode, Reading and writing inodes, Inode Functions 553 @comment node-name, next, previous, up 554 @subsection Iterating over inodes in a filesystem 555 556 The inode_scan abstraction is useful for iterating over all the inodes 557 in a filesystem. 558 559 @deftypefun errcode_t ext2fs_open_inode_scan (ext2_filsys @var{fs}, int @var{buffer_blocks}, ext2_inode_scan *@var{scan}) 560 Initialize the iteration variable @var{scan}. This variable is used by 561 @code{ext2fs_get_next_inode}. The @var{buffer_blocks} parameter 562 controls how many blocks of the inode table are read in at a time. A 563 large number of blocks requires more memory, but reduces the overhead in 564 seeking and reading from the disk. If @var{buffer_blocks} is zero, a 565 suitable default value will be used. 566 @end deftypefun 567 568 @deftypefun void ext2fs_close_inode_scan (ext2_inode_scan @var{scan}) 569 Release the memory associated with @var{scan} and invalidate it. 570 @end deftypefun 571 572 @deftypefun errcode_t ext2fs_get_next_inode (ext2_inode_scan @var{scan}, ext2_ino_t *@var{ino}, struct ext2_inode *@var{inode}) 573 574 This function returns the next inode from the filesystem; the inode 575 number of the inode is stored in @var{ino}, and the inode is stored in 576 @var{inode}. 577 578 If the inode is located in a block that has been marked as bad, 579 @code{ext2fs_get_next_inode} will return the error 580 @code{EXT2_ET_BAD_BLOCK_IN_INODE_TABLE}. 581 @end deftypefun 582 583 @deftypefun errcode_t ext2fs_inode_scan_goto_blockgroup (ext2_inode_scan @var{scan}, int @var{group}) 584 Start the inode scan at a particular ext2 blockgroup, @var{group}. 585 This function may be safely called at any time while @var{scan} is valid. 586 @end deftypefun 587 588 @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}) 589 Register a callback function which will be called by 590 @code{ext2_get_next_inode} when all of the inodes in a block group have 591 been processed. 592 @end deftypefun 593 594 @deftypefun int ext2fs_inode_scan_flags (ext2_inode_scan @var{scan}, int @var{set_flags}, int @var{clear_flags}) 595 596 Set the scan_flags @var{set_flags} and clear the scan_flags @var{clear_flags}. 597 The following flags can be set using this interface: 598 599 @table @samp 600 601 @item EXT2_SF_SKIP_MISSING_ITABLE 602 When a block group is missing an inode table, skip it. If this flag is 603 not set @code{ext2fs_get_next_inode} will return the error 604 EXT2_ET_MISSING_INODE_TABLE. 605 606 @end table 607 608 @end deftypefun 609 610 @c ---------------------------------------------------------------------- 611 612 @node Iterating over blocks in an inode, Inode Convenience Functions, Iterating over inodes in a filesystem, Inode Functions 613 @comment node-name, next, previous, up 614 @subsection Iterating over blocks in an inode 615 616 @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}) 617 618 Iterate over all of the blocks in inode number @var{ino} in filesystem 619 @var{fs}, by calling the function @var{func} for each block in the 620 inode. The @var{block_buf} parameter should either be NULL, or if the 621 @code{ext2fs_block_iterate} function is called repeatedly, the overhead 622 of allocating and freeing scratch memory can be avoided by passing a 623 pointer to a scratch buffer which must be at least as big as three times the 624 filesystem's blocksize. 625 626 The @var{flags} parameter controls how the iterator will function: 627 628 @table @samp 629 630 @item BLOCK_FLAG_HOLE 631 This flag indiciates that the interator function should be called on 632 blocks where the block number is zero (also known as ``holes''.) It is 633 also known as BLOCK_FLAG_APPEND, since it is also used by functions 634 such as ext2fs_expand_dir() to add a new block to an inode. 635 636 @item BLOCK_FLAG_DEPTH_TRAVERSE 637 This flag indicates that the iterator function for the 638 indirect, doubly indirect, etc. blocks should be called after all 639 of the blocks containined in the indirect blocks are processed. 640 This is useful if you are going to be deallocating blocks from an 641 inode. 642 643 @item BLOCK_FLAG_DATA_ONLY 644 This flag indicates that the iterator function should be 645 called for data blocks only. 646 647 @end table 648 649 The callback function @var{func} is called with a number of parameters; 650 the @var{fs} and @var{private} parameters are self-explanatory, and 651 their values are taken from the parameters to 652 @code{ext2fs_block_iterate}. (The @var{private} data structure is 653 generally used by callers to @code{ext2fs_block_iterate} so that some 654 private data structure can be passed to the callback function. The 655 @var{blockcnt} parameter, if non-negative, indicates the logical block 656 number of a data block in the inode. If @var{blockcnt} is less than 657 zero, then @var{func} was called on a metadata block, and @var{blockcnt} 658 will be one of the following values: BLOCK_COUNT_IND, BLOCK_COUNT_DIND, 659 BLOCK_COUNT_TIND, or BLOCK_COUNT_TRANSLATOR. The @var{blocknr} is a 660 pointer to the inode or indirect block entry listing physical block 661 number. The callback function may modify the physical block number, if 662 it returns the @var{BLOCK_CHANGED} flag. 663 664 665 The callback function @var{func} returns a result code which is composed of 666 the logical OR of the following flags: 667 668 @table @samp 669 670 @item BLOCK_CHANGED 671 672 This flag indicates that callback function has modified the physical 673 block number pointed to by @var{blocknr}. 674 675 @item BLOCK_ABORT 676 677 This flag requests that @code{ext2fs_block_iterate} to stop immediately 678 and return to the caller. 679 680 @end table 681 682 @end deftypefun 683 684 @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}) 685 686 This function is much like @code{ext2fs_block_iterate}, except that the 687 @var{blockcnt} type is a 64-bit signed quantity, to support larger 688 files, and the addition of the @var{ref_blk} and @var{ref_offset} 689 arguments passed to the callback function, which identify the location 690 of the physical block pointed to by pointer @var{blocknr}. If 691 @var{ref_blk} is zero, then @var{ref_offset} contains the offset into 692 the @code{i_blocks} array. If @var{ref_blk} is non-zero, then the physical 693 block location is contained inside an indirect block group, and 694 @var{ref_offset} contains the offset into the indirect block. 695 696 @end deftypefun 697 698 @c ---------------------------------------------------------------------- 699 700 @node Inode Convenience Functions, , Iterating over blocks in an inode, Inode Functions 701 @comment node-name, next, previous, up 702 @subsection Convenience functions for Inodes 703 704 @deftypefun errcode_t ext2fs_get_blocks (ext2_filsys @var{fs}, ext2_ino_t @var{ino}, blk_t *@var{blocks}) 705 706 Returns an array of blocks corresponding to the direct, 707 indirect, doubly indirect, and triply indirect blocks as stored in the 708 inode structure. 709 @end deftypefun 710 711 @deftypefun errcode_t ext2fs_check_directory (ext2_filsys @var{fs}, ext2_ino_t @var{ino}) 712 Returns 0 if @var{ino} is a directory, and @code{ENOTDIR} if it is not. 713 @end deftypefun 714 715 @deftypefun int ext2fs_inode_has_valid_blocks (struct ext2_inode *@var{inode}) 716 717 Returns 1 if the inode's block entries actually valid block entries, and 718 0 if not. Inodes which represent devices and fast symbolic links do not 719 contain valid block entries. 720 @end deftypefun 721 722 @c ---------------------------------------------------------------------- 723 724 @node Directory functions, Bitmap Functions, Inode Functions, EXT2FS Library Functions 725 @comment node-name, next, previous, up 726 @section Directory functions 727 728 @menu 729 * Directory block functions:: 730 * Iterating over a directory:: 731 * Creating and expanding directories:: 732 * Creating and removing directory entries:: 733 * Looking up filenames:: 734 * Translating inode numbers to filenames:: 735 @end menu 736 737 @c ---------------------------------------------------------------------- 738 739 @node Directory block functions, Iterating over a directory, Directory functions, Directory functions 740 @comment node-name, next, previous, up 741 @subsection Directory block functions 742 743 @deftypefun errcode_t ext2fs_read_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf}) 744 745 This function reads a directory block, performing any necessary 746 byte swapping if necessary. 747 @end deftypefun 748 749 @deftypefun errcode_t ext2fs_write_dir_block (ext2_filsys @var{fs}, blk_t @var{block}, void *@var{buf}) 750 751 This function writes a directory block, performing any necessary 752 byte swapping if necessary. 753 @end deftypefun 754 755 @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}) 756 757 This function creates a new directory block in @var{block}. If 758 @var{dir_ino} is non-zero, then @var{dir_info} and @var{parent_ino} is used 759 to initialize directory entries for @file{.} and @file{..}, respectively. 760 @end deftypefun 761 762 @c ---------------------------------------------------------------------- 763 764 @node Iterating over a directory, Creating and expanding directories, Directory block functions, Directory functions 765 @comment node-name, next, previous, up 766 @subsection Iterating over a directory 767 768 @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}) 769 770 This function interates over all of the directory entries in the 771 directory @var{dir}, calling the callback function @var{func} for each 772 directory entry in the directory. The @var{block_buf} parameter should 773 either be NULL, or if the @code{ext2fs_dir_iterate} function is 774 called repeatedly, the overhead of allocating and freeing 775 scratch memory can be avoided by passing a pointer to a scratch buffer 776 which must be at least as big as the filesystem's blocksize. 777 778 The @var{flags} parameter controls how the iterator will function: 779 780 @table @samp 781 782 @item DIRENT_FLAG_INCLUDE_EMPTY 783 784 This flag indicates that the callback function should be called even 785 for deleted or empty directory entries. 786 787 @end table 788 789 @end deftypefun 790 791 @c ---------------------------------------------------------------------- 792 793 @node Creating and expanding directories, Creating and removing directory entries, Iterating over a directory, Directory functions 794 @comment node-name, next, previous, up 795 @subsection Creating and expanding directories 796 797 @deftypefun errcode_t ext2fs_mkdir (ext2_filsys @var{fs}, ext2_ino_t @var{parent}, ext2_ino_t @var{inum}, const char *@var{name}) 798 799 This function creates a new directory. If @var{inum} is zero, then a 800 new inode will be allocated; otherwise, the directory will be created in 801 the inode specified by @var{inum}. If @var{name} specifies the name of 802 the new directory; if it is non-NULL, then the new directory will be 803 linked into the parent directory @var{parent}. 804 @end deftypefun 805 806 @deftypefun errcode_t ext2fs_expand_dir (ext2_filsys @var{fs}, ext2_ino_t @var{dir}) 807 808 This function adds a new empty directory block and appends it to 809 the directory @var{dir}. This allows functions such as 810 @code{ext2fs_link} to add new directory entries to a directory which is full. 811 812 @end deftypefun 813 814 @c ---------------------------------------------------------------------- 815 816 @node Creating and removing directory entries, Looking up filenames, Creating and expanding directories, Directory functions 817 @comment node-name, next, previous, up 818 @subsection Creating and removing directory entries 819 820 @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) 821 822 This function adds a new directory entry to the directory @var{dir}, 823 with @var{name} and @var{ino} specifying the name and inode number in 824 the directory entry, respectively. 825 826 The low 3 bits of the flags field is used to specify the file type of 827 inode: (No other flags are currently defined.) 828 829 @table @samp 830 831 @item EXT2_FT_UNKNOWN 832 833 The file type is unknown. 834 835 @item EXT2_FT_REG_FILE 836 837 The file type is a normal file. 838 839 @item EXT2_FT_DIR 840 841 The file type is a directory. 842 843 @item EXT2_FT_CHRDEV 844 845 The file type is a character device. 846 847 @item EXT2_FT_BLKDEV 848 849 The file type is a block device. 850 851 @item EXT2_FT_FIFO 852 853 The file type is a named pipe. 854 855 @item EXT2_FT_SOCK 856 857 The file type is a unix domain socket. 858 859 @item EXT2_FT_SYMLINK 860 861 The file type is a symbolic link. 862 @end table 863 864 @end deftypefun 865 866 @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}) 867 868 This function removes a directory entry from @var{dir}. 869 The directory entry to be removed is the first one which is 870 matched by @var{name} and @var{ino}. If @var{name} is non-NULL, 871 the directory entry's name must match @var{name}. If @var{ino} is 872 non-zero, the directory entry's inode number must match @var{ino}. 873 No flags are currently defined for @code{ext2fs_unlink}; callers should 874 pass in zero to this parameter. 875 876 @end deftypefun 877 878 @c ---------------------------------------------------------------------- 879 880 @node Looking up filenames, Translating inode numbers to filenames, Creating and removing directory entries, Directory functions 881 @comment node-name, next, previous, up 882 @subsection Looking up filenames 883 884 @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}) 885 @end deftypefun 886 887 @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}) 888 @end deftypefun 889 890 @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}) 891 @end deftypefun 892 893 @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) 894 @end deftypefun 895 896 @c ---------------------------------------------------------------------- 897 898 @node Translating inode numbers to filenames, , Looking up filenames, Directory functions 899 @comment node-name, next, previous, up 900 @subsection Translating inode numbers to filenames 901 902 @deftypefun errcode_t ext2fs_get_pathname (ext2_filsys @var{fs}, ext2_ino_t @var{dir}, ext2_ino_t @var{ino}, char **@var{name}) 903 @end deftypefun 904 905 906 @c ---------------------------------------------------------------------- 907 908 @node Bitmap Functions, EXT2 data abstractions, Directory functions, EXT2FS Library Functions 909 @comment node-name, next, previous, up 910 @section Bitmap Functions 911 912 @menu 913 * Reading and Writing Bitmaps:: 914 * Allocating Bitmaps:: 915 * Free bitmaps:: 916 * Bitmap Operations:: 917 * Comparing bitmaps:: 918 * Modifying Bitmaps:: 919 * Resizing Bitmaps:: 920 * Clearing Bitmaps:: 921 @end menu 922 923 @c ---------------------------------------------------------------------- 924 925 @node Reading and Writing Bitmaps, Allocating Bitmaps, Bitmap Functions, Bitmap Functions 926 @comment node-name, next, previous, up 927 @subsection Reading and Writing Bitmaps 928 929 @deftypefun errcode_t ext2fs_write_inode_bitmap (ext2_filsys @var{fs}) 930 @end deftypefun 931 932 @deftypefun errcode_t ext2fs_write_block_bitmap (ext2_filsys @var{fs}) 933 @end deftypefun 934 935 @deftypefun errcode_t ext2fs_read_inode_bitmap (ext2_filsys @var{fs}) 936 @end deftypefun 937 938 @deftypefun errcode_t ext2fs_read_block_bitmap (ext2_filsys @var{fs}) 939 @end deftypefun 940 941 @deftypefun errcode_t ext2fs_read_bitmaps (ext2_filsys @var{fs}) 942 @end deftypefun 943 944 @deftypefun errcode_t ext2fs_write_bitmaps (ext2_filsys @var{fs}) 945 @end deftypefun 946 947 @c ---------------------------------------------------------------------- 948 949 @node Allocating Bitmaps, Free bitmaps, Reading and Writing Bitmaps, Bitmap Functions 950 @comment node-name, next, previous, up 951 @subsection Allocating Bitmaps 952 953 @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}) 954 @end deftypefun 955 956 @deftypefun errcode_t ext2fs_allocate_block_bitmap (ext2_filsys @var{fs}, const char *@var{descr}, ext2fs_block_bitmap *@var{ret}) 957 @end deftypefun 958 959 @deftypefun errcode_t ext2fs_allocate_inode_bitmap (ext2_filsys @var{fs}, const char *@var{descr}, ext2fs_inode_bitmap *@var{ret}) 960 @end deftypefun 961 962 @c ---------------------------------------------------------------------- 963 964 @node Free bitmaps, Bitmap Operations, Allocating Bitmaps, Bitmap Functions 965 @comment node-name, next, previous, up 966 @subsection Freeing bitmaps 967 968 969 @deftypefun void ext2fs_free_generic_bitmap (ext2fs_inode_bitmap @var{bitmap}) 970 @end deftypefun 971 972 @deftypefun void ext2fs_free_block_bitmap (ext2fs_block_bitmap @var{bitmap}) 973 @end deftypefun 974 975 @deftypefun void ext2fs_free_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}) 976 @end deftypefun 977 978 979 @c ---------------------------------------------------------------------- 980 981 @node Bitmap Operations, Comparing bitmaps, Free bitmaps, Bitmap Functions 982 @comment node-name, next, previous, up 983 @subsection Bitmap Operations 984 985 @deftypefun void ext2fs_mark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block}) 986 987 @deftypefunx void ext2fs_unmark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block}) 988 989 @deftypefunx int ext2fs_test_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block}) 990 991 These functions set, clear, and test bits in a block bitmap @var{bitmap}. 992 @end deftypefun 993 994 995 @deftypefun void ext2fs_mark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) 996 997 @deftypefunx void ext2fs_unmark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) 998 999 @deftypefunx int ext2fs_test_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) 1000 1001 These functions set, clear, and test bits in an inode bitmap @var{bitmap}. 1002 @end deftypefun 1003 1004 @deftypefun void ext2fs_fast_mark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block}) 1005 1006 @deftypefunx void ext2fs_fast_unmark_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block}) 1007 1008 @deftypefunx int ext2fs_fast_test_block_bitmap (ext2fs_block_bitmap @var{bitmap}, blk_t @var{block}) 1009 1010 @deftypefunx void ext2fs_fast_mark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) 1011 1012 @deftypefunx void ext2fs_fast_unmark_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) 1013 1014 @deftypefunx int ext2fs_fast_test_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{inode}) 1015 1016 These ``fast'' functions are like their normal counterparts; however, 1017 they are implemented as inline functions and do not perform bounds 1018 checks on the inode number or block number; they are assumed to be 1019 correct. They should only be used in speed-critical applications, where 1020 the inode or block number has already been validated by other means. 1021 @end deftypefun 1022 1023 @deftypefun blk_t ext2fs_get_block_bitmap_start (ext2fs_block_bitmap @var{bitmap}) 1024 @deftypefunx ext2_ino_t ext2fs_get_inode_bitmap_start (ext2fs_inode_bitmap @var{bitmap}) 1025 Return the first inode or block which is stored in the bitmap. 1026 @end deftypefun 1027 1028 @deftypefun blk_t ext2fs_get_block_bitmap_end (ext2fs_block_bitmap @var{bitmap}) 1029 @deftypefunx ext2_ino_t ext2fs_get_inode_bitmap_end (ext2fs_inode_bitmap @var{bitmap}) 1030 1031 Return the last inode or block which is stored in the bitmap. 1032 @end deftypefun 1033 1034 1035 @c ---------------------------------------------------------------------- 1036 1037 @node Comparing bitmaps, Modifying Bitmaps, Bitmap Operations, Bitmap Functions 1038 @comment node-name, next, previous, up 1039 @subsection Comparing bitmaps 1040 1041 @deftypefun errcode_t ext2fs_compare_block_bitmap (ext2fs_block_bitmap @var{bm1}, ext2fs_block_bitmap @var{bm2}) 1042 @end deftypefun 1043 1044 @deftypefun errcode_t ext2fs_compare_inode_bitmap (ext2fs_inode_bitmap @var{bm1}, ext2fs_inode_bitmap @var{bm2}) 1045 @end deftypefun 1046 1047 1048 @c ---------------------------------------------------------------------- 1049 1050 @node Modifying Bitmaps, Resizing Bitmaps, Comparing bitmaps, Bitmap Functions 1051 @comment node-name, next, previous, up 1052 @subsection Modifying Bitmaps 1053 1054 @deftypefun errcode_t ext2fs_fudge_inode_bitmap_end (ext2fs_inode_bitmap @var{bitmap}, ext2_ino_t @var{end}, ext2_ino_t *@var{oend}) 1055 @end deftypefun 1056 1057 @deftypefun errcode_t ext2fs_fudge_block_bitmap_end (ext2fs_block_bitmap @var{bitmap}, blk_t @var{end}, blk_t *@var{oend}) 1058 @end deftypefun 1059 1060 @c ---------------------------------------------------------------------- 1061 1062 @node Resizing Bitmaps, Clearing Bitmaps, Modifying Bitmaps, Bitmap Functions 1063 @comment node-name, next, previous, up 1064 @subsection Resizing Bitmaps 1065 1066 @deftypefun errcode_t ext2fs_resize_generic_bitmap (__u32 @var{new_end}, __u32 @var{new_real_end}, ext2fs_generic_bitmap @var{bmap}) 1067 @end deftypefun 1068 1069 @deftypefun errcode_t ext2fs_resize_inode_bitmap (__u32 @var{new_end}, __u32 @var{new_real_end}, ext2fs_inode_bitmap @var{bmap}) 1070 @end deftypefun 1071 1072 @deftypefun errcode_t ext2fs_resize_block_bitmap (__u32 @var{new_end}, __u32 @var{new_real_end}, ext2fs_block_bitmap @var{bmap}) 1073 @end deftypefun 1074 1075 1076 @c ---------------------------------------------------------------------- 1077 1078 @node Clearing Bitmaps, , Resizing Bitmaps, Bitmap Functions 1079 @comment node-name, next, previous, up 1080 @subsection Clearing Bitmaps 1081 1082 @deftypefun void ext2fs_clear_inode_bitmap (ext2fs_inode_bitmap @var{bitmap}) 1083 1084 This function sets all of the bits in the inode bitmap @var{bitmap} to 1085 be zero. 1086 1087 @end deftypefun 1088 1089 @deftypefun void ext2fs_clear_block_bitmap (ext2fs_block_bitmap @var{bitmap}) 1090 1091 This function sets all of the bits in the block bitmap @var{bitmap} to 1092 be zero. 1093 @end deftypefun 1094 1095 1096 @c ---------------------------------------------------------------------- 1097 1098 @node EXT2 data abstractions, Byte-swapping functions, Bitmap Functions, EXT2FS Library Functions 1099 @comment node-name, next, previous, up 1100 @section EXT2 data abstractions 1101 1102 The ext2 library has a number of abstractions which are useful for ext2 1103 utility programs. 1104 1105 @menu 1106 * Badblocks list management:: 1107 * Directory-block list management:: 1108 * Inode count functions:: 1109 @end menu 1110 1111 @c ---------------------------------------------------------------------- 1112 1113 @node Badblocks list management, Directory-block list management, EXT2 data abstractions, EXT2 data abstractions 1114 @comment node-name, next, previous, up 1115 @subsection Badblocks list management 1116 1117 1118 @deftypefun errcode_t ext2fs_badblocks_list_create (ext2_badblocks_list *@var{ret}, int @var{size}) 1119 @end deftypefun 1120 1121 @deftypefun void ext2fs_badblocks_list_free (ext2_badblocks_list @var{bb}) 1122 @end deftypefun 1123 1124 @deftypefun errcode_t ext2fs_badblocks_list_add (ext2_badblocks_list @var{bb}, blk_t @var{blk}) 1125 @end deftypefun 1126 1127 @deftypefun int ext2fs_badblocks_list_test (ext2_badblocks_list @var{bb}, blk_t @var{blk}) 1128 @end deftypefun 1129 1130 @deftypefun errcode_t ext2fs_badblocks_list_iterate_begin (ext2_badblocks_list @var{bb}, ext2_badblocks_iterate *@var{ret}) 1131 @end deftypefun 1132 1133 @deftypefun int ext2fs_badblocks_list_iterate (ext2_badblocks_iterate iter, blk_t *@var{blk}) 1134 @end deftypefun 1135 1136 @deftypefun void ext2fs_badblocks_list_iterate_end (ext2_badblocks_iterate @var{iter}) 1137 @end deftypefun 1138 1139 @deftypefun errcode_t ext2fs_update_bb_inode (ext2_filsys @var{fs}, ext2_badblocks_list @var{bb_list}) 1140 @end deftypefun 1141 1142 @deftypefun errcode_t ext2fs_read_bb_inode (ext2_filsys @var{fs}, ext2_badblocks_list *@var{bb_list}) 1143 @end deftypefun 1144 1145 @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})) 1146 @end deftypefun 1147 1148 1149 @c ---------------------------------------------------------------------- 1150 1151 @node Directory-block list management, Inode count functions, Badblocks list management, EXT2 data abstractions 1152 @comment node-name, next, previous, up 1153 @subsection Directory-block list management 1154 1155 The dblist abstraction stores a list of blocks belonging to 1156 directories. This list can be useful when a program needs to interate 1157 over all directory entries in a filesystem; @code{e2fsck} does this in 1158 pass 2 of its operations, and @code{debugfs} needs to do this when it is 1159 trying to turn an inode number into a pathname. 1160 1161 @deftypefun errcode_t ext2fs_init_dblist (ext2_filsys @var{fs}, ext2_dblist *@var{ret_dblist}) 1162 1163 Creates a dblist data structure and return it in @var{ret_dblist}. 1164 @end deftypefun 1165 1166 @deftypefun void ext2fs_free_dblist (ext2_dblist @var{dblist}) 1167 1168 Free a dblist data structure. 1169 @end deftypefun 1170 1171 @deftypefun errcode_t ext2fs_add_dir_block (ext2_dblist @var{dblist}, ext2_ino_t @var{ino}, blk_t @var{blk}, int @var{blockcnt}) 1172 1173 Add an entry to the dblist data structure. This call records the fact 1174 that block number @var{blockcnt} of directory inode @var{ino} is stored 1175 in block @var{blk}. 1176 @end deftypefun 1177 1178 @deftypefun errcode_t ext2fs_set_dir_block (ext2_dblist @var{dblist}, ext2_ino_t @var{ino}, blk_t @var{blk}, int @var{blockcnt}) 1179 1180 Change an entry in the dblist data structure; this changes the location 1181 of block number @var{blockcnt} of directory indoe @var{ino} to be block 1182 @var{blk}. 1183 @end deftypefun 1184 1185 @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}) 1186 1187 This iterator calls @var{func} for every entry in the dblist data structure. 1188 @end deftypefun 1189 1190 @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}) 1191 1192 This iterator takes reads in the directory block indicated in each 1193 dblist entry, and calls @var{func} for each directory entry in each 1194 directory block. If @var{dblist} contains all the directory blocks in a 1195 filesystem, this function provides a convenient way to iterate over all 1196 directory entries for that filesystem. 1197 @end deftypefun 1198 1199 @c ---------------------------------------------------------------------- 1200 1201 @node Inode count functions, , Directory-block list management, EXT2 data abstractions 1202 @comment node-name, next, previous, up 1203 @subsection Inode count functions 1204 1205 The icount abstraction is a specialized data type used by @code{e2fsck} 1206 to store how many times a particular inode is referenced by the 1207 filesystem. This is used twice; once to store the actual number of times 1208 that the inode is reference; and once to store the claimed number of times 1209 the inode is referenced according to the inode structure. 1210 1211 This abstraction is designed to be extremely efficient for storing this 1212 sort of information, by taking advantage of the following properties of 1213 inode counts, namely (1) inode counts are very often zero (because 1214 the inode is currrently not in use), and (2) many files have a inode 1215 count of 1 (because they are a file which has no additional hard links). 1216 1217 @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}) 1218 1219 Creates an icount stucture for a filesystem @var{fs}, with initial space 1220 for @var{size} inodes whose count is greater than 1. The @var{flags} 1221 parameter is either 0 or @code{EXT2_ICOUNT_OPT_INCREMENT}, which 1222 indicates that icount structure should be able to increment inode counts 1223 quickly. The icount structure is returned in @var{ret}. The returned 1224 icount structure initially has a count of zero for all inodes. 1225 1226 The @var{hint} parameter allows the caller to optionally pass in another 1227 icount structure which is used to initialize the array of inodes whose 1228 count is greater than 1. It is used purely as a speed optimization so 1229 that the icount structure can determine in advance which inodes are 1230 likely to contain a count grater than 1. 1231 @end deftypefun 1232 1233 @deftypefun void ext2fs_free_icount (ext2_icount_t @var{icount}) 1234 1235 Frees an icount structure. 1236 @end deftypefun 1237 1238 @deftypefun errcode_t ext2fs_icount_fetch (ext2_icount_t @var{icount}, ext2_ino_t @var{ino}, __u16 *@var{ret}) 1239 1240 Returns in @var{ret} fetches the count for a particular inode @var{ino}. 1241 @end deftypefun 1242 1243 @deftypefun errcode_t ext2fs_icount_increment (ext2_icount_t @var{icount}, ext2_ino_t @var{ino}, __u16 *@var{ret}) 1244 1245 Increments the ref count for inode @var{ino}. 1246 @end deftypefun 1247 1248 @deftypefun errcode_t ext2fs_icount_decrement (ext2_icount_t @var{icount}, ext2_ino_t @var{ino}, __u16 *@var{ret}) 1249 1250 Decrements the ref count for inode @var{ino}. 1251 @end deftypefun 1252 1253 @deftypefun errcode_t ext2fs_icount_store (ext2_icount_t @var{icount}, ext2_ino_t @var{ino}, __u16 @var{count}) 1254 1255 Sets the reference count for inode @var{ino} to be @var{count}. 1256 @end deftypefun 1257 1258 @deftypefun ext2_ino_t ext2fs_get_icount_size (ext2_icount_t @var{icount}) 1259 1260 Returns the current number of inodes in @var{icount} which has a count 1261 greater than 1. 1262 @end deftypefun 1263 1264 @deftypefun errcode_t ext2fs_icount_validate (ext2_icount_t @var{icount}, FILE *@var{f}) 1265 1266 Validates the internal rep invariant of @var{icount}; if there are any 1267 problems, print out debugging information to @var{f}. This function is 1268 intended for debugging and testing use only. 1269 @end deftypefun 1270 1271 1272 @c ---------------------------------------------------------------------- 1273 1274 @node Byte-swapping functions, Other functions, EXT2 data abstractions, EXT2FS Library Functions 1275 @comment node-name, next, previous, up 1276 @section Byte-swapping functions 1277 1278 @deftypefun void ext2fs_swap_super (struct ext2_super_block * @var{super}) 1279 @end deftypefun 1280 1281 @deftypefun void ext2fs_swap_group_desc (struct ext2_group_desc *@var{gdp}) 1282 @end deftypefun 1283 1284 @deftypefun void ext2fs_swap_inode (ext2_filsys @var{fs}, struct ext2_inode *@var{to}, struct ext2_inode *@var{from}, int @var{hostorder}) 1285 @end deftypefun 1286 1287 @deftypefun int ext2fs_native_flag (void) 1288 @end deftypefun 1289 1290 1291 @c ---------------------------------------------------------------------- 1292 1293 @node Other functions, , Byte-swapping functions, EXT2FS Library Functions 1294 @comment node-name, next, previous, up 1295 @section Other functions 1296 1297 /* alloc.c */ 1298 @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}) 1299 @end deftypefun 1300 1301 @deftypefun errcode_t ext2fs_new_block (ext2_filsys @var{fs}, blk_t @var{goal}, ext2fs_block_bitmap @var{map}, blk_t *@var{ret}) 1302 @end deftypefun 1303 1304 @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}) 1305 @end deftypefun 1306 1307 /* check_desc.c */ 1308 @deftypefun errcode_t ext2fs_check_desc (ext2_filsys @var{fs}) 1309 @end deftypefun 1310 1311 @deftypefun errcode_t ext2fs_get_num_dirs (ext2_filsys @var{fs}, ext2_ino_t *@var{ret_num_dirs}) 1312 @end deftypefun 1313 1314 1315 /* getsize.c */ 1316 @deftypefun errcode_t ext2fs_get_device_size (const char *@var{file}, int @var{blocksize}, blk_t *@var{retblocks}) 1317 @end deftypefun 1318 1319 1320 /* ismounted.c */ 1321 @deftypefun errcode_t ext2fs_check_if_mounted (const char *@var{file}, int *@var{mount_flags}) 1322 @end deftypefun 1323 1324 /* version.c */ 1325 1326 @deftypefun int ext2fs_get_library_version (const char **@var{ver_string}, const char **@var{date_string}) 1327 1328 This function returns the current version of the ext2 library. The 1329 return value contains an integer version code, which consists of the 1330 major version number of the library multiplied by 100, plus the minor 1331 version number of the library. Hence, if the library version is 1.08, 1332 the returned value will be 108. 1333 1334 If @var{ver_string} and/or @var{date_string} are non-NULL, they will be 1335 set to point at a constant string containing the library version and/or 1336 release date, respectively. 1337 @end deftypefun 1338 1339 @deftypefun int ext2fs_parse_version_string (const char *@var{ver_string}) 1340 1341 This function takes a version string which may included in an 1342 application and returns a version code using the same algorithm used by 1343 @code{ext2fs_get_library_version}. It can be used by programs included 1344 in the @code{e2fsprogs} distribution to assure that they are using an 1345 up-to-date ext2 shared library. 1346 @end deftypefun 1347 1348 /* inline functions */ 1349 @deftypefun int ext2fs_group_of_blk (ext2_filsys @var{fs}, blk_t @var{blk}) 1350 1351 This function returns the block group which contains the block @var{blk}. 1352 1353 @end deftypefun 1354 1355 @deftypefun int ext2fs_group_of_ino (ext2_filsys @var{fs}, ext2_ino_t @var{ino}) 1356 1357 This function returns the block group which contains the inode @var{ino}. 1358 @end deftypefun 1359 1360 1361 @c ---------------------------------------------------------------------- 1362 1363 @node Concept Index, Function Index, EXT2FS Library Functions, Top 1364 @comment node-name, next, previous, up 1365 @unnumbered Concept Index 1366 @printindex cp 1367 1368 @c ---------------------------------------------------------------------- 1369 1370 @node Function Index, , Concept Index, Top 1371 @comment node-name, next, previous, up 1372 @unnumbered Function and Type Index 1373 @printindex fn 1374 1375 1376 @contents 1377 @bye 1378