#include #include #include #include #include #include #include static void emptyIT() { return; } static void hddIT() { return; } int main(int argc, char *argv[]) { unsigned int i; /* init hardware */ if(initHardware("hardware.ini") == 0) { fprintf(stderr, "Error in hardware initialization\n"); exit(EXIT_FAILURE); } /* Interreupt handlers */ for(i=0; i<16; i++) IRQVECTOR[i] = emptyIT; IRQVECTOR[HDA_IRQ] = hddIT; /* Allows all IT */ _mask(1); if ( argc < 4 ) { printf("Utilisation : %s VOLUME CHEMIN\n", argv[0]); return EXIT_FAILURE; } unsigned int volume = atoi(argv[1]); if ( mount(volume) < 0 ) { printf("Erreur de montage du volume!\n"); return EXIT_FAILURE; } /* Ouvrir la source */ struct file_desc_t src; if ( open_file(&src, argv[2]) < 0 ) { printf("Le fichier source n'existe pas.\n"); umount(); return EXIT_FAILURE; } /* Vérifier qu'il s'agit d'un fichier régulier */ if ( src.type != FILET_REG ) { printf("Ce n'est pas un fichier!\n"); close_file(&src); umount(); return EXIT_FAILURE; } /* Créer le fichier cible */ int r = create_file(argv[3], FILET_REG); if ( r <= 0 ) { printf("Impossible de créer le fichier cible (le fichier existe?).\n"); close_file(&src); umount(); return EXIT_FAILURE; } /* Ouvrir la cible */ struct file_desc_t dst; if ( open_file(&dst, argv[3]) < 0 ) { printf("Erreur d'ouverture du fichier cible.\n"); umount(); close_file(&src); return EXIT_FAILURE; } char buf[50]; int c; while( (c = read_file(&src, buf, sizeof(buf))) > 0 ) write_file(&dst, buf, c); close_file(&src); close_file(&dst); printf("Fichié copié!\n"); umount(); return EXIT_SUCCESS; }