|
|
@@ -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;
|
|
|
+}
|