diff --git a/tpfs/vol.c b/tpfs/vol.c
index 8f5f430bcf8531d4b69ad8765b33bc4474dfb5c7..4386aa2d08418196c0c95e3b58c9ee4d707bea4b 100644
--- a/tpfs/vol.c
+++ b/tpfs/vol.c
@@ -11,7 +11,9 @@ void load_mbr()
int i;
unsigned char buffer[sizeof(mbr_t)];
- read_sector(buffer, 0, 0);
+ /* read_sector(buffer, 0, 0); */
+ read_sector_n(buffer, 0, 0, sizeof(mbr_t));
+
mbr.magic = buffer[0] + (buffer[1] << 8);
if (mbr.magic == MBR_MAGIC)
@@ -21,7 +23,7 @@ void load_mbr()
{
mbr.vols[i].sector = buffer[3 + (i * 4)];
mbr.vols[i].cylinder = buffer[4 + (i * 4)];
- mbr.vols[i].nb_sectors = buffer[5 + (i * 4)];
+ mbr.vols[i].nb_blocs = buffer[5 + (i * 4)];
mbr.vols[i].type = buffer[6 + (i * 4)];
}
return;
@@ -43,48 +45,58 @@ void save_mbr()
{
buffer[3 + (i * 4)] = mbr.vols[i].sector;
buffer[4 + (i * 4)] = mbr.vols[i].cylinder;
- buffer[5 + (i * 4)] = mbr.vols[i].nb_sectors;
+ buffer[5 + (i * 4)] = mbr.vols[i].nb_blocs;
buffer[6 + (i * 4)] = mbr.vols[i].type;
}
write_sector(0, 0, buffer);
}
-unsigned int *get_sector_cylinder(unsigned int vol, unsigned int nbloc)
+void get_sector_cylinder(unsigned int vol, unsigned int nbloc, unsigned int *sector_cylinder)
{
- int sector_cylinder[2], absolute_nbloc;
+ int absolute_nbloc;
vol_t volume;
assert(vol < mbr.nb_vols);
volume = mbr.vols[vol];
- assert(nbloc < volume.nb_sectors);
+ assert(nbloc < volume.nb_blocs);
absolute_nbloc = (volume.cylinder * HDA_MAXSECTOR + volume.sector + nbloc);
sector_cylinder[0] = absolute_nbloc % HDA_MAXSECTOR;
sector_cylinder[1] = absolute_nbloc / HDA_MAXCYLINDER;
- return sector_cylinder;
}
void read_bloc(unsigned int vol, unsigned int nbloc, unsigned char *buffer)
{
- int sector_cylinder[2] = get_sector_cylinder(vol, nbloc); // [sector, cylinder]
+ unsigned int sector_cylinder[2];
+ get_sector_cylinder(vol, nbloc, sector_cylinder); /* [sector, cylinder] */
read_sector(buffer, sector_cylinder[1], sector_cylinder[0]);
}
-void write_bloc(unsigned int vol, unsigned int nbloc, const unsigned char *buffer)
+void write_bloc(unsigned int vol, unsigned int nbloc, unsigned char *buffer)
{
- int sector_cylinder[2] = get_sector_cylinder(vol, nbloc); // [sector, cylinder]
+ unsigned int sector_cylinder[2];
+ get_sector_cylinder(vol, nbloc, sector_cylinder); /* [sector, cylinder] */
write_sector(sector_cylinder[1], sector_cylinder[0], buffer);
}
void format_vol(unsigned int vol)
{
- unsigned int nbloc;
+ unsigned int nbloc, sector_cylinder[2];
vol_t volume = mbr.vols[vol];
- for (nbloc = 0; nbloc < volume.nb_sectors; nbloc++)
+ for (nbloc = 0; nbloc < volume.nb_blocs; nbloc++)
{
- int sector_cylinder[2] = get_sector_cylinder(vol, nbloc);
+ get_sector_cylinder(vol, nbloc, sector_cylinder); /* [sector, cylinder] */
format_sector(sector_cylinder[1], sector_cylinder[1], FMT_SIZE, FMT_DATA);
}
+}
+
+void read_sector_n(unsigned char *buf, int cylinder, int sector, int size)
+{
+ int i;
+ unsigned char buffer[HDA_SECTORSIZE];
+ read_sector(buffer, cylinder, sector);
+ for (i = 0; i < size; i++)
+ buf[i] = buffer[i];
}
\ No newline at end of file
diff --git a/tpfs/vol.h b/tpfs/vol.h
index e16cbe854be0ce12964a97254c66032e3b215e1e..27cccca7694656949fa1b74346aa06180e0bc2f0 100644
--- a/tpfs/vol.h
+++ b/tpfs/vol.h
@@ -2,38 +2,40 @@
#define VOL_H
#define VOLS_MAX 8
-#define MBR_MAGIC 0xCAFE // Savoir si le mbr a déjà été initialisé ou non
+#define MBR_MAGIC 0xCAFE /* Savoir si le mbr a déjà été initialisé ou non */
#define FMT_DATA 0xCAFEBABE
#define FMT_SIZE 0x1
-static mbr_t mbr;
-
typedef enum
{
BASE,
ANNEXE,
OTHER
-} vtypes_t; // Volume type
+} vtypes_t; /* Volume type */
typedef struct vol_s
{
unsigned int sector;
unsigned int cylinder;
- unsigned int nb_sectors;
+ unsigned int nb_blocs;
vtypes_t type;
} vol_t;
typedef struct mbr_s
{
unsigned int magic;
- unsigned int nb_vols; // nombre de volumes actuels
+ unsigned int nb_vols; /* nombre de volumes actuels */
vol_t vols[VOLS_MAX];
} mbr_t;
+mbr_t mbr;
+
void load_mbr(void);
void save_mbr(void);
-unsigned int *get_sector_cylinder(unsigned int vol, unsigned int nbloc);
+void get_sector_cylinder(unsigned int vol, unsigned int nbloc, unsigned int *sector_cylinder);
void read_bloc(unsigned int vol, unsigned int nbloc, unsigned char *buffer);
-void write_bloc(unsigned int vol, unsigned int nbloc, const unsigned char *buffer);
+void write_bloc(unsigned int vol, unsigned int nbloc, unsigned char *buffer);
+
+void read_sector_n(unsigned char *buf, int cylinder, int sector, int size);
-#endif // VOL_H
+#endif