[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] fdisk: Bugfix



From: Nico Mayer <nico.mayer@xxxxxxxxxxxxxxxx>

! fdisk: In der Headerdatei partition.h werden zwei globale Variablen definiert (device_name und device_numheads). Dies kann zu einem Fehler beim Compilieren führen. Die beiden gobalen Variablen sollten sattdessen in partition.c definiert werden.
---
 src/modules/c/fdisk/partition.c | 48 ++++++++++++++++++---------------
 src/modules/c/fdisk/partition.h | 17 ++++++------
 2 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/src/modules/c/fdisk/partition.c b/src/modules/c/fdisk/partition.c
index 0ee0645a..9bc06418 100644
--- a/src/modules/c/fdisk/partition.c
+++ b/src/modules/c/fdisk/partition.c
@@ -39,6 +39,12 @@
 #include "partition.h"
 #include "typeids.h"
 
+/// Ein Zeiger auf argv[1] oder besser gesagt den Laufwerksnamen
+char* device_name;
+
+/// Anzahl der Heads
+unsigned long device_numheads;
+
 /// Kopie des MBR
 unsigned char mbr[512];
 
@@ -53,10 +59,10 @@ void uncompress_chs(uint8_t* compressed, unsigned int* cylinder,
     unsigned int* head, unsigned int* sector)
 {
     *head = compressed[0];
-    
+
     *cylinder = (compressed[1] & 0xC0) << 2;
     *cylinder += compressed[2];
-    
+
     *sector = compressed[1] & 0x3F;
 }
 void compress_chs(uint8_t* compressed, unsigned int cylinder,
@@ -74,12 +80,12 @@ void compress_chs(uint8_t* compressed, unsigned int cylinder,
     if (sector < 1) {
         sector = 1;
     }
-    
+
     compressed[0] = head;
-    
+
     compressed[1] = (cylinder & 0x300) >> 2;
     compressed[1] += sector;
-    
+
     compressed[2] = cylinder & 0xFF;
 }
 unsigned int chs2lba(unsigned int cylinder, unsigned int head,
@@ -100,7 +106,7 @@ void lba2chs(unsigned int lba, unsigned int* cylinder, unsigned int* head,
 int apply_changes()
 {
     // TODO extended/logical partitions unterstuetzen
-    
+
     // Datei/Laufwerk oeffnen
     FILE* dev = fopen(device_name, "w");
     if (dev == 0) {
@@ -108,7 +114,7 @@ int apply_changes()
             "Aenderungen wurden nicht geschrieben!\n", device_name);
         return -1;
     }
-    
+
     // Die im RAM liegende Kopie des MBR aktualisieren, ohne jedoch den Code-
     // Teil zu aendern
     int i;
@@ -126,24 +132,24 @@ int apply_changes()
                 sizeof(struct partition_entry_t));
         }
     }
-    
+
     // Die Boot Signature nocheinmal setzen, um sicher zu gehen, dass diese
     // auch wirklich korrekt ist
     uint16_t* signature = (uint16_t*)(mbr + BOOT_SIGNATURE_POS);
     *signature = BOOT_SIGNATURE;
-    
+
     // Neuen MBR schreiben, den Output Buffer leeren und die Datei schliessen
     fwrite(mbr, 1, 512, dev);
     fflush(dev);
     fclose(dev);
-    
+
     return 0;
 }
 
 void delete_partition(struct partition_t* p)
 {
     // TODO extended/logical partitions unterstuetzen
-    
+
     memset(&(p->data), 0, sizeof(struct partition_entry_t));
     p->number = 0;
     p->exists = 0;
@@ -159,10 +165,10 @@ static void create_new_mbr_partition_table(void)
 int read_partitions(char* filename)
 {
     // TODO extended/logical partitions unterstuetzen
-    
+
     // Dateinamen speichern
     device_name = filename;
-    
+
     // Laufwerk/Datei oeffnen und MBR lesen
     FILE* dev = fopen(filename, "r");
     if (dev == 0) {
@@ -170,7 +176,7 @@ int read_partitions(char* filename)
         return -1;
     }
     fread(mbr, 1, 512, dev);
-    
+
     // Boot Signature ueberpruefen
     if (*(uint16_t*)(&mbr[BOOT_SIGNATURE_POS]) != BOOT_SIGNATURE) {
         printf("Ungueltige Boot Signatur!\nfdisk wird eine neue Partitions"
@@ -178,7 +184,7 @@ int read_partitions(char* filename)
             "beachtet werden.\n");
         create_new_mbr_partition_table();
     }
-    
+
     // Die Partitionstabelle analysieren und in die internen Strukturen
     // kopieren
     int i;
@@ -190,7 +196,7 @@ int read_partitions(char* filename)
         if (mbr_partitions[i].data.type) {
             mbr_partitions[i].number = i + 1;
             mbr_partitions[i].exists = 1;
-            
+
             // Handelt es sich um eine extended Partition?
             if (mbr_partitions[i].data.type == TYPE_EXTENDED_PARTITION_1 ||
                 mbr_partitions[i].data.type == TYPE_EXTENDED_PARTITION_2 ||
@@ -209,10 +215,10 @@ int read_partitions(char* filename)
             mbr_partitions[i].type = PARTITION_TYPE_PRIMARY;
         }
     }
-    
+
     // Datei schliessen
     fclose(dev);
-    
+
     return 0;
 }
 
@@ -220,19 +226,19 @@ void create_partition(struct partition_t* p, unsigned int number,
     unsigned int start_lba, unsigned int end_lba)
 {
     // TODO extended/logical partitions unterstuetzen
-    
+
     // Die LBA Daten ins CHS Format konvertieren
     unsigned int start_cyl, start_head, start_sec;
     lba2chs(start_lba, &start_cyl, &start_head, &start_sec);
     unsigned int end_cyl, end_head, end_sec;
     lba2chs(end_lba, &end_cyl, &end_head, &end_sec);
-    
+
     // Daraus die "komprimierten" CHS Eintraege erstellen
     uint8_t start_chs[3];
     compress_chs(start_chs, start_cyl, start_head, start_sec);
     uint8_t end_chs[3];
     compress_chs(end_chs, end_cyl, end_head, end_sec);
-    
+
     // Die Strukturen entsprechend anpassen
     p->exists = 1;
     p->number = number;
diff --git a/src/modules/c/fdisk/partition.h b/src/modules/c/fdisk/partition.h
index 8955983f..e02868a1 100644
--- a/src/modules/c/fdisk/partition.h
+++ b/src/modules/c/fdisk/partition.h
@@ -55,13 +55,8 @@
 #define PARTITION_TYPE_EXTENDED 1
 #define PARTITION_TYPE_LOGICAL 2
 
-/// Ein Zeiger auf argv[1] oder besser gesagt den Laufwerksnamen
-char* device_name;
-
-/// Anzahl der Heads
-unsigned long device_numheads;
 
-/** 
+/**
  * Ein einzelner Eintrag der Partitionstabelle, wie er auch auf der Festplatte
  * vorkommt.
  */
@@ -81,7 +76,7 @@ struct partition_t
     int exists;              ///< 1, wenn die Partition existiert; 0 wenn nicht
     unsigned int number;     ///< Nummer der Partition, beginnend mit 1
     int type;                ///< 0 = primary, 1 = extended, 2 = logical
-    
+
     struct partition_entry_t data; ///< Die eigentlichen Daten
 };
 
@@ -116,10 +111,16 @@ void delete_partition(struct partition_t* p);
 void create_partition(struct partition_t* p, unsigned int number,
     unsigned int start_lba, unsigned int end_lba);
 
-/// Kopie des MBR 
+/// Kopie des MBR
 extern unsigned char mbr[512];
 
 /// Array fuer die Primary Partitions
 extern struct partition_t mbr_partitions[4];
 
+/// Ein Zeiger auf argv[1] oder besser gesagt den Laufwerksnamen
+extern char* device_name;
+
+/// Anzahl der Heads
+extern unsigned long device_numheads;
+
 #endif
-- 
2.26.2