From 24bc95ab9e6875e7c6b4d668bfd1e4e9275c60be Mon Sep 17 00:00:00 2001
From: dling <dylan.ling.etu@univ-lille.fr>
Date: Wed, 20 Dec 2023 22:43:49 +0100
Subject: [PATCH] =?UTF-8?q?ajout=20de=20la=20fonction=20append=20=C3=A0=20?=
 =?UTF-8?q?la=20commande=20TYPE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 SD/picofs.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/SD/picofs.c b/SD/picofs.c
index 0878e48..ba75910 100755
--- a/SD/picofs.c
+++ b/SD/picofs.c
@@ -254,7 +254,7 @@ void TYPE(SD_info *sd, char *filename, char *data) {
     int block_counter = 1; //compteur de blocs utilisés
     int index_in_descrBlock = 0;
     int offset;
-
+    int append_command = -1;
 
     if (sizeFilename > MAX_FILENAME_LENGTH) {
         printf("\nImpossible de créer le fichier, nom trop long\n");
@@ -265,7 +265,19 @@ void TYPE(SD_info *sd, char *filename, char *data) {
     for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) {
         readBlock(sd,blockNum, 0, buffer, MAX_FILENAME_LENGTH);
         // Vérifier si le bloc est vide (pas de nom de fichier)
-        if (buffer[0] == 0) {
+        if (strncmp(buffer,filename,strlen(filename))==0) //si même nom de fichier alors on concatenne les data
+        {
+            append_command = 1;
+            char append_description_buffer[CHUNK_SIZE]; // récupère le numéro du bloc dans la description
+            char append_buffer[CHUNK_SIZE]; //récupère les données finales à écrire dans le bloc de donnée
+            readBlock(sd, blockNum+1, 0, append_description_buffer, 2);
+            int dataBlockNum = reconstituteNumber(append_description_buffer);
+            readBlock(sd, dataBlockNum, 0, append_buffer, CHUNK_SIZE);
+            strcat(append_buffer, data); //former les données finales
+            writeBlock(sd, dataBlockNum, 0, append_buffer, CHUNK_SIZE); // écrire dans bloc de donnée, rien à fiare dans description
+            break;
+        }
+        else if (buffer[0] == 0) {
             // Écrire le nom du fichier dans l'emplacement vide du superbloc
             if (sizeFilename < MAX_FILENAME_LENGTH) {
                 sizeFilename += 1; // Ajouter '\0' s'il y a de la place
@@ -336,7 +348,8 @@ void TYPE(SD_info *sd, char *filename, char *data) {
     if (placeFound != -1) {
         printf("Le fichier \"%s\" a été créé avec succès.\n", filename);
     } else {
-        printf("Plus de place dans le système de fichier pour créer ce fichier.\n");
+        if(append_command == 1) printf("Les données ont été concaténées dans le fichier %s\n",filename);
+        else printf("Plus de place dans le système de fichier pour créer ce fichier.\n");
     }
 
 
-- 
GitLab