From e645122f1559c979d5dc27de6954d46f7d459e59 Mon Sep 17 00:00:00 2001 From: asus Date: Sun, 28 Jan 2024 19:40:13 +0100 Subject: [PATCH] now using __FILE__ to check if file is Sully.c or Sully_5.c --- .gitignore | 2 ++ C/3_Sully/Sully.c | 4 +++- C/3_Sully/Sully_exploded.c | 46 +++++++++++++++++++++----------------- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index d9e15fd..46d72f3 100644 --- a/.gitignore +++ b/.gitignore @@ -62,5 +62,7 @@ Sully_*.c !Grace_exploded.c !Sully_exploded.c *test* +*tmp* +*temp* clones/ *.su diff --git a/C/3_Sully/Sully.c b/C/3_Sully/Sully.c index 53c9237..241bbe7 100644 --- a/C/3_Sully/Sully.c +++ b/C/3_Sully/Sully.c @@ -1,8 +1,10 @@ #define _GNU_SOURCE /* for asprintf */ #include /* for free and system */ +#include /* for __FILE__ */ #include #define xstr(s) #s #define str(s) xstr(s) -#define FT(s) int main() { char *before = "#define _GNU_SOURCE /* for asprintf */\n#include /* for free and system */\n#include \n#define xstr(s) #s\n#define str(s) xstr(s)\n#define FT(s) "; char *quine = s; char *after = "\nint i = %i;\nFT(str(FT(s)))\n"; if (i >= 0) {char *kid_name; char *kid_name_c; char *decremented_after; char *cmd; asprintf(&kid_name, "Sully_%i", i); asprintf(&kid_name_c, "%s.c", kid_name); FILE *file = fopen(kid_name_c, "w"); asprintf(&decremented_after, after, i - 1); fprintf(file, "%s%s%s", before, quine, decremented_after); 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(decremented_after); } 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 xstr(s) #s\n#define str(s) xstr(s)\n#define FT(s) "; char *quine = s; char *after = "\nint i = %i;\nchar *file_name = %s%s;\nFT(str(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, "__FI", "LE__"); 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; } int i = 5; +char *file_name = __FILE__; FT(str(FT(s))) diff --git a/C/3_Sully/Sully_exploded.c b/C/3_Sully/Sully_exploded.c index 59701da..dd44263 100644 --- a/C/3_Sully/Sully_exploded.c +++ b/C/3_Sully/Sully_exploded.c @@ -1,5 +1,6 @@ #define _GNU_SOURCE /* for asprintf */ #include /* for free and system */ +#include /* for __FILE__ */ #include #define xstr(s) #s #define str(s) xstr(s) @@ -10,40 +11,45 @@ int main() \ char *before = "\ #define _GNU_SOURCE /* for asprintf */\n\ #include /* for free and system */\n\ + #include /* for __FILE__ */\n\ #include \n\ #define xstr(s) #s\n\ #define str(s) xstr(s)\n\ - #define FT(s)"; \ + #define FT(s) "; \ char *quine = s; \ char *after = "\ \n\ int i = %i;\n\ + char *file_name = %s%s;\n\ FT(str(FT(s)))\n"; \ \ - if (i >= 0) \ - {\ - char *kid_name; \ - char *kid_name_c; \ - char *decremented_after; \ - char *cmd; \ + if (i == 0) \ + return 0; \ + if ((strchr(file_name, '_')) != ((void*)0)) \ + i--;\ \ - asprintf(&kid_name, "Sully_%i", i); \ - asprintf(&kid_name_c, "%s.c", kid_name); \ + char *kid_name; \ + char *kid_name_c; \ + char *after_expanded; \ + char *cmd; \ \ - FILE *file = fopen(kid_name_c, "w"); \ - asprintf(&decremented_after, after, i - 1); \ - fprintf(file, "%s%s%s", before, quine, decremented_after); \ - fclose(file); \ + asprintf(&kid_name, "Sully_%i", i); \ + asprintf(&kid_name_c, "%s.c", kid_name); \ \ - asprintf(&cmd, "clang %1$s -o %2$s ; ./%2$s", kid_name_c, kid_name); \ - system(cmd); \ + FILE *file = fopen(kid_name_c, "w"); \ + asprintf(&after_expanded, after, i, "__FI", "LE__"); \ + fprintf(file, "%s%s%s", before, quine, after_expanded); \ + fclose(file); \ \ - free(cmd); \ - free(kid_name_c); \ - free(kid_name); \ - free(decremented_after); \ - } \ + 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; \ } int i = 5; +char *file_name = __FILE__; FT(str(FT(s)))