2020-06-15 14:18:57 +00:00
|
|
|
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
|
|
|
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
|
|
|
|
|
|
|
PKGS += TEST_LIBC_FMT
|
|
|
|
|
|
|
|
TEST_LIBC_FMT_SRCS := $(wildcard test/libc/fmt/*.c)
|
|
|
|
TEST_LIBC_FMT_SRCS_TEST = $(filter %_test.c,$(TEST_LIBC_FMT_SRCS))
|
|
|
|
TEST_LIBC_FMT_BINS = $(TEST_LIBC_FMT_COMS) $(TEST_LIBC_FMT_COMS:%=%.dbg)
|
|
|
|
TEST_LIBC_FMT_TESTS = $(TEST_LIBC_FMT_SRCS_TEST:%.c=o/$(MODE)/%.com.ok)
|
|
|
|
|
|
|
|
TEST_LIBC_FMT_OBJS = \
|
|
|
|
$(TEST_LIBC_FMT_SRCS:%.c=o/$(MODE)/%.o)
|
|
|
|
|
2020-08-25 11:23:25 +00:00
|
|
|
TEST_LIBC_FMT_COMS = \
|
|
|
|
$(TEST_LIBC_FMT_SRCS:%.c=o/$(MODE)/%.com)
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
TEST_LIBC_FMT_CHECKS = \
|
|
|
|
$(TEST_LIBC_FMT_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
|
|
|
|
|
|
|
|
TEST_LIBC_FMT_DIRECTDEPS = \
|
|
|
|
LIBC_FMT \
|
2021-01-16 20:05:41 +00:00
|
|
|
LIBC_INTRIN \
|
|
|
|
LIBC_LOG \
|
2020-06-15 14:18:57 +00:00
|
|
|
LIBC_MEM \
|
|
|
|
LIBC_NEXGEN32E \
|
|
|
|
LIBC_RUNTIME \
|
2020-08-27 06:08:08 +00:00
|
|
|
LIBC_STDIO \
|
2020-06-15 14:18:57 +00:00
|
|
|
LIBC_STR \
|
|
|
|
LIBC_SYSV \
|
|
|
|
LIBC_TESTLIB \
|
2021-10-14 00:27:13 +00:00
|
|
|
LIBC_TINYMATH \
|
2020-12-05 20:20:41 +00:00
|
|
|
LIBC_X \
|
|
|
|
THIRD_PARTY_GDTOA
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
TEST_LIBC_FMT_DEPS := \
|
|
|
|
$(call uniq,$(foreach x,$(TEST_LIBC_FMT_DIRECTDEPS),$($(x))))
|
|
|
|
|
|
|
|
o/$(MODE)/test/libc/fmt/fmt.pkg: \
|
|
|
|
$(TEST_LIBC_FMT_OBJS) \
|
|
|
|
$(foreach x,$(TEST_LIBC_FMT_DIRECTDEPS),$($(x)_A).pkg)
|
|
|
|
|
|
|
|
o/$(MODE)/test/libc/fmt/%.com.dbg: \
|
|
|
|
$(TEST_LIBC_FMT_DEPS) \
|
|
|
|
o/$(MODE)/test/libc/fmt/%.o \
|
|
|
|
o/$(MODE)/test/libc/fmt/fmt.pkg \
|
|
|
|
$(LIBC_TESTMAIN) \
|
|
|
|
$(CRT) \
|
2022-05-25 18:31:08 +00:00
|
|
|
$(APE_NO_MODIFY_SELF)
|
2020-06-15 14:18:57 +00:00
|
|
|
@$(APELINK)
|
|
|
|
|
2020-08-25 11:23:25 +00:00
|
|
|
$(TEST_LIBC_FMT_OBJS): test/libc/fmt/test.mk
|
2020-06-15 14:18:57 +00:00
|
|
|
|
2022-08-11 01:00:45 +00:00
|
|
|
$(TEST_LIBC_FMT_OBJS): private \
|
2020-12-09 23:04:54 +00:00
|
|
|
DEFAULT_CCFLAGS += \
|
|
|
|
-fno-builtin
|
|
|
|
|
Fix vfprintf and derived functions not handling write errors (#798)
The C standard states:
> The fprintf function returns the number of characters transmitted,
> or a negative value if an output or encoding error occurred or if
> the implementation does not support a specified width length
> modifier.
- C Standard, 7.23.6.1.15. The fprintf function
However, cosmopolitan fails to return a negative value in the case of
an output error, meaning that a program such as:
#include <stdio.h>
int main()
{
FILE *fp = fopen("/dev/full", "w");
setbuf(fp, NULL);
printf("fprintf: %d\n", fprintf(fp, "test\n"));
printf("fflush: %d\n", fflush(fp));
}
will, under cosmopolitan, print that no error occured in either of the
calls to fprintf and fflush.
This patch fixes this, along with the associated GitHub issue,
https://github.com/jart/cosmopolitan/issues/784
2023-03-31 13:57:29 +00:00
|
|
|
o/$(MODE)/test/libc/fmt/fprintf_test.com.runs: \
|
|
|
|
private .UNVEIL += w:/dev/full
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
.PHONY: o/$(MODE)/test/libc/fmt
|
|
|
|
o/$(MODE)/test/libc/fmt: \
|
|
|
|
$(TEST_LIBC_FMT_BINS) \
|
|
|
|
$(TEST_LIBC_FMT_CHECKS)
|