diff --git a/src/asm/output.c b/src/asm/output.c index a5168338..0d04d7e8 100644 --- a/src/asm/output.c +++ b/src/asm/output.c @@ -471,7 +471,12 @@ static void registerExportedSymbol(struct Symbol *symbol, void *arg) */ void out_WriteObject(void) { - FILE *f = fopen(tzObjectname, "wb"); + FILE *f; + if (strcmp(tzObjectname, "-") != 0) { + f = fopen(tzObjectname, "wb"); + } else { + f = fdopen(1, "wb"); + } if (!f) err(1, "Couldn't write file '%s'", tzObjectname); diff --git a/src/link/main.c b/src/link/main.c index 00bc1ae3..64256aed 100644 --- a/src/link/main.c +++ b/src/link/main.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -126,7 +127,14 @@ FILE *openFile(char const *fileName, char const *mode) if (!fileName) return NULL; - FILE *file = fopen(fileName, mode); + FILE *file; + if (strcmp(fileName, "-") != 0) { + file = fopen(fileName, mode); + } else if (strchr(mode, 'r')) { + file = fdopen(0, mode); + } else { + file = fdopen(1, mode); + } if (!file) err(1, "Could not open file \"%s\"", fileName);