1
Fork 0

Pipe input to textconv

This avoids a situation when make thinks it has successfully built
the target, after textconv fails for some reason.
This commit is contained in:
n64 2020-06-22 23:27:24 +02:00
parent 95c6bc20b4
commit 964aba4831
2 changed files with 61 additions and 24 deletions

View file

@ -590,12 +590,10 @@ endif
endif
$(BUILD_DIR)/text/%/define_courses.inc.c: text/define_courses.inc.c text/%/courses.h
$(CPP) $(VERSION_CFLAGS) $< -o $@ -I text/$*/
$(TEXTCONV) charmap.txt $@ $@
$(CPP) $(VERSION_CFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) charmap.txt - $@
$(BUILD_DIR)/text/%/define_text.inc.c: text/define_text.inc.c text/%/courses.h text/%/dialogs.h
$(CPP) $(VERSION_CFLAGS) $< -o $@ -I text/$*/
$(TEXTCONV) charmap.txt $@ $@
$(CPP) $(VERSION_CFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) charmap.txt - $@
RSP_DIRS := $(BUILD_DIR)/rsp
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS) $(GODDARD_SRC_DIRS) $(ULTRA_SRC_DIRS) $(ULTRA_ASM_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) include) $(MIO0_DIR) $(addprefix $(MIO0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) $(RSP_DIRS)

View file

@ -54,31 +54,69 @@ static void parse_error(const char *filename, int lineNum, const char *msgfmt, .
// Reads the whole file and returns a null-terminated buffer with its contents
void *read_text_file(const char *filename)
{
FILE *file = fopen(filename, "rb");
uint8_t *buffer;
size_t size;
if (strcmp(filename, "-") != 0)
{
FILE *file = fopen(filename, "rb");
uint8_t *buffer;
size_t size;
if (file == NULL)
fatal_error("failed to open file '%s' for reading: %s", filename, strerror(errno));
if (file == NULL)
fatal_error("failed to open file '%s' for reading: %s", filename, strerror(errno));
// get size
fseek(file, 0, SEEK_END);
size = ftell(file);
// get size
fseek(file, 0, SEEK_END);
size = ftell(file);
// allocate buffer
buffer = malloc(size + 1);
// allocate buffer
buffer = malloc(size + 1);
if (buffer == NULL)
fatal_error("could not allocate buffer of size %u", (uint32_t)(size + 1));
// read file
fseek(file, 0, SEEK_SET);
if (fread(buffer, size, 1, file) != 1)
fatal_error("error reading from file '%s': %s", filename, strerror(errno));
// read file
fseek(file, 0, SEEK_SET);
if (fread(buffer, size, 1, file) != 1)
fatal_error("error reading from file '%s': %s", filename, strerror(errno));
// null-terminate the buffer
buffer[size] = 0;
// null-terminate the buffer
buffer[size] = 0;
fclose(file);
fclose(file);
return buffer;
return buffer;
}
else
{
size_t size = 0;
size_t capacity = 1024;
uint8_t *buffer = malloc(capacity + 1);
if (buffer == NULL)
fatal_error("could not allocate buffer of size %u", (uint32_t)(capacity + 1));
for (;;)
{
size += fread(buffer + size, 1, capacity - size, stdin);
if (size == capacity)
{
capacity *= 2;
buffer = realloc(buffer, capacity + 1);
if (buffer == NULL)
fatal_error("could not allocate buffer of size %u", (uint32_t)(capacity + 1));
}
else if (feof(stdin))
{
break;
}
else
{
fatal_error("error reading from stdin: %s", strerror(errno));
}
}
// null-terminate the buffer
buffer[size] = 0;
return buffer;
}
}
static char *skip_whitespace(char *str)
@ -351,7 +389,7 @@ static char *convert_string(char *pos, FILE *fout, const char *inputFileName, ch
static void convert_file(const char *infilename, const char *outfilename)
{
char *in = read_text_file(infilename);
FILE *fout = fopen(outfilename, "wb");
FILE *fout = strcmp(outfilename, "-") != 0 ? fopen(outfilename, "wb") : stdout;
if (fout == NULL)
fatal_error("failed to open file '%s' for writing: %s", strerror(errno));
@ -436,7 +474,8 @@ static void convert_file(const char *infilename, const char *outfilename)
eof:
fwrite(start, pos - start, 1, fout);
fclose(fout);
if (strcmp(outfilename, "-") != 0)
fclose(fout);
free(in);
}