Aaro Saila před 2 roky
rodič
revize
e20ea557a3
1 změnil soubory, kde provedl 46 přidání a 17 odebrání
  1. 46 17
      cfile.c

+ 46 - 17
cfile.c

@@ -7,18 +7,20 @@
 
 #define BUF_SIZE 256
 
+typedef struct node {
+  char* string;
+  struct node* next;
+} fifo;
+
+void fifo_append(fifo* head, char* new_string);
+char* fifo_read(fifo** head);
+
 int main(int argc, char* argv[]) {
   if (argc <= 1) {
     printf("Too few arguments\n");
     return 1;
   }
 
-  printf("%d\n", argc);
-
-  for (int i = 0; i < argc; i++) {
-    printf("%s\n", argv[i]);
-  }
-
   char name[strlen(argv[1]) + 2];
   strcpy(name, argv[1]);
   strcat(name, ".c");
@@ -27,7 +29,7 @@ int main(int argc, char* argv[]) {
 
   strcat(path, name);
 
-  int open_s = open(path, O_RDONLY, 0);
+  open(path, O_RDONLY, 0);
   
   if (errno == 0) {
     printf("File already exists.\n");
@@ -40,27 +42,26 @@ int main(int argc, char* argv[]) {
   int includes_n = argc - 2;
   int lines_n = 5 + includes_n;
 
-  char* lines[lines_n] = {};
-  int lines_i = 0;
+  fifo* lines_head = (fifo*) malloc(sizeof(fifo));
+  lines_head->string = "";
+  lines_head->next = NULL;
 
   if (argc > 2) {
     for (int i = 2; i < argc; i++) {
       char line[BUF_SIZE] = "#include <";
       strcat(line, argv[i]);
       strcat(line, ".h>\n");
-      lines[lines_i] = line;
-      lines_i++;
+      fifo_append(lines_head, line);
     }
-    lines[lines_i] = "\n";
+    fifo_append(lines_head, "\n");
   }
 
-  lines[++lines_i] = "int main() {\n";
-  lines[++lines_i] = "\n";
-  lines[++lines_i] = "  return 0;\n";
-  lines[++lines_i] = "}";
+  fifo_append(lines_head, "int main() {\n\n");
+  fifo_append(lines_head, "  return 0;\n");
+  fifo_append(lines_head, "}");
 
   for (int i = 0; i < lines_n; i++) {
-    write(fd, lines[i], strlen(lines[i]));
+    write(fd, fifo_read(&lines_head), strlen(lines_head->string));
   }
 
   close(fd);
@@ -73,3 +74,31 @@ int main(int argc, char* argv[]) {
 
   return 0;
 }
+
+void fifo_append(fifo* head, char* string) {
+  fifo* last = head;
+
+  char* new_string = (char*) malloc(sizeof(char) * strlen(string));
+  strcpy(new_string, string);
+
+  while (last->next != NULL)
+    last = last->next;
+
+  fifo* new_node = (fifo*) malloc(sizeof(fifo));
+  new_node->string = new_string;
+  new_node->next = NULL;
+
+  last->next = new_node;
+}
+
+char* fifo_read(fifo** head) {
+  char* return_value = (*head)->string;
+
+  fifo* prev_head = *head;
+
+  *head = (*head)->next;
+
+  free(prev_head);
+
+  return return_value;
+}