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. |