diff --git a/C/3_Sully/Sully.c b/C/3_Sully/Sully.c index 582e693..ac5d6b3 100644 --- a/C/3_Sully/Sully.c +++ b/C/3_Sully/Sully.c @@ -4,7 +4,7 @@ #include #define str(s) #s #define xstr(s) str(s) -#define FT(s) int main() { char *before = "#define _GNU_SOURCE /* for asprintf */\n#include /* for free and system */\n#include /* for __FILE__ */\n#include \n#define str(s) #s\n#define xstr(s) str(s)\n#define FT(s) "; char *quine = s; char *after = "\nint i = %i;\nchar *file_name = __FILE__;\nFT(xstr(FT(s)))\n"; if (i == 0) return 0; if ((strchr(file_name, '_')) != ((void*)0)) i--;char *kid_name; char *kid_name_c; char *after_expanded; char *cmd; asprintf(&kid_name, "Sully_%i", i); asprintf(&kid_name_c, "%s.c", kid_name); FILE *file = fopen(kid_name_c, "w"); asprintf(&after_expanded, after, i); fprintf(file, "%s%s%s", before, quine, after_expanded); fclose(file); asprintf(&cmd, "clang %1$s -o %2$s ; ./%2$s", kid_name_c, kid_name); system(cmd); free(cmd); free(kid_name_c); free(kid_name); free(after_expanded); return 0; } +#define FT(s) int main() { char *before = "#define _GNU_SOURCE /* for asprintf */\n#include /* for free and system */\n#include /* for __FILE__ */\n#include \n#define str(s) #s\n#define xstr(s) str(s)\n#define FT(s) "; char *quine = s; char *after = "\nint i = %i;\nchar *file_name = __FILE__;\nFT(xstr(FT(s)))\n"; if ((strchr(file_name, '_')) != ((void*)0)) i--;char kid_name_c[42]; char after_expanded[42]; char cmd[42]; sprintf(kid_name_c, "Sully_%i.c", i); FILE *file = fopen(kid_name_c, "w"); sprintf(after_expanded, after, i); fprintf(file, "%s%s%s", before, quine, after_expanded); fclose(file); sprintf(cmd, "clang Sully_%1$i.c -o Sully_%1$i", i); system(cmd); if (i > 0) { sprintf(cmd, "./Sully_%i", i); system(cmd); } return 0; } int i = 5; char *file_name = __FILE__; FT(xstr(FT(s))) diff --git a/C/3_Sully/Sully_exploded.c b/C/3_Sully/Sully_exploded.c index 16ea6e7..a6ed761 100644 --- a/C/3_Sully/Sully_exploded.c +++ b/C/3_Sully/Sully_exploded.c @@ -23,31 +23,29 @@ int main() \ char *file_name = __FILE__;\n\ FT(xstr(FT(s)))\n"; \ \ - if (i == 0) \ - return 0; \ if ((strchr(file_name, '_')) != ((void*)0)) \ i--;\ \ - char *kid_name; \ - char *kid_name_c; \ - char *after_expanded; \ - char *cmd; \ -\ - asprintf(&kid_name, "Sully_%i", i); \ - asprintf(&kid_name_c, "%s.c", kid_name); \ + char kid_name_c[42]; \ + char after_expanded[42]; \ + char cmd[42]; \ \ + sprintf(kid_name_c, "Sully_%i.c", i); \ FILE *file = fopen(kid_name_c, "w"); \ - asprintf(&after_expanded, after, i); \ +\ + sprintf(after_expanded, after, i); \ fprintf(file, "%s%s%s", before, quine, after_expanded); \ fclose(file); \ \ - asprintf(&cmd, "clang %1$s -o %2$s ; ./%2$s", kid_name_c, kid_name); \ + sprintf(cmd, "clang Sully_%1$i.c -o Sully_%1$i", i); \ system(cmd); \ \ - free(cmd); \ - free(kid_name_c); \ - free(kid_name); \ - free(after_expanded); \ + if (i > 0) \ + { \ + sprintf(cmd, "./Sully_%i", i); \ + system(cmd); \ + } \ +\ return 0; \ } int i = 5;