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

Re: [Lost] [Patch] fdisk



Ich gehe jetzt mal in einem ersten Lauf vor allem inhaltlich drüber. Die Kommentare zur Form überlasse ich erstmal den anderen, es dürfte davon aber genug geben, denn der Code weicht vom üblichen LOST-Codestil in einigen Punkten ab.

Den einzigen Punkt, den ich dazu anmerken möchte, ist, daß der Code in LOST komplett auf deutsch kommentiert ist. LOST soll ja nicht zuletzt auch als Beispiel-OS für Lowlevel dienen, und was Lowlevel so besonders macht, ist, daß es eine _deutschsprachige_ Community zum Thema ist. Wir sollten deswegen auch die Erklärungen in den Kommentaren auf deutsch liefern.

+/* This is a single entry in the partition table. Its size should
+   be PARTITION_ENTRY_SIZE */
+struct partition_entry_t

Wieso hast du dann ein PARTITION_ENTRY_SIZE konstant definiert und arbeitest nicht einfach mit sizeof(partition_entry_t)?

+/* Contains all information about a single partition that is needed
+   by fdisk */
+struct partition_t
+{
+	char exists;				/* 1 if the partition exists, 0 if not */
+	unsigned int number;			/* Number of the partition, starting with 1 */
+	char type;				/* 0 is primary, 1 extended, 2 logical */

Ich würde eher unsigned char (oder gleich int) schreiben, bei char denke ich immer an ein ASCII-Zeichen.

+/* Delete a partition */
+void deletePartition(struct partition_t *p);
+/* Create a new partition */
+void createPartition(struct partition_t *p, unsigned int number, unsigned int start_cyl, unsigned int start_head, unsigned int start_sec, unsigned int start_lba,
+			unsigned int end_cyl, unsigned int end_head, unsigned int end_sec, unsigned int end_lba);

Wow. Mir hat man damals beigebracht, daß ich was falsch mache, wenn ich mehr als fünf Parameter brauche.

+
+#define PROG_VERSION "0.1"
+

Und du meinst, das wird jemals angepaßt werden? Nimm besser die SVN-Revision als Versionsnummer.

+/* This function takes to characters and converts them into a 8bit integer
+   For example: c1 = F and c2 = F => return value = 255 */
+unsigned char hex2uint8(char c1, char c2)

Wir haben ein sscanf.

+void shell()
+{
+	printf("Type h for help\n");
+	
+	char command_buffer[COMMAND_BUFFER_SIZE];
+	memset(command_buffer, 0, COMMAND_BUFFER_SIZE);
+	while(1)
+	{
+		/* Get input */
+		char *input = readline("> ");
+		if(input)
+		{
+			strncpy(command_buffer, input, COMMAND_BUFFER_SIZE);
+			free(input);

Wozu der extrapuffer?

Mehr dann, wenn ich wirklich Zeit habe.