Select Git revision
read_file.c
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;
}