Skip to content
Snippets Groups Projects
Select Git revision
  • 51dc08d892c1f251e34ad83578aeed591d7152d7
  • master default protected
2 results

read_file.c

Blame
  • read_file.c 1.04 KiB
    #include <libgen.h>
    #include <minix.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[]) {
        if (argc != 3) {
            fprintf(stderr, "Usage :\n");
            fprintf(stderr, "\t./%s <image file> <inode n°>\n", basename(argv[0]));
            exit(EXIT_FAILURE);
        }
    
        struct minix_inode inode = {0};
        int inode_nb = atoi(argv[2]);
    
        unmarshal_inode(&inode, inode_nb, argv[1]);
    
        int nb_blocks_used = inode.i_size / BLOCK_SIZE;
        if (inode.i_size % BLOCK_SIZE != 0) {
            nb_blocks_used++;
        }
    
        for (int i = 0; i < nb_blocks_used; i++) {
            ssize_t phys_num = bmap(&inode, argv[1], i);
    
            if (phys_num == -1) {
                fprintf(stderr, "bmap has failed...\n");
                exit(EXIT_FAILURE);
            }
    
            char buf[BLOCK_SIZE + 1] = {0};
    
            if (read_data_block(buf, argv[1], phys_num) == -1) {
                fprintf(stderr, "read_data_block has failed...\n");
                exit(EXIT_FAILURE);
            }
    
            fprintf(stdout, "%s", buf);
        }
    
        fprintf(stdout, "\n");
    
        return EXIT_SUCCESS;
    }