sfat_create.c
Vai alla documentazione di questo file.00001
00013 #include <stdio.h>
00014 #include <stdlib.h>
00015 #include <errno.h>
00016 #include <sys/stat.h>
00017 #include <limits.h>
00018
00019 #include "../../Fat/Src/Include/format.h"
00020 #include "../../Fat/Src/Include/sfaterror.h"
00021 #include "../../Fat/Src/Include/fat_defs.h"
00022
00032 int main(int argc, char **argv){
00033 FILE *fs = NULL;
00034 char *endptr;
00035 int block_size=0;
00036 unsigned int num_block=0;
00037 struct stat buf;
00038
00039
00040 if (argc<2){
00041 fprintf(stderr,"sfat_create: Errore nome filesystem mancante\n");
00042 exit(EXIT_FAILURE);
00043 }
00044 else if (argc<3){
00045 fprintf(stderr,"sfat_create: Errore numero di blocchi mancante\n");
00046 exit(EXIT_FAILURE);
00047 }
00048 else if (argc<4){
00049 fprintf(stderr,"sfat_create: Errore dimensione dei blocchi mancante\n");
00050 exit(EXIT_FAILURE);
00051 }
00052 else if (lstat(argv[1], &buf) == 0){
00053 fprintf(stderr,"sfat_create: Errore file gia' esistente\n");
00054 exit(EXIT_FAILURE);
00055 }
00056
00057 num_block = strtoul(argv[2], &endptr, 10);
00058 if ((errno == ERANGE) || (errno != 0 && num_block == 0)) {
00059 perror("Strtoul");
00060 exit(EXIT_FAILURE);
00061 }
00062 if (endptr == argv[2]) {
00063 fprintf(stderr, "sfat_create: No digits were found\n");
00064 exit(EXIT_FAILURE);
00065 }
00066 if (num_block <= 0){
00067 fprintf(stderr, "sfat_create: error number blocks\n");
00068 exit(EXIT_FAILURE);
00069 }
00070
00071 block_size = strtol(argv[3], &endptr, 10);
00072 if (!((block_size==128) || (block_size==1024) || (block_size==2048) || (block_size==4096))){
00073 fprintf(stderr, "sfat_create: bad size block\n");
00074 return EWFCD;
00075 }
00076
00077 if (!(fs = fopen(argv[1],"w"))){
00078 perror(NULL);
00079 exit(EXIT_FAILURE);
00080 }
00081
00082 if (EWFCD == fat_format(fs, block_size, num_block)){
00083 sfaterror (EWFCD);
00084 if (fclose(fs)) perror(NULL);
00085 exit(EXIT_FAILURE);
00086 }
00087 printf("sfat_create: Sto creando %s di %d blocchi size %d\n", argv[1], num_block, block_size);
00088
00089 if (fclose(fs)){
00090 perror(NULL);
00091 exit(EXIT_FAILURE);
00092 }
00093 exit(EXIT_SUCCESS);
00094 return 0;
00095 }