From 326583d266846aa753d80049c833cf14a3021de6 Mon Sep 17 00:00:00 2001 From: sisungo Date: Mon, 6 Jul 2026 19:08:36 +0800 Subject: [PATCH] feat: add linux compatibility Signed-off-by: sisungo --- build.sh | 2 +- compat.h | 27 +++++++++++++++++++++++++++ compile.c | 5 ++--- main.c | 5 +++-- misc.c | 4 +--- process.c | 5 ++--- sed | Bin 0 -> 78032 bytes 7 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 compat.h create mode 100755 sed diff --git a/build.sh b/build.sh index cf0fb38..ed41a10 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/bin/sh -${CC} -O3 ${CFLAGS} -o sed *.c +${CC} -O3 ${CFLAGS} -o sed *.c $(pcre2-config --libs-posix) diff --git a/compat.h b/compat.h new file mode 100644 index 0000000..2fa7c2d --- /dev/null +++ b/compat.h @@ -0,0 +1,27 @@ +#include +#include +#include + +#ifndef DEFFILEMODE +#define DEFFILEMODE 0666 +#endif + +#ifndef ALLPERMS +#define ALLPERMS 07777 +#endif + +static inline const char *getprogname() { + return "sed"; +} + +static inline void errc(int status, int code, const char *fmt, ...) { + va_list args; + + fprintf(stderr, "error: "); + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + fprintf(stderr, ": %s\n", strerror(code)); + + exit(status); +} diff --git a/compile.c b/compile.c index 47249c3..774afba 100644 --- a/compile.c +++ b/compile.c @@ -33,8 +33,6 @@ * SUCH DAMAGE. */ -#include - #include #include @@ -43,7 +41,7 @@ #include #include #include -#include +#include #include #include #include @@ -52,6 +50,7 @@ #include "defs.h" #include "extern.h" +#include "compat.h" #define LHSZ 128 #define LHMASK (LHSZ - 1) diff --git a/main.c b/main.c index 59800bd..f4b9875 100644 --- a/main.c +++ b/main.c @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include @@ -54,6 +54,7 @@ #include "defs.h" #include "extern.h" +#include "compat.h" /* * Linked list of units (strings and files) to be compiled @@ -108,7 +109,7 @@ u_long linenum; static void add_compunit(enum e_cut, char *); static void add_file(char *); -static void usage(void) __dead2; +static void usage(void); int main(int argc, char *argv[]) diff --git a/misc.c b/misc.c index 3a1aae7..d3dc420 100644 --- a/misc.c +++ b/misc.c @@ -33,13 +33,11 @@ * SUCH DAMAGE. */ -#include - #include #include #include -#include +#include #include #include #include diff --git a/process.c b/process.c index c177524..b9a04e7 100644 --- a/process.c +++ b/process.c @@ -33,8 +33,6 @@ * SUCH DAMAGE. */ -#include - #include #include #include @@ -45,7 +43,7 @@ #include #include #include -#include +#include #include #include #include @@ -55,6 +53,7 @@ #include "defs.h" #include "extern.h" +#include "compat.h" static SPACE HS, PS, SS, YS; #define pd PS.deleted diff --git a/sed b/sed new file mode 100755 index 0000000000000000000000000000000000000000..b4388d29a84730847ded727f76747f43642557bb GIT binary patch literal 78032 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 literal 0 HcmV?d00001