From 0c8dcf12dc13ee9518976df1b9fd51dc23911552 Mon Sep 17 00:00:00 2001 From: Marco Casaroli Date: Tue, 13 Oct 2026 09:43:34 +0200 Subject: [PATCH] include/stdio.h: Hide the kernel file system types from kernel-build programs. stdio.h included nuttx/fs/fs.h and nuttx/lib/lib.h, so every program that includes stdio.h saw the kernel's struct file, struct inode and the other file system types. A program that defines its own struct file does not compile. stdio.h no longer includes nuttx/lib/lib.h in any build, and includes nuttx/fs/fs.h only for kernel code and for flat and protected builds. In the user space of a kernel build (CONFIG_BUILD_KERNEL and not __KERNEL__) programs cannot use the file system types anyway, so they do not see them. Doing the same for flat and protected builds breaks many files that rely on the indirect include. stdio.h now defines what it needs itself: the fopencookie() callback types, struct file_struct and its __FS_FLAG_* flags, which were in nuttx/fs/fs.h, and the declaration of lib_get_stream(), which stdin, stdout and stderr expand to. struct streamlist moves from nuttx/fs/fs.h to nuttx/tls.h, where struct task_info_s holds the stream list. nuttx/tls.h includes stdio.h for struct file_struct. The files that used kernel types or other headers through stdio.h now include what they use. Assisted-by: Claude Code:claude-opus-5-5 Signed-off-by: Marco Casaroli --- arch/arm/src/stm32h7/stm32_crypto.c | 1 + arch/arm/src/xmc4/xmc4_i2c.c | 1 + arch/risc-v/src/bl808/bl808_gpadc.c | 1 + .../src/common/espressif/esp_allocateheap.c | 1 + arch/risc-v/src/common/espressif/esp_gpio.c | 1 + .../src/common/espressif/esp_i2c_slave.c | 1 + arch/risc-v/src/common/espressif/esp_i2s.c | 1 + arch/risc-v/src/common/espressif/esp_irq.c | 1 + arch/risc-v/src/common/espressif/esp_spi.c | 1 + .../common/espressif/esp_temperature_sensor.c | 1 + arch/sim/src/sim/sim_gpiochip.c | 1 + .../src/common/espressif/esp_i2c_slave.c | 1 + arch/xtensa/src/common/espressif/esp_irq.c | 1 + arch/xtensa/src/esp32s2/esp32s2_spi.c | 1 + arch/xtensa/src/esp32s3/esp32s3_partition.c | 1 + .../mikroe-stm32f4/src/stm32_touchscreen.c | 1 + .../tm4c1294-launchpad/src/tm4c_bringup.c | 1 + .../pic32mx7mmb/src/pic32_touchscreen.c | 1 + .../risc-v/esp32c2/common/src/esp_board_adc.c | 1 + .../risc-v/esp32c3/common/src/esp_board_adc.c | 1 + .../risc-v/esp32c6/common/src/esp_board_adc.c | 1 + .../esp32c6/common/src/esp_board_mpu60x0.c | 1 + .../risc-v/esp32h2/common/src/esp_board_adc.c | 1 + .../risc-v/esp32p4/common/src/esp_board_adc.c | 1 + .../sparc/bm3803/xx3803/src/bm3803_am29lv.c | 1 + .../sparc/bm3823/xx3823/src/bm3823_am29lv.c | 1 + .../xtensa/esp32/common/src/esp32_board_adc.c | 1 + .../esp32s2/common/src/esp32s2_board_adc.c | 1 + .../esp32s3/common/src/esp32s3_board_adc.c | 1 + drivers/analog/ads1115.c | 1 + drivers/analog/ads7046.c | 1 + drivers/analog/mcp47x6.c | 1 + drivers/leds/ktd2052.c | 1 + drivers/mtd/mtd_cfi.c | 1 + drivers/net/oa_tc6/oa_tc6.c | 1 + drivers/net/telnet.c | 1 + drivers/pci/pci_uio_ivshmem.c | 1 + drivers/rpmsg/rpmsg_virtio_ivshmem.c | 1 + drivers/rptun/rptun_bmp.c | 1 + drivers/timers/pl031.c | 1 + drivers/usbdev/cdcncm.c | 1 + drivers/video/goldfish_camera.c | 1 + drivers/virtio/virtio-pci.c | 1 + drivers/virtio/virtio-rpmb.c | 1 + drivers/wireless/bluetooth/bt_uart.c | 1 + drivers/wireless/gs2200m.c | 1 + fs/smartfs/smartfs_utils.c | 1 + fs/xipfs/xipfs_mmap.c | 1 + include/nuttx/fs/fs.h | 102 ---------------- include/nuttx/fs/procfs.h | 5 +- include/nuttx/tls.h | 12 ++ include/stdio.h | 112 +++++++++++++++++- libs/libbuiltin/libgcc/gcov.c | 1 + libs/libc/gdbstub/lib_gdbstub.c | 1 + libs/libc/libc.h | 1 + libs/libc/locale/lib_iconv.c | 2 + libs/libc/misc/lib_ftok.c | 2 + libs/libc/netdb/lib_netdb.h | 1 + libs/libc/pwd/lib_getspnamr.c | 1 + libs/libc/signal/sig_psignal.c | 1 + libs/libc/stdio/lib_clearerr.c | 1 + libs/libc/stdio/lib_feof.c | 1 + libs/libc/stdio/lib_ferror.c | 1 + libs/libc/stdio/lib_fgetwc.c | 2 + libs/libc/stdio/lib_fileno.c | 1 + libs/libc/stdio/lib_libfilelock.c | 1 + libs/libc/stdio/lib_printf.c | 1 + libs/libc/stdio/lib_putwchar.c | 2 + libs/libc/stdio/lib_remove.c | 1 + libs/libc/stdio/lib_ungetwc.c | 3 + libs/libc/stdio/lib_vasprintf.c | 1 + libs/libc/stdio/lib_vprintf.c | 1 + libs/libc/unistd/lib_getpass.c | 1 + sched/misc/coredump.c | 1 + 74 files changed, 199 insertions(+), 108 deletions(-) diff --git a/arch/arm/src/stm32h7/stm32_crypto.c b/arch/arm/src/stm32h7/stm32_crypto.c index 9ff3b164a973e..42e087939e510 100644 --- a/arch/arm/src/stm32h7/stm32_crypto.c +++ b/arch/arm/src/stm32h7/stm32_crypto.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "arm_internal.h" #include "hardware/stm32h7x3xx_rcc.h" diff --git a/arch/arm/src/xmc4/xmc4_i2c.c b/arch/arm/src/xmc4/xmc4_i2c.c index 38414abd5b335..e62bb0f2db245 100644 --- a/arch/arm/src/xmc4/xmc4_i2c.c +++ b/arch/arm/src/xmc4/xmc4_i2c.c @@ -34,6 +34,7 @@ #include #include +#include #include #include diff --git a/arch/risc-v/src/bl808/bl808_gpadc.c b/arch/risc-v/src/bl808/bl808_gpadc.c index f80447e2bde1c..3901e0034d71b 100644 --- a/arch/risc-v/src/bl808/bl808_gpadc.c +++ b/arch/risc-v/src/bl808/bl808_gpadc.c @@ -40,6 +40,7 @@ #include #include #include +#include #include "hardware/bl808_gpadc.h" #include "riscv_internal.h" diff --git a/arch/risc-v/src/common/espressif/esp_allocateheap.c b/arch/risc-v/src/common/espressif/esp_allocateheap.c index 5e562aedf49e7..29566a5f497f4 100644 --- a/arch/risc-v/src/common/espressif/esp_allocateheap.c +++ b/arch/risc-v/src/common/espressif/esp_allocateheap.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "riscv_internal.h" diff --git a/arch/risc-v/src/common/espressif/esp_gpio.c b/arch/risc-v/src/common/espressif/esp_gpio.c index c10ea7d6b9232..ec82ee659c4de 100644 --- a/arch/risc-v/src/common/espressif/esp_gpio.c +++ b/arch/risc-v/src/common/espressif/esp_gpio.c @@ -40,6 +40,7 @@ #include #include #include +#include /* Arch */ diff --git a/arch/risc-v/src/common/espressif/esp_i2c_slave.c b/arch/risc-v/src/common/espressif/esp_i2c_slave.c index dbbb06ba2e7c5..1f4c6a847b76e 100644 --- a/arch/risc-v/src/common/espressif/esp_i2c_slave.c +++ b/arch/risc-v/src/common/espressif/esp_i2c_slave.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include diff --git a/arch/risc-v/src/common/espressif/esp_i2s.c b/arch/risc-v/src/common/espressif/esp_i2s.c index e831672eb42d7..e10b00e7bce34 100644 --- a/arch/risc-v/src/common/espressif/esp_i2s.c +++ b/arch/risc-v/src/common/espressif/esp_i2s.c @@ -33,6 +33,7 @@ #include #include +#include #include #include #include diff --git a/arch/risc-v/src/common/espressif/esp_irq.c b/arch/risc-v/src/common/espressif/esp_irq.c index 945da04b0b19e..0ee7d29c392a7 100644 --- a/arch/risc-v/src/common/espressif/esp_irq.c +++ b/arch/risc-v/src/common/espressif/esp_irq.c @@ -34,6 +34,7 @@ #include #include +#include #include "irq/irq.h" diff --git a/arch/risc-v/src/common/espressif/esp_spi.c b/arch/risc-v/src/common/espressif/esp_spi.c index d74a6e279327c..a655e858b32c8 100644 --- a/arch/risc-v/src/common/espressif/esp_spi.c +++ b/arch/risc-v/src/common/espressif/esp_spi.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include diff --git a/arch/risc-v/src/common/espressif/esp_temperature_sensor.c b/arch/risc-v/src/common/espressif/esp_temperature_sensor.c index 07a512a6f60e0..df88b0f88c75d 100644 --- a/arch/risc-v/src/common/espressif/esp_temperature_sensor.c +++ b/arch/risc-v/src/common/espressif/esp_temperature_sensor.c @@ -25,6 +25,7 @@ ****************************************************************************/ #include +#include #include #ifdef CONFIG_ESPRESSIF_TEMP diff --git a/arch/sim/src/sim/sim_gpiochip.c b/arch/sim/src/sim/sim_gpiochip.c index 52906811888a1..e437b2a6e0d7f 100644 --- a/arch/sim/src/sim/sim_gpiochip.c +++ b/arch/sim/src/sim/sim_gpiochip.c @@ -23,6 +23,7 @@ ****************************************************************************/ #include +#include #include #include #include diff --git a/arch/xtensa/src/common/espressif/esp_i2c_slave.c b/arch/xtensa/src/common/espressif/esp_i2c_slave.c index 94d6d9cb45413..c65cff7c34f86 100644 --- a/arch/xtensa/src/common/espressif/esp_i2c_slave.c +++ b/arch/xtensa/src/common/espressif/esp_i2c_slave.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include diff --git a/arch/xtensa/src/common/espressif/esp_irq.c b/arch/xtensa/src/common/espressif/esp_irq.c index b7396d59b3193..56b62833b568e 100644 --- a/arch/xtensa/src/common/espressif/esp_irq.c +++ b/arch/xtensa/src/common/espressif/esp_irq.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include diff --git a/arch/xtensa/src/esp32s2/esp32s2_spi.c b/arch/xtensa/src/esp32s2/esp32s2_spi.c index 30e1c7bfdb1fb..b6ebff6dd23a1 100644 --- a/arch/xtensa/src/esp32s2/esp32s2_spi.c +++ b/arch/xtensa/src/esp32s2/esp32s2_spi.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include diff --git a/arch/xtensa/src/esp32s3/esp32s3_partition.c b/arch/xtensa/src/esp32s3/esp32s3_partition.c index ba261f3ec6a35..8b267a4614f5b 100644 --- a/arch/xtensa/src/esp32s3/esp32s3_partition.c +++ b/arch/xtensa/src/esp32s3/esp32s3_partition.c @@ -30,6 +30,7 @@ #include #include +#include #include "esp32s3_spiflash_mtd.h" #include "esp32s3_partition.h" diff --git a/boards/arm/stm32f4/mikroe-stm32f4/src/stm32_touchscreen.c b/boards/arm/stm32f4/mikroe-stm32f4/src/stm32_touchscreen.c index 35c3f8eced207..923e46fa89528 100644 --- a/boards/arm/stm32f4/mikroe-stm32f4/src/stm32_touchscreen.c +++ b/boards/arm/stm32f4/mikroe-stm32f4/src/stm32_touchscreen.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include diff --git a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c index eff17a00c9bb2..aeb59bd1867cc 100644 --- a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c +++ b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include diff --git a/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c b/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c index 53ca39a95c2c3..7251ef75bdd50 100644 --- a/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c +++ b/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c @@ -37,6 +37,7 @@ #include #include +#include #include #include #include diff --git a/boards/risc-v/esp32c2/common/src/esp_board_adc.c b/boards/risc-v/esp32c2/common/src/esp_board_adc.c index aaf61adedc052..074d458a7de62 100644 --- a/boards/risc-v/esp32c2/common/src/esp_board_adc.c +++ b/boards/risc-v/esp32c2/common/src/esp_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/risc-v/esp32c3/common/src/esp_board_adc.c b/boards/risc-v/esp32c3/common/src/esp_board_adc.c index e16c5d291f28b..4db4ef7a9efc6 100644 --- a/boards/risc-v/esp32c3/common/src/esp_board_adc.c +++ b/boards/risc-v/esp32c3/common/src/esp_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/risc-v/esp32c6/common/src/esp_board_adc.c b/boards/risc-v/esp32c6/common/src/esp_board_adc.c index 726c2bf94b0d8..a9cae026ee9e7 100644 --- a/boards/risc-v/esp32c6/common/src/esp_board_adc.c +++ b/boards/risc-v/esp32c6/common/src/esp_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/risc-v/esp32c6/common/src/esp_board_mpu60x0.c b/boards/risc-v/esp32c6/common/src/esp_board_mpu60x0.c index 53d35e7c4aefe..a87d972d1f1ad 100644 --- a/boards/risc-v/esp32c6/common/src/esp_board_mpu60x0.c +++ b/boards/risc-v/esp32c6/common/src/esp_board_mpu60x0.c @@ -30,6 +30,7 @@ #include #include +#include #include #include diff --git a/boards/risc-v/esp32h2/common/src/esp_board_adc.c b/boards/risc-v/esp32h2/common/src/esp_board_adc.c index 5401507d08dfa..7b2dc0b0f76d9 100644 --- a/boards/risc-v/esp32h2/common/src/esp_board_adc.c +++ b/boards/risc-v/esp32h2/common/src/esp_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/risc-v/esp32p4/common/src/esp_board_adc.c b/boards/risc-v/esp32p4/common/src/esp_board_adc.c index 786ecb6f6b249..4759f7f8e85aa 100644 --- a/boards/risc-v/esp32p4/common/src/esp_board_adc.c +++ b/boards/risc-v/esp32p4/common/src/esp_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/sparc/bm3803/xx3803/src/bm3803_am29lv.c b/boards/sparc/bm3803/xx3803/src/bm3803_am29lv.c index 6f889a5e178c1..b148ea1456779 100644 --- a/boards/sparc/bm3803/xx3803/src/bm3803_am29lv.c +++ b/boards/sparc/bm3803/xx3803/src/bm3803_am29lv.c @@ -35,6 +35,7 @@ #include #include +#include #ifdef CONFIG_MTD_AM29LV # include # include diff --git a/boards/sparc/bm3823/xx3823/src/bm3823_am29lv.c b/boards/sparc/bm3823/xx3823/src/bm3823_am29lv.c index d04d144a21ac5..47dcb1ce574d1 100644 --- a/boards/sparc/bm3823/xx3823/src/bm3823_am29lv.c +++ b/boards/sparc/bm3823/xx3823/src/bm3823_am29lv.c @@ -33,6 +33,7 @@ #include #include #include +#include #ifdef CONFIG_MTD_AM29LV # include diff --git a/boards/xtensa/esp32/common/src/esp32_board_adc.c b/boards/xtensa/esp32/common/src/esp32_board_adc.c index 07c41e542a434..4a19c6526a74b 100644 --- a/boards/xtensa/esp32/common/src/esp32_board_adc.c +++ b/boards/xtensa/esp32/common/src/esp32_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/xtensa/esp32s2/common/src/esp32s2_board_adc.c b/boards/xtensa/esp32s2/common/src/esp32s2_board_adc.c index 0990315a5a4e2..71f6718d133e6 100644 --- a/boards/xtensa/esp32s2/common/src/esp32s2_board_adc.c +++ b/boards/xtensa/esp32s2/common/src/esp32s2_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/boards/xtensa/esp32s3/common/src/esp32s3_board_adc.c b/boards/xtensa/esp32s3/common/src/esp32s3_board_adc.c index 1c8322e7cd9c4..d0fa9cf4489a6 100644 --- a/boards/xtensa/esp32s3/common/src/esp32s3_board_adc.c +++ b/boards/xtensa/esp32s3/common/src/esp32s3_board_adc.c @@ -29,6 +29,7 @@ #include #include +#include #include "espressif/esp_adc.h" diff --git a/drivers/analog/ads1115.c b/drivers/analog/ads1115.c index 9577cfdd7520e..86e64ba60d534 100644 --- a/drivers/analog/ads1115.c +++ b/drivers/analog/ads1115.c @@ -25,6 +25,7 @@ ****************************************************************************/ #include +#include #include #include diff --git a/drivers/analog/ads7046.c b/drivers/analog/ads7046.c index d79a193c1e095..150e17a809604 100644 --- a/drivers/analog/ads7046.c +++ b/drivers/analog/ads7046.c @@ -39,6 +39,7 @@ #include #include #include +#include /**************************************************************************** * Pre-processor Definitions diff --git a/drivers/analog/mcp47x6.c b/drivers/analog/mcp47x6.c index f65f23eb47f5d..e862fc4c18527 100644 --- a/drivers/analog/mcp47x6.c +++ b/drivers/analog/mcp47x6.c @@ -39,6 +39,7 @@ #include #include +#include /**************************************************************************** * Preprocessor definitions diff --git a/drivers/leds/ktd2052.c b/drivers/leds/ktd2052.c index 298c95682485f..1a0e969f67b76 100644 --- a/drivers/leds/ktd2052.c +++ b/drivers/leds/ktd2052.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include diff --git a/drivers/mtd/mtd_cfi.c b/drivers/mtd/mtd_cfi.c index ff04913fd814e..cbaaba51ace00 100644 --- a/drivers/mtd/mtd_cfi.c +++ b/drivers/mtd/mtd_cfi.c @@ -32,6 +32,7 @@ #include #include +#include #include #include "cfi.h" diff --git a/drivers/net/oa_tc6/oa_tc6.c b/drivers/net/oa_tc6/oa_tc6.c index d7337c3358646..85fb0594e440b 100644 --- a/drivers/net/oa_tc6/oa_tc6.c +++ b/drivers/net/oa_tc6/oa_tc6.c @@ -30,6 +30,7 @@ #include #include +#include #include #ifdef CONFIG_NET_OA_TC6_NCV7410 diff --git a/drivers/net/telnet.c b/drivers/net/telnet.c index 78bff9addb001..7369b591fd188 100644 --- a/drivers/net/telnet.c +++ b/drivers/net/telnet.c @@ -36,6 +36,7 @@ #include #include +#include #include #include #include diff --git a/drivers/pci/pci_uio_ivshmem.c b/drivers/pci/pci_uio_ivshmem.c index 9340dda5180cc..1eadf73051994 100644 --- a/drivers/pci/pci_uio_ivshmem.c +++ b/drivers/pci/pci_uio_ivshmem.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include diff --git a/drivers/rpmsg/rpmsg_virtio_ivshmem.c b/drivers/rpmsg/rpmsg_virtio_ivshmem.c index 21183eb696214..2eec277d038ed 100644 --- a/drivers/rpmsg/rpmsg_virtio_ivshmem.c +++ b/drivers/rpmsg/rpmsg_virtio_ivshmem.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include diff --git a/drivers/rptun/rptun_bmp.c b/drivers/rptun/rptun_bmp.c index f7b3394cb87d7..3a749f6d3c1ad 100644 --- a/drivers/rptun/rptun_bmp.c +++ b/drivers/rptun/rptun_bmp.c @@ -24,6 +24,7 @@ * Included Files ****************************************************************************/ +#include #include #include #include diff --git a/drivers/timers/pl031.c b/drivers/timers/pl031.c index 0ff350d5339c1..38aaa4a0a8f8d 100644 --- a/drivers/timers/pl031.c +++ b/drivers/timers/pl031.c @@ -30,6 +30,7 @@ #include #include +#include #include #include diff --git a/drivers/usbdev/cdcncm.c b/drivers/usbdev/cdcncm.c index 161fd2950fd97..ede6cb00a255e 100644 --- a/drivers/usbdev/cdcncm.c +++ b/drivers/usbdev/cdcncm.c @@ -38,6 +38,7 @@ #include #include +#include #include #include #include diff --git a/drivers/video/goldfish_camera.c b/drivers/video/goldfish_camera.c index 0354bcad5996e..5ac39611dc862 100644 --- a/drivers/video/goldfish_camera.c +++ b/drivers/video/goldfish_camera.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include diff --git a/drivers/virtio/virtio-pci.c b/drivers/virtio/virtio-pci.c index 168b087661c51..79b6c56cf087e 100644 --- a/drivers/virtio/virtio-pci.c +++ b/drivers/virtio/virtio-pci.c @@ -32,6 +32,7 @@ #include #include +#include #include #include "virtio-pci.h" diff --git a/drivers/virtio/virtio-rpmb.c b/drivers/virtio/virtio-rpmb.c index d395cd9f90150..9ca8d5fb45bba 100644 --- a/drivers/virtio/virtio-rpmb.c +++ b/drivers/virtio/virtio-rpmb.c @@ -30,6 +30,7 @@ #include #include +#include #include #include #include diff --git a/drivers/wireless/bluetooth/bt_uart.c b/drivers/wireless/bluetooth/bt_uart.c index e761625b8e26f..1e174de922391 100644 --- a/drivers/wireless/bluetooth/bt_uart.c +++ b/drivers/wireless/bluetooth/bt_uart.c @@ -44,6 +44,7 @@ #include #include +#include #include #include diff --git a/drivers/wireless/gs2200m.c b/drivers/wireless/gs2200m.c index afa922f618207..428ba55262802 100644 --- a/drivers/wireless/gs2200m.c +++ b/drivers/wireless/gs2200m.c @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include diff --git a/fs/smartfs/smartfs_utils.c b/fs/smartfs/smartfs_utils.c index f81e980acf866..8155077b2fe1b 100644 --- a/fs/smartfs/smartfs_utils.c +++ b/fs/smartfs/smartfs_utils.c @@ -39,6 +39,7 @@ #include #include #include +#include #include "smartfs.h" #include "fs_heap.h" diff --git a/fs/xipfs/xipfs_mmap.c b/fs/xipfs/xipfs_mmap.c index 580b271c43c79..aeb02ca98625a 100644 --- a/fs/xipfs/xipfs_mmap.c +++ b/fs/xipfs/xipfs_mmap.c @@ -51,6 +51,7 @@ #include #include +#include #include #include diff --git a/include/nuttx/fs/fs.h b/include/nuttx/fs/fs.h index 36c039888ec16..f55547c61809f 100644 --- a/include/nuttx/fs/fs.h +++ b/include/nuttx/fs/fs.h @@ -102,13 +102,6 @@ # define _NX_GETERRVAL(r) (-errno) #endif -/* Stream flags for the fs_flags field of in struct file_struct */ - -#define __FS_FLAG_EOF (1 << 0) /* EOF detected by a read operation */ -#define __FS_FLAG_ERROR (1 << 1) /* Error detected by any operation */ -#define __FS_FLAG_LBF (1 << 2) /* Line buffered */ -#define __FS_FLAG_UBF (1 << 3) /* Buffer allocated by caller of setvbuf */ - /* Inode i_flags values: * * Bit 0-3: Inode type (Bit 3 indicates internal OS types) @@ -478,33 +471,6 @@ struct inode #define FSNODE_SIZE(n) (sizeof(struct inode) + (n)) -/* Definitions for custom stream operations with fopencookie. The - * implementation is as defined in Standard C library (libc). The only - * difference is that we use off_t instead of off64_t. This means - * off_t is int64_t if CONFIG_FS_LARGEFILE is defined and int32_t if not. - * - * These callbacks can either lead to custom functions if fopencookie is used - * or to standard file system functions if not. - */ - -typedef CODE ssize_t cookie_read_function_t(FAR void *cookie, FAR char *buf, - size_t size); -typedef CODE ssize_t cookie_write_function_t(FAR void *cookie, - FAR const char *buf, - size_t size); -typedef CODE off_t cookie_seek_function_t(FAR void *cookie, - FAR off_t *offset, - int whence); -typedef CODE int cookie_close_function_t(FAR void *cookie); - -typedef struct cookie_io_functions_t -{ - FAR cookie_read_function_t *read; - FAR cookie_write_function_t *write; - FAR cookie_seek_function_t *seek; - FAR cookie_close_function_t *close; -} cookie_io_functions_t; - /* This is the underlying representation of an open file. A file * descriptor is an index into an array of such types. The type associates * the file descriptor to the file state and to a set of inode operations. @@ -560,74 +526,6 @@ struct fdlist struct fd fl_prefds[CONFIG_NFILE_DESCRIPTORS_PER_BLOCK]; }; -/* The following structure defines the list of files used for standard C I/O. - * Note that NuttX can support the standard C APIs with or without buffering - * - * When buffering is used, the following describes the usage of the I/O - * buffer. - * The buffer can be used for reading or writing -- but not both at the same - * time. - * An fflush is implied between each change in direction of access. - * - * The field fs_bufread determines whether the buffer is being used for - * reading or for writing as follows: - * - * BUFFER - * +----------------------+ <- fs_bufstart Points to the beginning of - * | | the buffer. - * | WR: Buffered data | WR: Start of buffered write - * | | data. - * | RD: Already read | RD: Start of already read - * | | data. - * +----------------------+ - * | WR: Available buffer | <- fs_bufpos Points to next byte: - * | RD: Read-ahead data | WR: End+1 of buffered write - * | | data. - * | | RD: Points to next char to - * | | return - * +----------------------+ - * | WR: Available | <- fs_bufread Top+1 of buffered read data - * | RD: Available | WR: bufstart buffer used for - * | | writing. - * | | RD: Pointer to last buffered - * | | read char+1 - * +----------------------+ - * <- fs_bufend Points to the end of the - * buffer+1 - */ - -#ifdef CONFIG_FILE_STREAM -struct file_struct -{ - sq_entry_t fs_entry; /* Entry of file stream */ - rmutex_t fs_lock; /* Recursive lock */ - cookie_io_functions_t fs_iofunc; /* Callbacks to user / system functions */ - FAR void *fs_cookie; /* Pointer to file descriptor / cookie struct */ -#ifndef CONFIG_STDIO_DISABLE_BUFFERING - FAR char *fs_bufstart; /* Pointer to start of buffer */ - FAR char *fs_bufend; /* Pointer to 1 past end of buffer */ - FAR char *fs_bufpos; /* Current position in buffer */ - FAR char *fs_bufread; /* Pointer to 1 past last buffered read char. */ -# if CONFIG_STDIO_BUFFER_SIZE > 0 - char fs_buffer[CONFIG_STDIO_BUFFER_SIZE]; -# endif -#endif - uint16_t fs_oflags; /* Open mode flags */ - uint8_t fs_flags; /* Stream flags */ -#if CONFIG_NUNGET_CHARS > 0 - uint8_t fs_nungotten; /* The number of characters buffered for ungetc */ - char fs_ungotten[CONFIG_NUNGET_CHARS]; -#endif -}; - -struct streamlist -{ - mutex_t sl_lock; /* For thread safety */ - struct file_struct sl_std[3]; - sq_queue_t sl_queue; -}; -#endif /* CONFIG_FILE_STREAM */ - /**************************************************************************** * Public Function Prototypes ****************************************************************************/ diff --git a/include/nuttx/fs/procfs.h b/include/nuttx/fs/procfs.h index 35ebca03334a8..ca369008fbd95 100644 --- a/include/nuttx/fs/procfs.h +++ b/include/nuttx/fs/procfs.h @@ -29,6 +29,7 @@ #include #include +#include /**************************************************************************** * Pre-processor Definitions @@ -130,10 +131,6 @@ struct procfs_dir_priv_s /* An entry for procfs_register_meminfo */ -struct mallinfo; -struct mm_heap_s; -struct mm_memdump_s; - struct procfs_meminfo_entry_s { FAR const char *name; diff --git a/include/nuttx/tls.h b/include/nuttx/tls.h index e7b673aed5f77..256bfd15a14b2 100644 --- a/include/nuttx/tls.h +++ b/include/nuttx/tls.h @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -39,6 +40,8 @@ #include #include #include +#include +#include #ifdef CONFIG_PTHREAD_ATFORK # include @@ -75,6 +78,15 @@ * Public Types ****************************************************************************/ +#ifdef CONFIG_FILE_STREAM +struct streamlist +{ + mutex_t sl_lock; /* For thread safety */ + struct file_struct sl_std[3]; + sq_queue_t sl_queue; +}; +#endif /* CONFIG_FILE_STREAM */ + #ifdef __cplusplus #define EXTERN extern "C" extern "C" diff --git a/include/stdio.h b/include/stdio.h index 1aa4e6691b5c8..0311f96bffb58 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -33,8 +33,17 @@ #include #include -#include -#include +#include +#include + +/* Kernel code, and every program of a flat or protected build, still sees + * the file system types through stdio.h. The programs of a kernel build + * cannot use them, and do not see them. + */ + +#if !defined(CONFIG_BUILD_KERNEL) || defined(__KERNEL__) +# include +#endif /**************************************************************************** * Pre-processor Definitions @@ -59,6 +68,13 @@ #define _IOLBF 1 /* Line buffered */ #define _IONBF 2 /* Unbuffered */ +/* Stream flags for the fs_flags field of in struct file_struct */ + +#define __FS_FLAG_EOF (1 << 0) /* EOF detected by a read operation */ +#define __FS_FLAG_ERROR (1 << 1) /* Error detected by any operation */ +#define __FS_FLAG_LBF (1 << 2) /* Line buffered */ +#define __FS_FLAG_UBF (1 << 3) /* Buffer allocated by caller of setvbuf */ + /* File system error values */ #define EOF (-1) @@ -109,6 +125,94 @@ * Public Type Definitions ****************************************************************************/ +/* Definitions for custom stream operations with fopencookie. The + * implementation is as defined in Standard C library (libc). The only + * difference is that we use off_t instead of off64_t. This means + * off_t is int64_t if CONFIG_FS_LARGEFILE is defined and int32_t if not. + * + * These callbacks can either lead to custom functions if fopencookie is used + * or to standard file system functions if not. + */ + +typedef CODE ssize_t cookie_read_function_t(FAR void *cookie, FAR char *buf, + size_t size); +typedef CODE ssize_t cookie_write_function_t(FAR void *cookie, + FAR const char *buf, + size_t size); +typedef CODE off_t cookie_seek_function_t(FAR void *cookie, + FAR off_t *offset, + int whence); +typedef CODE int cookie_close_function_t(FAR void *cookie); + +typedef struct cookie_io_functions_t +{ + FAR cookie_read_function_t *read; + FAR cookie_write_function_t *write; + FAR cookie_seek_function_t *seek; + FAR cookie_close_function_t *close; +} cookie_io_functions_t; + +/* The following structure defines the list of files used for standard C I/O. + * Note that NuttX can support the standard C APIs with or without buffering + * + * When buffering is used, the following describes the usage of the I/O + * buffer. + * The buffer can be used for reading or writing -- but not both at the same + * time. + * An fflush is implied between each change in direction of access. + * + * The field fs_bufread determines whether the buffer is being used for + * reading or for writing as follows: + * + * BUFFER + * +----------------------+ <- fs_bufstart Points to the beginning of + * | | the buffer. + * | WR: Buffered data | WR: Start of buffered write + * | | data. + * | RD: Already read | RD: Start of already read + * | | data. + * +----------------------+ + * | WR: Available buffer | <- fs_bufpos Points to next byte: + * | RD: Read-ahead data | WR: End+1 of buffered write + * | | data. + * | | RD: Points to next char to + * | | return + * +----------------------+ + * | WR: Available | <- fs_bufread Top+1 of buffered read data + * | RD: Available | WR: bufstart buffer used for + * | | writing. + * | | RD: Pointer to last buffered + * | | read char+1 + * +----------------------+ + * <- fs_bufend Points to the end of the + * buffer+1 + */ + +#ifdef CONFIG_FILE_STREAM +struct file_struct +{ + sq_entry_t fs_entry; /* Entry of file stream */ + rmutex_t fs_lock; /* Recursive lock */ + cookie_io_functions_t fs_iofunc; /* Callbacks to user / system functions */ + FAR void *fs_cookie; /* Pointer to file descriptor / cookie struct */ +#ifndef CONFIG_STDIO_DISABLE_BUFFERING + FAR char *fs_bufstart; /* Pointer to start of buffer */ + FAR char *fs_bufend; /* Pointer to 1 past end of buffer */ + FAR char *fs_bufpos; /* Current position in buffer */ + FAR char *fs_bufread; /* Pointer to 1 past last buffered read char. */ +# if CONFIG_STDIO_BUFFER_SIZE > 0 + char fs_buffer[CONFIG_STDIO_BUFFER_SIZE]; +# endif +#endif + uint16_t fs_oflags; /* Open mode flags */ + uint8_t fs_flags; /* Stream flags */ +#if CONFIG_NUNGET_CHARS > 0 + uint8_t fs_nungotten; /* The number of characters buffered for ungetc */ + char fs_ungotten[CONFIG_NUNGET_CHARS]; +#endif +}; +#endif /* CONFIG_FILE_STREAM */ + /* Streams */ typedef struct file_struct FILE; @@ -132,6 +236,10 @@ extern "C" /* ANSI-like File System Interfaces */ +/* The standard streams, see stdin, stdout and stderr above */ + +FAR FILE *lib_get_stream(int fd); + /* Operations on streams (FILE) */ void clearerr(FAR FILE *stream); diff --git a/libs/libbuiltin/libgcc/gcov.c b/libs/libbuiltin/libgcc/gcov.c index 18c309cce4040..2ff033bd1117d 100644 --- a/libs/libbuiltin/libgcc/gcov.c +++ b/libs/libbuiltin/libgcc/gcov.c @@ -31,6 +31,7 @@ #include #include +#include #include /**************************************************************************** diff --git a/libs/libc/gdbstub/lib_gdbstub.c b/libs/libc/gdbstub/lib_gdbstub.c index dac21623eb9ac..0cccc4a975b9d 100644 --- a/libs/libc/gdbstub/lib_gdbstub.c +++ b/libs/libc/gdbstub/lib_gdbstub.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include diff --git a/libs/libc/libc.h b/libs/libc/libc.h index 465c636589bec..02c8d5928a2f8 100644 --- a/libs/libc/libc.h +++ b/libs/libc/libc.h @@ -38,6 +38,7 @@ # include # include +# include # include #endif diff --git a/libs/libc/locale/lib_iconv.c b/libs/libc/locale/lib_iconv.c index 6ffac2a1ef9a2..f6897d6552d9f 100644 --- a/libs/libc/locale/lib_iconv.c +++ b/libs/libc/locale/lib_iconv.c @@ -33,6 +33,8 @@ #include #include +#include + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ diff --git a/libs/libc/misc/lib_ftok.c b/libs/libc/misc/lib_ftok.c index 56cb7b4e80d7e..75e3625aa4fdc 100644 --- a/libs/libc/misc/lib_ftok.c +++ b/libs/libc/misc/lib_ftok.c @@ -33,6 +33,8 @@ #include #include +#include + /**************************************************************************** * Public Functions ****************************************************************************/ diff --git a/libs/libc/netdb/lib_netdb.h b/libs/libc/netdb/lib_netdb.h index 03bb762888cb8..815e8035059fd 100644 --- a/libs/libc/netdb/lib_netdb.h +++ b/libs/libc/netdb/lib_netdb.h @@ -30,6 +30,7 @@ #include #include +#include #include #ifdef CONFIG_LIBC_NETDB diff --git a/libs/libc/pwd/lib_getspnamr.c b/libs/libc/pwd/lib_getspnamr.c index 69ee8622a2bc3..8a68fe031372b 100644 --- a/libs/libc/pwd/lib_getspnamr.c +++ b/libs/libc/pwd/lib_getspnamr.c @@ -25,6 +25,7 @@ #include #include +#include #include #include diff --git a/libs/libc/signal/sig_psignal.c b/libs/libc/signal/sig_psignal.c index 4402f80c269e9..10df6dcc1fb16 100644 --- a/libs/libc/signal/sig_psignal.c +++ b/libs/libc/signal/sig_psignal.c @@ -27,6 +27,7 @@ #include #include +#include #include #include #include diff --git a/libs/libc/stdio/lib_clearerr.c b/libs/libc/stdio/lib_clearerr.c index 43f2adb553769..18b0ee22210f9 100644 --- a/libs/libc/stdio/lib_clearerr.c +++ b/libs/libc/stdio/lib_clearerr.c @@ -30,6 +30,7 @@ #include #include +#include #ifdef CONFIG_FILE_STREAM diff --git a/libs/libc/stdio/lib_feof.c b/libs/libc/stdio/lib_feof.c index dcbde85dcbae8..9eab089708ee6 100644 --- a/libs/libc/stdio/lib_feof.c +++ b/libs/libc/stdio/lib_feof.c @@ -30,6 +30,7 @@ #include #include +#include #ifdef CONFIG_FILE_STREAM diff --git a/libs/libc/stdio/lib_ferror.c b/libs/libc/stdio/lib_ferror.c index 93522581ebe29..ef7ba9b54142c 100644 --- a/libs/libc/stdio/lib_ferror.c +++ b/libs/libc/stdio/lib_ferror.c @@ -30,6 +30,7 @@ #include #include +#include #ifdef CONFIG_FILE_STREAM diff --git a/libs/libc/stdio/lib_fgetwc.c b/libs/libc/stdio/lib_fgetwc.c index f5a9027aa6da8..16fb53076c5c3 100644 --- a/libs/libc/stdio/lib_fgetwc.c +++ b/libs/libc/stdio/lib_fgetwc.c @@ -33,6 +33,8 @@ #include #include +#include "libc.h" + #ifdef CONFIG_FILE_STREAM /**************************************************************************** diff --git a/libs/libc/stdio/lib_fileno.c b/libs/libc/stdio/lib_fileno.c index a32e57fe6fe92..4366d87f69576 100644 --- a/libs/libc/stdio/lib_fileno.c +++ b/libs/libc/stdio/lib_fileno.c @@ -30,6 +30,7 @@ #include #include +#include #ifdef CONFIG_FILE_STREAM diff --git a/libs/libc/stdio/lib_libfilelock.c b/libs/libc/stdio/lib_libfilelock.c index a0e355b6933fd..10ffa091bb5a5 100644 --- a/libs/libc/stdio/lib_libfilelock.c +++ b/libs/libc/stdio/lib_libfilelock.c @@ -34,6 +34,7 @@ #include #include +#include /**************************************************************************** * Public Functions diff --git a/libs/libc/stdio/lib_printf.c b/libs/libc/stdio/lib_printf.c index 7c787fb735e09..190eeee336513 100644 --- a/libs/libc/stdio/lib_printf.c +++ b/libs/libc/stdio/lib_printf.c @@ -25,6 +25,7 @@ ****************************************************************************/ #include +#include /**************************************************************************** * Public Functions diff --git a/libs/libc/stdio/lib_putwchar.c b/libs/libc/stdio/lib_putwchar.c index c4761fc6c0d07..cd8aec0219df9 100644 --- a/libs/libc/stdio/lib_putwchar.c +++ b/libs/libc/stdio/lib_putwchar.c @@ -31,6 +31,8 @@ #include #include +#include +#include #include /**************************************************************************** diff --git a/libs/libc/stdio/lib_remove.c b/libs/libc/stdio/lib_remove.c index 5242c1ee800f2..f5947124dbef3 100644 --- a/libs/libc/stdio/lib_remove.c +++ b/libs/libc/stdio/lib_remove.c @@ -27,6 +27,7 @@ #include #include +#include #include #include diff --git a/libs/libc/stdio/lib_ungetwc.c b/libs/libc/stdio/lib_ungetwc.c index 648f654c6f419..6fe104487093c 100644 --- a/libs/libc/stdio/lib_ungetwc.c +++ b/libs/libc/stdio/lib_ungetwc.c @@ -34,6 +34,9 @@ #include #include #include +#include + +#include "libc.h" #ifdef CONFIG_FILE_STREAM diff --git a/libs/libc/stdio/lib_vasprintf.c b/libs/libc/stdio/lib_vasprintf.c index 97090ed681f57..0346f2567f03b 100644 --- a/libs/libc/stdio/lib_vasprintf.c +++ b/libs/libc/stdio/lib_vasprintf.c @@ -25,6 +25,7 @@ ****************************************************************************/ #include +#include /**************************************************************************** * Pre-processor Definitions diff --git a/libs/libc/stdio/lib_vprintf.c b/libs/libc/stdio/lib_vprintf.c index fd980a99ee192..456506817dc02 100644 --- a/libs/libc/stdio/lib_vprintf.c +++ b/libs/libc/stdio/lib_vprintf.c @@ -25,6 +25,7 @@ ****************************************************************************/ #include +#include /**************************************************************************** * Public Functions diff --git a/libs/libc/unistd/lib_getpass.c b/libs/libc/unistd/lib_getpass.c index cb543fc035c41..9eb3222a1e824 100644 --- a/libs/libc/unistd/lib_getpass.c +++ b/libs/libc/unistd/lib_getpass.c @@ -23,6 +23,7 @@ ****************************************************************************/ #include +#include #include #include #include diff --git a/sched/misc/coredump.c b/sched/misc/coredump.c index 4ea68f3232acf..5a0e2a22aa83f 100644 --- a/sched/misc/coredump.c +++ b/sched/misc/coredump.c @@ -32,6 +32,7 @@ #include #include +#include #include #include