| 311 | | ////////////////////////////////////////////////////////////////////////////////// |
| 312 | | // The following function introduces the inode identified by the <child> argument, |
| 313 | | // as a new child of the <parent> inode in the Inode-Tree. |
| 314 | | // All checking are supposed to be done by the caller. |
| 315 | | // Nor the File-Cache, neither the block device are modified. |
| 316 | | ////////////////////////////////////////////////////////////////////////////////// |
| 317 | | |
| 318 | | static void _add_inode_in_tree( fat_inode_t* child, |
| 319 | | fat_inode_t* parent ); |
| 320 | | |
| 321 | | ////////////////////////////////////////////////////////////////////////////////// |
| 322 | | // The following function removes one inode identified by the <inode> argument |
| 323 | | // from the Inode-Tree. All checking are supposed to be done by the caller. |
| 324 | | // Nor the File-Cache, neither the block device are modified. |
| 325 | | ////////////////////////////////////////////////////////////////////////////////// |
| 326 | | |
| 327 | | static void _remove_inode_from_tree( fat_inode_t* inode ); |
| 328 | | |
| 329 | | ////////////////////////////////////////////////////////////////////////////////// |
| 330 | | // This recursive function scan one File-Cache (or Fat-Cache) from root to leaves, |
| 331 | | // to writes all dirty clusters to block device, and reset the dirty bits. |
| 332 | | // The cache is identified by the <root> an <levels> arguments. |
| 333 | | // The <string> argument is only used for debug : inode name or Fat. |
| 334 | | // It returns 0 on success. |
| 335 | | // It returns 1 on error. |
| 336 | | ////////////////////////////////////////////////////////////////////////////////// |
| 337 | | |
| 338 | | static unsigned int _update_device_from_cache( unsigned int levels, |
| 339 | | fat_cache_node_t* root, |
| 340 | | char* string ); |
| | 315 | === __void '''_add_inode_in_tree'''( fat_inode_t* child , fat_inode_t* parent )__ === |
| | 316 | This function introduces the inode identified by the <child> argument as a new child for the <parent> inode in the Inode-Tree. |
| | 317 | All checking are supposed to be done by the caller. Nor the File-Cache, neither the block device are modified. |
| | 318 | |
| | 319 | === __void '''_remove_inode_from_tree'''( fat_inode_t* inode )__ === |
| | 320 | This function removes one inode identified by the <inode> argument from the Inode-Tree. All checking are supposed to be done by the caller. Nor the File-Cache, neither the block device are modified. |
| | 321 | |
| | 322 | === __unsigned int '''_update_device_from_cache'''( unsigned int levels , fat_cache_node_t* root , char* string )__ === |
| | 323 | This recursive function scan one File-Cache (or the Fat-Cache) from root to leaves, to writes all dirty clusters to block device, and reset the dirty bits. The cache is identified by the <root> an <levels> arguments. |
| | 324 | The <string> argument is only used for debug. It returns 0 on success. It returns 1 on error. |
| | 325 | |
| | 326 | |
| 584 | | ///////////////////////////////////////////////////////////////////////////// |
| 585 | | // This function return the cluster index and the size for a file |
| 586 | | // identified by the "pathname" argument, scanning directly the block |
| 587 | | // device DATA region. |
| 588 | | // It is intended to be called only by the _fat_load_no_cache() function, |
| 589 | | // it does not use the dynamically allocated File Caches, but uses only |
| 590 | | // the 4 Kbytes _fat_buffer_data. |
| 591 | | // It returns 0 on success. |
| 592 | | // It returns 1 on error. |
| 593 | | ///////////////////////////////////////////////////////////////////////////// |
| 594 | | |
| 595 | | static unsigned int _file_info_no_cache( char* pathname, |
| 596 | | unsigned int* file_cluster, |
| 597 | | unsigned int* file_size ); |
| 598 | | |
| 599 | | ///////////////////////////////////////////////////////////////////////////// |
| 600 | | // This function scan directly the FAT region on the block device, |
| 601 | | // and returns in the "next" argument the value stored in the fat slot |
| 602 | | // identified by the "cluster" argument. |
| 603 | | // It is intended to be called only by the _fat_load_no_cache() function, |
| 604 | | // as it does not use the dynamically allocated Fat-Cache, but uses only |
| 605 | | // the 4 Kbytes _fat_buffer_fat. |
| 606 | | // It returns 0 on success. |
| 607 | | // It returns 1 on error. |
| 608 | | ///////////////////////////////////////////////////////////////////////////// |
| 609 | | |
| 610 | | static unsigned int _next_cluster_no_cache( unsigned int cluster, |
| 611 | | unsigned int* next ); |
| 612 | | |
| 613 | | |
| 614 | | ////////////////////////////////////////////////////////////////////////////////// |
| 615 | | // The following functions return the the size (bytes) of a FAT field, |
| 616 | | // identified by an (offset,length) mnemonic defined in the fat32.h file. |
| 617 | | ////////////////////////////////////////////////////////////////////////////////// |
| 618 | | |
| 619 | | static inline int get_length( int offset , int length ) { return length; } |
| 620 | | |
| 621 | | static inline int get_offset( int offset , int length ) { return offset; } |
| 622 | | |
| 623 | | ////////////////////////////////////////////////////////////////////////////////// |
| 624 | | // The following function returns in the <desc> argument a pointer on a buffer |
| 625 | | // descriptor contained in the Fat_Cache. |
| 626 | | // The <cluster_id> argument is the buffer index in the FAT_Cache. |
| 627 | | // In case of miss, a 4 Kbytesbuffer and a buffer descriptor are allocated |
| 628 | | // from the local heap, and the missing cluster is loaded in the Fat_Cache. |
| 629 | | // It returns 0 on success. |
| 630 | | // It returns 1 on error. |
| 631 | | ////////////////////////////////////////////////////////////////////////////////// |
| 632 | | |
| 633 | | static unsigned int _get_fat_cache_buffer( unsigned int cluster_id, |
| 634 | | fat_cache_desc_t** desc ); |
| 635 | | |
| 636 | | |
| | 570 | |
| | 571 | === __unsigned int '''_file_info_no_cache'''( char* pathname , unsigned int* file_cluster , unsigned int* file_size )__ === |
| | 572 | This function returns in the <file_cluster> and <file_size> arguments the cluster index and the size for a file identified by the <pathname> argument, scanning directly the block device DATA region. |
| | 573 | It is intended to be called only by the _fat_load_no_cache() function, as it does not use the dynamically allocated File-Caches, but uses only the 4 Kbytes _fat_buffer_data. |
| | 574 | It returns 0 on success. It returns 1 on error. |
| | 575 | |
| | 576 | === __unsigned int '''_next_cluster_no_cache'''( unsigned int cluster , unsigned int* next )__ === |
| | 577 | This function scan directly the FAT region on the block device, and returns in the <next> argument the value stored in the fat slot identified by the <cluster> argument. It is intended to be called only by the _fat_load_no_cache() function, as it does not use the dynamically allocated Fat-Cache, but uses only the 4 Kbytes _fat_buffer_fat. It returns 0 on success. It returns 1 on error. |
| | 578 | |
| | 579 | === __int '''get_length'''( int offset , int length )__ === |
| | 580 | This function returns the the size (bytes) of a FAT field, identified by an <offset,length> mnemonic defined in the fat32.h file. |
| | 581 | |
| | 582 | === __int '''get_offset'''( int offset , int length )__ === |
| | 583 | This function returns the the offset (bytes) of a FAT field, identified by an <offset,length> mnemonic defined in the fat32.h file. |