From 2a0f3a406cb9a597065574d79d19152473a0c5ef Mon Sep 17 00:00:00 2001 From: markmental Date: Mon, 14 Sep 2026 00:06:17 -0400 Subject: [PATCH] R1 LovePara: app-server stack, on-target C dev, new NIC support --- .config | 322 +- README.md | 7 +- board/mentalnet/linux-slim.config | 12 +- .../overlay/etc/lighttpd/conf.d/proxy.conf | 16 + .../overlay/etc/lighttpd/modules.conf | 176 + board/mentalnet/overlay/usr/bin/fastfetch | Bin 0 -> 2459768 bytes board/mentalnet/overlay/usr/bin/tcc | Bin 0 -> 370128 bytes board/mentalnet/overlay/usr/include/a.out.h | 138 + board/mentalnet/overlay/usr/include/aio.h | 253 + board/mentalnet/overlay/usr/include/aliases.h | 63 + board/mentalnet/overlay/usr/include/alloca.h | 40 + board/mentalnet/overlay/usr/include/ar.h | 47 + board/mentalnet/overlay/usr/include/argp.h | 564 + board/mentalnet/overlay/usr/include/argz.h | 156 + .../overlay/usr/include/asm-generic/auxvec.h | 8 + .../usr/include/asm-generic/bitsperlong.h | 31 + .../usr/include/asm-generic/bpf_perf_event.h | 9 + .../usr/include/asm-generic/errno-base.h | 40 + .../overlay/usr/include/asm-generic/errno.h | 123 + .../overlay/usr/include/asm-generic/fcntl.h | 221 + .../usr/include/asm-generic/hugetlb_encode.h | 37 + .../overlay/usr/include/asm-generic/int-l64.h | 35 + .../usr/include/asm-generic/int-ll64.h | 40 + .../overlay/usr/include/asm-generic/ioctl.h | 105 + .../overlay/usr/include/asm-generic/ioctls.h | 121 + .../overlay/usr/include/asm-generic/ipcbuf.h | 37 + .../usr/include/asm-generic/kvm_para.h | 4 + .../usr/include/asm-generic/mman-common.h | 90 + .../overlay/usr/include/asm-generic/mman.h | 22 + .../overlay/usr/include/asm-generic/msgbuf.h | 49 + .../overlay/usr/include/asm-generic/param.h | 20 + .../overlay/usr/include/asm-generic/poll.h | 42 + .../usr/include/asm-generic/posix_types.h | 99 + .../usr/include/asm-generic/resource.h | 62 + .../overlay/usr/include/asm-generic/sembuf.h | 45 + .../overlay/usr/include/asm-generic/setup.h | 7 + .../overlay/usr/include/asm-generic/shmbuf.h | 61 + .../overlay/usr/include/asm-generic/siginfo.h | 356 + .../usr/include/asm-generic/signal-defs.h | 93 + .../overlay/usr/include/asm-generic/signal.h | 91 + .../overlay/usr/include/asm-generic/socket.h | 167 + .../overlay/usr/include/asm-generic/sockios.h | 14 + .../overlay/usr/include/asm-generic/stat.h | 73 + .../overlay/usr/include/asm-generic/statfs.h | 84 + .../overlay/usr/include/asm-generic/swab.h | 19 + .../usr/include/asm-generic/termbits-common.h | 66 + .../usr/include/asm-generic/termbits.h | 149 + .../overlay/usr/include/asm-generic/termios.h | 51 + .../overlay/usr/include/asm-generic/types.h | 9 + .../usr/include/asm-generic/ucontext.h | 13 + .../overlay/usr/include/asm-generic/unistd.h | 893 + .../mentalnet/overlay/usr/include/asm/a.out.h | 21 + .../overlay/usr/include/asm/amd_hsmp.h | 416 + .../overlay/usr/include/asm/auxvec.h | 20 + .../overlay/usr/include/asm/bitsperlong.h | 14 + .../mentalnet/overlay/usr/include/asm/boot.h | 11 + .../overlay/usr/include/asm/bootparam.h | 215 + .../overlay/usr/include/asm/bpf_perf_event.h | 1 + .../overlay/usr/include/asm/byteorder.h | 7 + .../overlay/usr/include/asm/debugreg.h | 101 + .../mentalnet/overlay/usr/include/asm/e820.h | 80 + board/mentalnet/overlay/usr/include/asm/elf.h | 16 + .../mentalnet/overlay/usr/include/asm/errno.h | 1 + .../mentalnet/overlay/usr/include/asm/fcntl.h | 1 + .../overlay/usr/include/asm/hw_breakpoint.h | 2 + .../overlay/usr/include/asm/hwcap2.h | 13 + .../mentalnet/overlay/usr/include/asm/ioctl.h | 1 + .../overlay/usr/include/asm/ioctls.h | 1 + .../overlay/usr/include/asm/ipcbuf.h | 1 + board/mentalnet/overlay/usr/include/asm/ist.h | 30 + board/mentalnet/overlay/usr/include/asm/kvm.h | 929 ++ .../overlay/usr/include/asm/kvm_para.h | 152 + .../overlay/usr/include/asm/kvm_perf.h | 17 + board/mentalnet/overlay/usr/include/asm/ldt.h | 48 + board/mentalnet/overlay/usr/include/asm/mce.h | 45 + .../mentalnet/overlay/usr/include/asm/mman.h | 13 + .../overlay/usr/include/asm/msgbuf.h | 35 + board/mentalnet/overlay/usr/include/asm/msr.h | 14 + .../mentalnet/overlay/usr/include/asm/mtrr.h | 116 + .../mentalnet/overlay/usr/include/asm/param.h | 1 + .../overlay/usr/include/asm/perf_regs.h | 58 + .../mentalnet/overlay/usr/include/asm/poll.h | 1 + .../overlay/usr/include/asm/posix_types.h | 8 + .../overlay/usr/include/asm/posix_types_32.h | 26 + .../overlay/usr/include/asm/posix_types_64.h | 20 + .../overlay/usr/include/asm/posix_types_x32.h | 20 + .../mentalnet/overlay/usr/include/asm/prctl.h | 43 + .../overlay/usr/include/asm/processor-flags.h | 181 + .../overlay/usr/include/asm/ptrace-abi.h | 94 + .../overlay/usr/include/asm/ptrace.h | 82 + .../overlay/usr/include/asm/resource.h | 1 + .../overlay/usr/include/asm/sembuf.h | 36 + .../mentalnet/overlay/usr/include/asm/setup.h | 1 + .../overlay/usr/include/asm/setup_data.h | 83 + board/mentalnet/overlay/usr/include/asm/sgx.h | 232 + .../overlay/usr/include/asm/shmbuf.h | 47 + .../overlay/usr/include/asm/sigcontext.h | 380 + .../overlay/usr/include/asm/sigcontext32.h | 9 + .../overlay/usr/include/asm/siginfo.h | 15 + .../overlay/usr/include/asm/signal.h | 107 + .../overlay/usr/include/asm/socket.h | 1 + .../overlay/usr/include/asm/sockios.h | 1 + .../mentalnet/overlay/usr/include/asm/stat.h | 138 + .../overlay/usr/include/asm/statfs.h | 13 + board/mentalnet/overlay/usr/include/asm/svm.h | 244 + .../mentalnet/overlay/usr/include/asm/swab.h | 37 + .../overlay/usr/include/asm/termbits.h | 1 + .../overlay/usr/include/asm/termios.h | 1 + .../mentalnet/overlay/usr/include/asm/types.h | 1 + .../overlay/usr/include/asm/ucontext.h | 56 + .../overlay/usr/include/asm/unistd.h | 23 + .../overlay/usr/include/asm/unistd_32.h | 458 + .../overlay/usr/include/asm/unistd_64.h | 381 + .../overlay/usr/include/asm/unistd_x32.h | 370 + .../mentalnet/overlay/usr/include/asm/vm86.h | 130 + board/mentalnet/overlay/usr/include/asm/vmx.h | 167 + .../overlay/usr/include/asm/vsyscall.h | 13 + board/mentalnet/overlay/usr/include/assert.h | 156 + .../overlay/usr/include/bits/a.out.h | 11 + .../overlay/usr/include/bits/argp-ldbl.h | 24 + .../usr/include/bits/atomic_wide_counter.h | 35 + .../overlay/usr/include/bits/byteswap.h | 79 + .../overlay/usr/include/bits/cloexec.h | 1 + .../overlay/usr/include/bits/cmathcalls.h | 130 + .../overlay/usr/include/bits/confname.h | 681 + .../overlay/usr/include/bits/cpu-set.h | 124 + .../overlay/usr/include/bits/dirent.h | 59 + .../overlay/usr/include/bits/dirent_ext.h | 33 + .../overlay/usr/include/bits/dl_find_object.h | 29 + .../overlay/usr/include/bits/dlfcn.h | 64 + .../overlay/usr/include/bits/elfclass.h | 14 + .../overlay/usr/include/bits/endian.h | 49 + .../overlay/usr/include/bits/endianness.h | 11 + .../overlay/usr/include/bits/environments.h | 105 + .../overlay/usr/include/bits/epoll.h | 29 + .../overlay/usr/include/bits/err-ldbl.h | 30 + .../overlay/usr/include/bits/errno.h | 53 + .../overlay/usr/include/bits/error-ldbl.h | 69 + .../overlay/usr/include/bits/error.h | 73 + .../overlay/usr/include/bits/eventfd.h | 31 + .../overlay/usr/include/bits/fcntl-linux.h | 456 + .../overlay/usr/include/bits/fcntl.h | 61 + .../overlay/usr/include/bits/fcntl2.h | 259 + .../mentalnet/overlay/usr/include/bits/fenv.h | 116 + .../overlay/usr/include/bits/floatn-common.h | 329 + .../overlay/usr/include/bits/floatn.h | 133 + .../usr/include/bits/flt-eval-method.h | 33 + .../overlay/usr/include/bits/fp-fast.h | 39 + .../overlay/usr/include/bits/fp-logb.h | 24 + .../overlay/usr/include/bits/getopt_core.h | 96 + .../overlay/usr/include/bits/getopt_ext.h | 77 + .../overlay/usr/include/bits/getopt_posix.h | 51 + .../overlay/usr/include/bits/hwcap.h | 23 + board/mentalnet/overlay/usr/include/bits/in.h | 255 + .../usr/include/bits/indirect-return.h | 37 + .../overlay/usr/include/bits/initspin.h | 1 + .../overlay/usr/include/bits/inotify.h | 29 + .../overlay/usr/include/bits/ioctl-types.h | 77 + .../overlay/usr/include/bits/ioctls.h | 108 + .../overlay/usr/include/bits/ipc-perm.h | 40 + .../mentalnet/overlay/usr/include/bits/ipc.h | 40 + .../overlay/usr/include/bits/ipctypes.h | 33 + .../overlay/usr/include/bits/iscanonical.h | 54 + .../usr/include/bits/libc-header-start.h | 110 + .../usr/include/bits/libm-simd-decl-stubs.h | 376 + .../mentalnet/overlay/usr/include/bits/link.h | 159 + .../usr/include/bits/link_lavcurrent.h | 25 + .../overlay/usr/include/bits/local_lim.h | 99 + .../overlay/usr/include/bits/locale.h | 40 + .../overlay/usr/include/bits/long-double.h | 21 + .../overlay/usr/include/bits/math-vector.h | 147 + .../include/bits/mathcalls-helper-functions.h | 45 + .../usr/include/bits/mathcalls-macros.h | 48 + .../usr/include/bits/mathcalls-narrow.h | 39 + .../overlay/usr/include/bits/mathcalls.h | 469 + .../overlay/usr/include/bits/mathdef.h | 20 + .../overlay/usr/include/bits/mman-linux.h | 136 + .../usr/include/bits/mman-map-flags-generic.h | 40 + .../overlay/usr/include/bits/mman-shared.h | 86 + .../mentalnet/overlay/usr/include/bits/mman.h | 38 + .../overlay/usr/include/bits/mman_ext.h | 32 + .../overlay/usr/include/bits/monetary-ldbl.h | 27 + .../overlay/usr/include/bits/mqueue.h | 33 + .../overlay/usr/include/bits/mqueue2.h | 82 + .../mentalnet/overlay/usr/include/bits/msq.h | 60 + .../overlay/usr/include/bits/netdb.h | 32 + .../overlay/usr/include/bits/param.h | 42 + .../usr/include/bits/platform/features.h | 48 + .../overlay/usr/include/bits/platform/x86.h | 339 + .../mentalnet/overlay/usr/include/bits/poll.h | 49 + .../overlay/usr/include/bits/poll2.h | 108 + .../overlay/usr/include/bits/posix1_lim.h | 183 + .../overlay/usr/include/bits/posix2_lim.h | 90 + .../overlay/usr/include/bits/posix_opt.h | 194 + .../overlay/usr/include/bits/printf-ldbl.h | 23 + .../overlay/usr/include/bits/procfs-extra.h | 22 + .../overlay/usr/include/bits/procfs-id.h | 30 + .../usr/include/bits/procfs-prregset.h | 25 + .../overlay/usr/include/bits/procfs.h | 50 + .../include/bits/pthread_stack_min-dynamic.h | 31 + .../usr/include/bits/pthread_stack_min.h | 20 + .../usr/include/bits/pthreadtypes-arch.h | 55 + .../overlay/usr/include/bits/pthreadtypes.h | 121 + .../overlay/usr/include/bits/ptrace-shared.h | 152 + .../overlay/usr/include/bits/resource.h | 223 + .../mentalnet/overlay/usr/include/bits/rseq.h | 30 + .../overlay/usr/include/bits/sched.h | 161 + .../overlay/usr/include/bits/select-decl.h | 31 + .../overlay/usr/include/bits/select.h | 37 + .../overlay/usr/include/bits/select2.h | 33 + .../mentalnet/overlay/usr/include/bits/sem.h | 76 + .../overlay/usr/include/bits/semaphore.h | 39 + .../overlay/usr/include/bits/setjmp.h | 40 + .../overlay/usr/include/bits/setjmp2.h | 40 + .../mentalnet/overlay/usr/include/bits/shm.h | 108 + .../overlay/usr/include/bits/shmlba.h | 29 + .../overlay/usr/include/bits/sigaction.h | 83 + .../overlay/usr/include/bits/sigcontext.h | 196 + .../usr/include/bits/sigevent-consts.h | 41 + .../overlay/usr/include/bits/siginfo-arch.h | 17 + .../usr/include/bits/siginfo-consts-arch.h | 7 + .../overlay/usr/include/bits/siginfo-consts.h | 218 + .../overlay/usr/include/bits/signal_ext.h | 31 + .../overlay/usr/include/bits/signalfd.h | 29 + .../overlay/usr/include/bits/signum-arch.h | 64 + .../overlay/usr/include/bits/signum-generic.h | 81 + .../overlay/usr/include/bits/sigstack.h | 32 + .../overlay/usr/include/bits/sigstksz.h | 33 + .../overlay/usr/include/bits/sigthread.h | 44 + .../overlay/usr/include/bits/sockaddr.h | 42 + .../usr/include/bits/socket-constants.h | 81 + .../overlay/usr/include/bits/socket.h | 405 + .../overlay/usr/include/bits/socket2.h | 83 + .../overlay/usr/include/bits/socket_type.h | 55 + .../overlay/usr/include/bits/spawn_ext.h | 67 + .../overlay/usr/include/bits/ss_flags.h | 35 + .../overlay/usr/include/bits/stab.def | 233 + .../mentalnet/overlay/usr/include/bits/stat.h | 60 + .../overlay/usr/include/bits/statfs.h | 69 + .../overlay/usr/include/bits/statvfs.h | 113 + .../overlay/usr/include/bits/statx-generic.h | 69 + .../overlay/usr/include/bits/statx.h | 39 + .../overlay/usr/include/bits/stdint-intn.h | 29 + .../overlay/usr/include/bits/stdint-least.h | 36 + .../overlay/usr/include/bits/stdint-uintn.h | 29 + .../overlay/usr/include/bits/stdio-ldbl.h | 132 + .../overlay/usr/include/bits/stdio.h | 195 + .../overlay/usr/include/bits/stdio2-decl.h | 163 + .../overlay/usr/include/bits/stdio2.h | 404 + .../overlay/usr/include/bits/stdio_lim.h | 28 + .../overlay/usr/include/bits/stdlib-bsearch.h | 50 + .../overlay/usr/include/bits/stdlib-float.h | 29 + .../overlay/usr/include/bits/stdlib-ldbl.h | 63 + .../overlay/usr/include/bits/stdlib.h | 166 + .../usr/include/bits/string_fortified.h | 190 + .../usr/include/bits/strings_fortified.h | 36 + .../overlay/usr/include/bits/struct_mutex.h | 63 + .../overlay/usr/include/bits/struct_rwlock.h | 65 + .../overlay/usr/include/bits/struct_stat.h | 165 + .../include/bits/struct_stat_time64_helper.h | 66 + .../overlay/usr/include/bits/syscall.h | 2613 +++ .../overlay/usr/include/bits/syslog-decl.h | 35 + .../overlay/usr/include/bits/syslog-ldbl.h | 35 + .../overlay/usr/include/bits/syslog-path.h | 28 + .../overlay/usr/include/bits/syslog.h | 61 + .../overlay/usr/include/bits/sysmacros.h | 74 + .../overlay/usr/include/bits/termios-baud.h | 48 + .../overlay/usr/include/bits/termios-c_cc.h | 40 + .../usr/include/bits/termios-c_cflag.h | 38 + .../usr/include/bits/termios-c_iflag.h | 40 + .../usr/include/bits/termios-c_lflag.h | 58 + .../usr/include/bits/termios-c_oflag.h | 61 + .../overlay/usr/include/bits/termios-misc.h | 21 + .../overlay/usr/include/bits/termios-struct.h | 36 + .../overlay/usr/include/bits/termios-tcflow.h | 26 + .../overlay/usr/include/bits/termios.h | 76 + .../usr/include/bits/thread-shared-types.h | 116 + .../mentalnet/overlay/usr/include/bits/time.h | 93 + .../overlay/usr/include/bits/time64.h | 36 + .../overlay/usr/include/bits/timerfd.h | 29 + .../overlay/usr/include/bits/timesize.h | 27 + .../overlay/usr/include/bits/timex.h | 141 + .../overlay/usr/include/bits/types.h | 228 + .../overlay/usr/include/bits/types/FILE.h | 9 + .../overlay/usr/include/bits/types/__FILE.h | 7 + .../usr/include/bits/types/__fpos64_t.h | 16 + .../overlay/usr/include/bits/types/__fpos_t.h | 16 + .../usr/include/bits/types/__locale_t.h | 43 + .../usr/include/bits/types/__mbstate_t.h | 23 + .../usr/include/bits/types/__sigset_t.h | 10 + .../usr/include/bits/types/__sigval_t.h | 41 + .../overlay/usr/include/bits/types/clock_t.h | 9 + .../usr/include/bits/types/clockid_t.h | 9 + .../bits/types/cookie_io_functions_t.h | 63 + .../overlay/usr/include/bits/types/error_t.h | 24 + .../overlay/usr/include/bits/types/idtype_t.h | 14 + .../overlay/usr/include/bits/types/locale_t.h | 26 + .../usr/include/bits/types/mbstate_t.h | 8 + .../usr/include/bits/types/res_state.h | 61 + .../usr/include/bits/types/sig_atomic_t.h | 10 + .../usr/include/bits/types/sigevent_t.h | 48 + .../usr/include/bits/types/siginfo_t.h | 151 + .../overlay/usr/include/bits/types/sigset_t.h | 9 + .../overlay/usr/include/bits/types/sigval_t.h | 18 + .../overlay/usr/include/bits/types/stack_t.h | 33 + .../usr/include/bits/types/struct_FILE.h | 123 + .../include/bits/types/struct___jmp_buf_tag.h | 37 + .../usr/include/bits/types/struct_iovec.h | 32 + .../include/bits/types/struct_itimerspec.h | 14 + .../include/bits/types/struct_msqid64_ds.h | 30 + .../bits/types/struct_msqid64_ds_helper.h | 30 + .../usr/include/bits/types/struct_msqid_ds.h | 53 + .../usr/include/bits/types/struct_osockaddr.h | 12 + .../usr/include/bits/types/struct_rusage.h | 131 + .../include/bits/types/struct_sched_param.h | 28 + .../include/bits/types/struct_semid64_ds.h | 30 + .../bits/types/struct_semid64_ds_helper.h | 25 + .../usr/include/bits/types/struct_semid_ds.h | 38 + .../include/bits/types/struct_shmid64_ds.h | 30 + .../bits/types/struct_shmid64_ds_helper.h | 28 + .../usr/include/bits/types/struct_shmid_ds.h | 49 + .../usr/include/bits/types/struct_sigstack.h | 29 + .../usr/include/bits/types/struct_statx.h | 55 + .../bits/types/struct_statx_timestamp.h | 33 + .../usr/include/bits/types/struct_timeb.h | 15 + .../usr/include/bits/types/struct_timespec.h | 33 + .../usr/include/bits/types/struct_timeval.h | 18 + .../usr/include/bits/types/struct_tm.h | 28 + .../overlay/usr/include/bits/types/time_t.h | 13 + .../overlay/usr/include/bits/types/timer_t.h | 9 + .../overlay/usr/include/bits/types/wint_t.h | 23 + .../overlay/usr/include/bits/typesizes.h | 106 + .../overlay/usr/include/bits/uintn-identity.h | 50 + .../overlay/usr/include/bits/uio-ext.h | 56 + .../overlay/usr/include/bits/uio_lim.h | 32 + .../overlay/usr/include/bits/unistd-decl.h | 198 + .../overlay/usr/include/bits/unistd.h | 214 + .../overlay/usr/include/bits/unistd_ext.h | 50 + .../mentalnet/overlay/usr/include/bits/utmp.h | 127 + .../overlay/usr/include/bits/utmpx.h | 106 + .../overlay/usr/include/bits/utsname.h | 28 + .../overlay/usr/include/bits/waitflags.h | 39 + .../overlay/usr/include/bits/waitstatus.h | 59 + .../overlay/usr/include/bits/wchar-ldbl.h | 115 + .../overlay/usr/include/bits/wchar.h | 49 + .../overlay/usr/include/bits/wchar2-decl.h | 296 + .../overlay/usr/include/bits/wchar2.h | 360 + .../overlay/usr/include/bits/wctype-wchar.h | 173 + .../overlay/usr/include/bits/wordsize.h | 16 + .../overlay/usr/include/bits/xopen_lim.h | 148 + .../mentalnet/overlay/usr/include/byteswap.h | 40 + board/mentalnet/overlay/usr/include/com_err.h | 68 + board/mentalnet/overlay/usr/include/complex.h | 250 + board/mentalnet/overlay/usr/include/cpio.h | 73 + board/mentalnet/overlay/usr/include/crypt.h | 251 + board/mentalnet/overlay/usr/include/ctype.h | 329 + board/mentalnet/overlay/usr/include/curses.h | 1807 ++ board/mentalnet/overlay/usr/include/dirent.h | 408 + board/mentalnet/overlay/usr/include/dlfcn.h | 232 + board/mentalnet/overlay/usr/include/elf.h | 4494 +++++ board/mentalnet/overlay/usr/include/endian.h | 72 + board/mentalnet/overlay/usr/include/envz.h | 73 + board/mentalnet/overlay/usr/include/err.h | 62 + board/mentalnet/overlay/usr/include/errno.h | 55 + board/mentalnet/overlay/usr/include/error.h | 65 + board/mentalnet/overlay/usr/include/eti.h | 55 + .../mentalnet/overlay/usr/include/execinfo.h | 43 + board/mentalnet/overlay/usr/include/fcntl.h | 346 + .../overlay/usr/include/features-time64.h | 42 + .../mentalnet/overlay/usr/include/features.h | 551 + board/mentalnet/overlay/usr/include/fenv.h | 170 + board/mentalnet/overlay/usr/include/ffi.h | 518 + .../mentalnet/overlay/usr/include/ffitarget.h | 164 + board/mentalnet/overlay/usr/include/fmtmsg.h | 105 + board/mentalnet/overlay/usr/include/fnmatch.h | 62 + board/mentalnet/overlay/usr/include/form.h | 460 + .../overlay/usr/include/fpu_control.h | 108 + board/mentalnet/overlay/usr/include/fstab.h | 79 + board/mentalnet/overlay/usr/include/fts.h | 248 + board/mentalnet/overlay/usr/include/ftw.h | 219 + board/mentalnet/overlay/usr/include/gconv.h | 147 + board/mentalnet/overlay/usr/include/getopt.h | 38 + board/mentalnet/overlay/usr/include/glob.h | 203 + .../overlay/usr/include/gnu-versions.h | 52 + .../overlay/usr/include/gnu/lib-names-32.h | 27 + .../overlay/usr/include/gnu/lib-names.h | 17 + .../overlay/usr/include/gnu/libc-version.h | 34 + .../overlay/usr/include/gnu/stubs-32.h | 16 + .../mentalnet/overlay/usr/include/gnu/stubs.h | 14 + board/mentalnet/overlay/usr/include/grp.h | 207 + board/mentalnet/overlay/usr/include/gshadow.h | 132 + board/mentalnet/overlay/usr/include/iconv.h | 56 + board/mentalnet/overlay/usr/include/ieee754.h | 198 + board/mentalnet/overlay/usr/include/ifaddrs.h | 73 + .../mentalnet/overlay/usr/include/inttypes.h | 417 + board/mentalnet/overlay/usr/include/jq.h | 80 + board/mentalnet/overlay/usr/include/jv.h | 293 + .../mentalnet/overlay/usr/include/langinfo.h | 674 + board/mentalnet/overlay/usr/include/lastlog.h | 4 + board/mentalnet/overlay/usr/include/libgen.h | 39 + board/mentalnet/overlay/usr/include/libintl.h | 123 + board/mentalnet/overlay/usr/include/limits.h | 204 + board/mentalnet/overlay/usr/include/link.h | 211 + .../overlay/usr/include/linux/a.out.h | 247 + .../overlay/usr/include/linux/acct.h | 120 + .../overlay/usr/include/linux/acrn.h | 649 + .../mentalnet/overlay/usr/include/linux/adb.h | 45 + .../overlay/usr/include/linux/adfs_fs.h | 45 + .../usr/include/linux/affs_hardblocks.h | 69 + .../overlay/usr/include/linux/agpgart.h | 111 + .../overlay/usr/include/linux/aio_abi.h | 113 + .../overlay/usr/include/linux/am437x-vpfe.h | 125 + .../mentalnet/overlay/usr/include/linux/amt.h | 62 + .../usr/include/linux/android/binder.h | 592 + .../usr/include/linux/android/binderfs.h | 35 + .../overlay/usr/include/linux/apm_bios.h | 138 + .../overlay/usr/include/linux/arcfb.h | 9 + .../overlay/usr/include/linux/arm_sdei.h | 73 + .../usr/include/linux/aspeed-lpc-ctrl.h | 62 + .../usr/include/linux/aspeed-p2a-ctrl.h | 62 + .../overlay/usr/include/linux/aspeed-video.h | 14 + .../overlay/usr/include/linux/atalk.h | 45 + .../mentalnet/overlay/usr/include/linux/atm.h | 242 + .../overlay/usr/include/linux/atm_eni.h | 24 + .../overlay/usr/include/linux/atm_he.h | 21 + .../overlay/usr/include/linux/atm_idt77105.h | 29 + .../overlay/usr/include/linux/atm_nicstar.h | 54 + .../overlay/usr/include/linux/atm_tcp.h | 62 + .../overlay/usr/include/linux/atm_zatm.h | 47 + .../overlay/usr/include/linux/atmapi.h | 30 + .../overlay/usr/include/linux/atmarp.h | 42 + .../overlay/usr/include/linux/atmbr2684.h | 118 + .../overlay/usr/include/linux/atmclip.h | 22 + .../overlay/usr/include/linux/atmdev.h | 212 + .../overlay/usr/include/linux/atmioc.h | 42 + .../overlay/usr/include/linux/atmlec.h | 92 + .../overlay/usr/include/linux/atmmpc.h | 127 + .../overlay/usr/include/linux/atmppp.h | 25 + .../overlay/usr/include/linux/atmsap.h | 163 + .../overlay/usr/include/linux/atmsvc.h | 56 + .../overlay/usr/include/linux/audit.h | 525 + .../usr/include/linux/auto_dev-ioctl.h | 216 + .../overlay/usr/include/linux/auto_fs.h | 229 + .../overlay/usr/include/linux/auto_fs4.h | 15 + .../overlay/usr/include/linux/auxvec.h | 44 + .../overlay/usr/include/linux/ax25.h | 117 + .../overlay/usr/include/linux/batadv_packet.h | 666 + .../overlay/usr/include/linux/batman_adv.h | 704 + .../overlay/usr/include/linux/baycom.h | 40 + .../overlay/usr/include/linux/bcm933xx_hcs.h | 25 + .../overlay/usr/include/linux/bfs_fs.h | 82 + .../overlay/usr/include/linux/binfmts.h | 25 + .../overlay/usr/include/linux/bits.h | 18 + .../overlay/usr/include/linux/blkdev.h | 14 + .../overlay/usr/include/linux/blkpg.h | 36 + .../overlay/usr/include/linux/blktrace_api.h | 146 + .../overlay/usr/include/linux/blkzoned.h | 173 + .../mentalnet/overlay/usr/include/linux/bpf.h | 7530 +++++++++ .../overlay/usr/include/linux/bpf_common.h | 57 + .../usr/include/linux/bpf_perf_event.h | 19 + .../overlay/usr/include/linux/bpqether.h | 40 + .../mentalnet/overlay/usr/include/linux/bsg.h | 67 + .../overlay/usr/include/linux/bt-bmc.h | 19 + .../mentalnet/overlay/usr/include/linux/btf.h | 200 + .../overlay/usr/include/linux/btrfs.h | 1187 ++ .../overlay/usr/include/linux/btrfs_tree.h | 1322 ++ .../usr/include/linux/byteorder/big_endian.h | 107 + .../include/linux/byteorder/little_endian.h | 107 + .../overlay/usr/include/linux/cachefiles.h | 68 + .../usr/include/linux/caif/caif_socket.h | 195 + .../overlay/usr/include/linux/caif/if_caif.h | 35 + .../mentalnet/overlay/usr/include/linux/can.h | 294 + .../overlay/usr/include/linux/can/bcm.h | 105 + .../overlay/usr/include/linux/can/error.h | 143 + .../overlay/usr/include/linux/can/gw.h | 222 + .../overlay/usr/include/linux/can/isotp.h | 183 + .../overlay/usr/include/linux/can/j1939.h | 108 + .../overlay/usr/include/linux/can/netlink.h | 185 + .../overlay/usr/include/linux/can/raw.h | 86 + .../overlay/usr/include/linux/can/vxcan.h | 13 + .../overlay/usr/include/linux/capability.h | 431 + .../overlay/usr/include/linux/capi.h | 132 + .../overlay/usr/include/linux/cciss_defs.h | 131 + .../overlay/usr/include/linux/cciss_ioctl.h | 89 + .../mentalnet/overlay/usr/include/linux/ccs.h | 18 + .../overlay/usr/include/linux/cdrom.h | 969 ++ .../overlay/usr/include/linux/cec-funcs.h | 1958 +++ .../mentalnet/overlay/usr/include/linux/cec.h | 1213 ++ .../overlay/usr/include/linux/cfm_bridge.h | 64 + .../overlay/usr/include/linux/cgroupstats.h | 70 + .../overlay/usr/include/linux/chio.h | 166 + .../usr/include/linux/cifs/cifs_mount.h | 27 + .../usr/include/linux/cifs/cifs_netlink.h | 63 + .../overlay/usr/include/linux/close_range.h | 12 + .../overlay/usr/include/linux/cn_proc.h | 159 + .../overlay/usr/include/linux/coda.h | 756 + .../overlay/usr/include/linux/coff.h | 357 + .../overlay/usr/include/linux/comedi.h | 1528 ++ .../overlay/usr/include/linux/connector.h | 81 + .../overlay/usr/include/linux/const.h | 53 + .../overlay/usr/include/linux/coresight-stm.h | 25 + .../overlay/usr/include/linux/counter.h | 170 + .../overlay/usr/include/linux/cramfs_fs.h | 113 + .../overlay/usr/include/linux/cryptouser.h | 213 + .../overlay/usr/include/linux/cuda.h | 34 + .../overlay/usr/include/linux/cxl_mem.h | 233 + .../overlay/usr/include/linux/cyclades.h | 35 + .../overlay/usr/include/linux/cycx_cfm.h | 102 + .../overlay/usr/include/linux/dcbnl.h | 779 + .../overlay/usr/include/linux/dccp.h | 238 + .../overlay/usr/include/linux/devlink.h | 713 + .../mentalnet/overlay/usr/include/linux/dlm.h | 78 + .../overlay/usr/include/linux/dlm_device.h | 109 + .../overlay/usr/include/linux/dlm_plock.h | 47 + .../overlay/usr/include/linux/dlmconstants.h | 167 + .../overlay/usr/include/linux/dm-ioctl.h | 385 + .../usr/include/linux/dm-log-userspace.h | 432 + .../overlay/usr/include/linux/dma-buf.h | 183 + .../overlay/usr/include/linux/dma-heap.h | 53 + .../overlay/usr/include/linux/dns_resolver.h | 116 + .../overlay/usr/include/linux/dpll.h | 266 + .../overlay/usr/include/linux/dqblk_xfs.h | 228 + .../overlay/usr/include/linux/dvb/audio.h | 86 + .../overlay/usr/include/linux/dvb/ca.h | 138 + .../overlay/usr/include/linux/dvb/dmx.h | 311 + .../overlay/usr/include/linux/dvb/frontend.h | 1058 ++ .../overlay/usr/include/linux/dvb/net.h | 53 + .../overlay/usr/include/linux/dvb/osd.h | 166 + .../overlay/usr/include/linux/dvb/version.h | 15 + .../overlay/usr/include/linux/dvb/video.h | 203 + .../overlay/usr/include/linux/dw100.h | 14 + .../mentalnet/overlay/usr/include/linux/edd.h | 192 + .../overlay/usr/include/linux/efs_fs_sb.h | 63 + .../overlay/usr/include/linux/elf-em.h | 71 + .../overlay/usr/include/linux/elf-fdpic.h | 50 + .../mentalnet/overlay/usr/include/linux/elf.h | 484 + .../overlay/usr/include/linux/errno.h | 1 + .../overlay/usr/include/linux/errqueue.h | 74 + .../overlay/usr/include/linux/erspan.h | 52 + .../overlay/usr/include/linux/ethtool.h | 2550 +++ .../usr/include/linux/ethtool_netlink.h | 1094 ++ .../overlay/usr/include/linux/eventfd.h | 11 + .../overlay/usr/include/linux/eventpoll.h | 101 + .../overlay/usr/include/linux/exfat.h | 25 + .../overlay/usr/include/linux/ext4.h | 117 + .../overlay/usr/include/linux/f2fs.h | 99 + .../overlay/usr/include/linux/fadvise.h | 22 + .../overlay/usr/include/linux/falloc.h | 81 + .../overlay/usr/include/linux/fanotify.h | 246 + .../mentalnet/overlay/usr/include/linux/fb.h | 394 + .../overlay/usr/include/linux/fcntl.h | 158 + .../mentalnet/overlay/usr/include/linux/fd.h | 402 + .../overlay/usr/include/linux/fdreg.h | 140 + .../overlay/usr/include/linux/fib_rules.h | 91 + .../overlay/usr/include/linux/fiemap.h | 70 + .../overlay/usr/include/linux/filter.h | 90 + .../overlay/usr/include/linux/firewire-cdev.h | 1179 ++ .../usr/include/linux/firewire-constants.h | 92 + .../mentalnet/overlay/usr/include/linux/fou.h | 46 + .../overlay/usr/include/linux/fpga-dfl.h | 279 + .../mentalnet/overlay/usr/include/linux/fs.h | 551 + .../overlay/usr/include/linux/fscrypt.h | 195 + .../mentalnet/overlay/usr/include/linux/fsi.h | 82 + .../usr/include/linux/fsl_hypervisor.h | 221 + .../overlay/usr/include/linux/fsl_mc.h | 34 + .../overlay/usr/include/linux/fsmap.h | 113 + .../overlay/usr/include/linux/fsverity.h | 96 + .../overlay/usr/include/linux/fuse.h | 1205 ++ .../overlay/usr/include/linux/futex.h | 205 + .../overlay/usr/include/linux/gameport.h | 29 + .../overlay/usr/include/linux/gen_stats.h | 78 + .../overlay/usr/include/linux/genetlink.h | 103 + .../usr/include/linux/genwqe/genwqe_card.h | 502 + .../overlay/usr/include/linux/gfs2_ondisk.h | 542 + .../overlay/usr/include/linux/gpio.h | 534 + .../overlay/usr/include/linux/gsmmux.h | 148 + .../mentalnet/overlay/usr/include/linux/gtp.h | 41 + .../overlay/usr/include/linux/handshake.h | 74 + .../overlay/usr/include/linux/hash_info.h | 44 + .../overlay/usr/include/linux/hdlc.h | 24 + .../overlay/usr/include/linux/hdlc/ioctl.h | 94 + .../overlay/usr/include/linux/hdlcdrv.h | 111 + .../overlay/usr/include/linux/hdreg.h | 643 + .../mentalnet/overlay/usr/include/linux/hid.h | 81 + .../overlay/usr/include/linux/hiddev.h | 213 + .../overlay/usr/include/linux/hidraw.h | 61 + .../overlay/usr/include/linux/hpet.h | 26 + .../usr/include/linux/hsi/cs-protocol.h | 106 + .../overlay/usr/include/linux/hsi/hsi_char.h | 51 + .../overlay/usr/include/linux/hsr_netlink.h | 51 + .../overlay/usr/include/linux/hw_breakpoint.h | 25 + .../overlay/usr/include/linux/hyperv.h | 411 + .../overlay/usr/include/linux/i2c-dev.h | 60 + .../mentalnet/overlay/usr/include/linux/i2c.h | 164 + .../overlay/usr/include/linux/i2o-dev.h | 422 + .../mentalnet/overlay/usr/include/linux/i8k.h | 48 + .../overlay/usr/include/linux/icmp.h | 162 + .../overlay/usr/include/linux/icmpv6.h | 179 + .../overlay/usr/include/linux/idxd.h | 395 + .../mentalnet/overlay/usr/include/linux/if.h | 296 + .../overlay/usr/include/linux/if_addr.h | 77 + .../overlay/usr/include/linux/if_addrlabel.h | 33 + .../overlay/usr/include/linux/if_alg.h | 61 + .../overlay/usr/include/linux/if_arcnet.h | 130 + .../overlay/usr/include/linux/if_arp.h | 165 + .../overlay/usr/include/linux/if_bonding.h | 155 + .../overlay/usr/include/linux/if_bridge.h | 858 + .../overlay/usr/include/linux/if_cablemodem.h | 23 + .../overlay/usr/include/linux/if_eql.h | 55 + .../overlay/usr/include/linux/if_ether.h | 181 + .../overlay/usr/include/linux/if_fc.h | 52 + .../overlay/usr/include/linux/if_fddi.h | 122 + .../overlay/usr/include/linux/if_hippi.h | 154 + .../overlay/usr/include/linux/if_infiniband.h | 30 + .../overlay/usr/include/linux/if_link.h | 1978 +++ .../overlay/usr/include/linux/if_ltalk.h | 10 + .../overlay/usr/include/linux/if_macsec.h | 194 + .../overlay/usr/include/linux/if_packet.h | 320 + .../overlay/usr/include/linux/if_phonet.h | 17 + .../overlay/usr/include/linux/if_plip.h | 28 + .../overlay/usr/include/linux/if_ppp.h | 1 + .../overlay/usr/include/linux/if_pppol2tp.h | 105 + .../overlay/usr/include/linux/if_pppox.h | 160 + .../overlay/usr/include/linux/if_slip.h | 31 + .../overlay/usr/include/linux/if_team.h | 78 + .../overlay/usr/include/linux/if_tun.h | 118 + .../overlay/usr/include/linux/if_tunnel.h | 219 + .../overlay/usr/include/linux/if_vlan.h | 66 + .../overlay/usr/include/linux/if_x25.h | 27 + .../overlay/usr/include/linux/if_xdp.h | 173 + .../mentalnet/overlay/usr/include/linux/ife.h | 19 + .../overlay/usr/include/linux/igmp.h | 130 + .../overlay/usr/include/linux/iio/buffer.h | 32 + .../overlay/usr/include/linux/iio/events.h | 43 + .../overlay/usr/include/linux/iio/types.h | 132 + .../mentalnet/overlay/usr/include/linux/ila.h | 68 + .../mentalnet/overlay/usr/include/linux/in.h | 335 + .../mentalnet/overlay/usr/include/linux/in6.h | 302 + .../overlay/usr/include/linux/in_route.h | 33 + .../overlay/usr/include/linux/inet_diag.h | 239 + .../overlay/usr/include/linux/inotify.h | 84 + .../usr/include/linux/input-event-codes.h | 981 ++ .../overlay/usr/include/linux/input.h | 516 + .../overlay/usr/include/linux/io_uring.h | 850 + .../overlay/usr/include/linux/ioam6.h | 133 + .../overlay/usr/include/linux/ioam6_genl.h | 72 + .../usr/include/linux/ioam6_iptunnel.h | 64 + .../overlay/usr/include/linux/ioctl.h | 8 + .../overlay/usr/include/linux/iommufd.h | 814 + .../overlay/usr/include/linux/ioprio.h | 127 + .../mentalnet/overlay/usr/include/linux/ip.h | 181 + .../overlay/usr/include/linux/ip6_tunnel.h | 56 + .../overlay/usr/include/linux/ip_vs.h | 474 + .../mentalnet/overlay/usr/include/linux/ipc.h | 82 + .../overlay/usr/include/linux/ipmi.h | 443 + .../overlay/usr/include/linux/ipmi_bmc.h | 16 + .../overlay/usr/include/linux/ipmi_msgdefs.h | 104 + .../overlay/usr/include/linux/ipmi_ssif_bmc.h | 18 + .../overlay/usr/include/linux/ipsec.h | 48 + .../overlay/usr/include/linux/ipv6.h | 206 + .../overlay/usr/include/linux/ipv6_route.h | 64 + .../overlay/usr/include/linux/irqnr.h | 4 + .../overlay/usr/include/linux/isdn/capicmd.h | 117 + .../overlay/usr/include/linux/iso_fs.h | 166 + .../overlay/usr/include/linux/isst_if.h | 475 + .../overlay/usr/include/linux/ivtv.h | 74 + .../overlay/usr/include/linux/ivtvfb.h | 38 + .../overlay/usr/include/linux/jffs2.h | 218 + .../overlay/usr/include/linux/joystick.h | 133 + .../mentalnet/overlay/usr/include/linux/kcm.h | 41 + .../overlay/usr/include/linux/kcmp.h | 28 + .../overlay/usr/include/linux/kcov.h | 63 + .../mentalnet/overlay/usr/include/linux/kd.h | 190 + .../overlay/usr/include/linux/kdev_t.h | 12 + .../usr/include/linux/kernel-page-flags.h | 40 + .../overlay/usr/include/linux/kernel.h | 8 + .../overlay/usr/include/linux/kernelcapi.h | 48 + .../overlay/usr/include/linux/kexec.h | 66 + .../overlay/usr/include/linux/keyboard.h | 465 + .../overlay/usr/include/linux/keyctl.h | 136 + .../overlay/usr/include/linux/kfd_ioctl.h | 1667 ++ .../overlay/usr/include/linux/kfd_sysfs.h | 124 + .../mentalnet/overlay/usr/include/linux/kvm.h | 1570 ++ .../overlay/usr/include/linux/kvm_para.h | 39 + .../overlay/usr/include/linux/l2tp.h | 203 + .../overlay/usr/include/linux/landlock.h | 309 + .../overlay/usr/include/linux/libc-compat.h | 231 + .../overlay/usr/include/linux/limits.h | 21 + .../overlay/usr/include/linux/lirc.h | 237 + .../mentalnet/overlay/usr/include/linux/llc.h | 86 + .../overlay/usr/include/linux/loadpin.h | 22 + .../overlay/usr/include/linux/loop.h | 120 + .../mentalnet/overlay/usr/include/linux/lp.h | 111 + .../mentalnet/overlay/usr/include/linux/lsm.h | 93 + .../overlay/usr/include/linux/lwtunnel.h | 124 + .../overlay/usr/include/linux/magic.h | 107 + .../overlay/usr/include/linux/major.h | 178 + .../usr/include/linux/map_to_14segment.h | 241 + .../usr/include/linux/map_to_7segment.h | 179 + .../overlay/usr/include/linux/matroxfb.h | 43 + .../overlay/usr/include/linux/max2175.h | 29 + .../overlay/usr/include/linux/mctp.h | 100 + .../overlay/usr/include/linux/mdio.h | 492 + .../usr/include/linux/media-bus-format.h | 186 + .../overlay/usr/include/linux/media.h | 420 + .../linux/media/raspberrypi/pisp_be_config.h | 968 ++ .../linux/media/raspberrypi/pisp_common.h | 202 + .../mentalnet/overlay/usr/include/linux/mei.h | 118 + .../overlay/usr/include/linux/mei_uuid.h | 29 + .../overlay/usr/include/linux/membarrier.h | 169 + .../overlay/usr/include/linux/memfd.h | 39 + .../overlay/usr/include/linux/mempolicy.h | 76 + .../mentalnet/overlay/usr/include/linux/mii.h | 186 + .../overlay/usr/include/linux/minix_fs.h | 107 + .../overlay/usr/include/linux/misc/bcm_vk.h | 84 + .../overlay/usr/include/linux/mman.h | 59 + .../overlay/usr/include/linux/mmc/ioctl.h | 79 + .../overlay/usr/include/linux/mmtimer.h | 57 + .../overlay/usr/include/linux/module.h | 10 + .../overlay/usr/include/linux/mount.h | 217 + .../overlay/usr/include/linux/mpls.h | 77 + .../overlay/usr/include/linux/mpls_iptunnel.h | 31 + .../overlay/usr/include/linux/mptcp.h | 129 + .../overlay/usr/include/linux/mptcp_pm.h | 152 + .../overlay/usr/include/linux/mqueue.h | 56 + .../overlay/usr/include/linux/mroute.h | 187 + .../overlay/usr/include/linux/mroute6.h | 157 + .../overlay/usr/include/linux/mrp_bridge.h | 74 + .../overlay/usr/include/linux/msdos_fs.h | 197 + .../mentalnet/overlay/usr/include/linux/msg.h | 90 + .../overlay/usr/include/linux/mtio.h | 209 + .../overlay/usr/include/linux/nbd-netlink.h | 100 + .../mentalnet/overlay/usr/include/linux/nbd.h | 108 + .../overlay/usr/include/linux/ncsi.h | 136 + .../overlay/usr/include/linux/ndctl.h | 255 + .../overlay/usr/include/linux/neighbour.h | 224 + .../mentalnet/overlay/usr/include/linux/net.h | 58 + .../overlay/usr/include/linux/net_dropmon.h | 133 + .../overlay/usr/include/linux/net_namespace.h | 26 + .../overlay/usr/include/linux/net_tstamp.h | 206 + .../overlay/usr/include/linux/netconf.h | 30 + .../overlay/usr/include/linux/netdev.h | 210 + .../overlay/usr/include/linux/netdevice.h | 66 + .../overlay/usr/include/linux/netfilter.h | 76 + .../include/linux/netfilter/ipset/ip_set.h | 312 + .../linux/netfilter/ipset/ip_set_bitmap.h | 16 + .../linux/netfilter/ipset/ip_set_hash.h | 24 + .../linux/netfilter/ipset/ip_set_list.h | 24 + .../linux/netfilter/nf_conntrack_common.h | 148 + .../linux/netfilter/nf_conntrack_ftp.h | 19 + .../linux/netfilter/nf_conntrack_sctp.h | 22 + .../linux/netfilter/nf_conntrack_tcp.h | 58 + .../netfilter/nf_conntrack_tuple_common.h | 44 + .../usr/include/linux/netfilter/nf_log.h | 15 + .../usr/include/linux/netfilter/nf_nat.h | 55 + .../usr/include/linux/netfilter/nf_synproxy.h | 23 + .../usr/include/linux/netfilter/nf_tables.h | 1994 +++ .../linux/netfilter/nf_tables_compat.h | 39 + .../usr/include/linux/netfilter/nfnetlink.h | 82 + .../include/linux/netfilter/nfnetlink_acct.h | 46 + .../linux/netfilter/nfnetlink_compat.h | 62 + .../linux/netfilter/nfnetlink_conntrack.h | 291 + .../linux/netfilter/nfnetlink_cthelper.h | 56 + .../linux/netfilter/nfnetlink_cttimeout.h | 119 + .../include/linux/netfilter/nfnetlink_hook.h | 82 + .../include/linux/netfilter/nfnetlink_log.h | 112 + .../include/linux/netfilter/nfnetlink_osf.h | 120 + .../include/linux/netfilter/nfnetlink_queue.h | 130 + .../usr/include/linux/netfilter/x_tables.h | 186 + .../usr/include/linux/netfilter/xt_AUDIT.h | 27 + .../usr/include/linux/netfilter/xt_CHECKSUM.h | 21 + .../usr/include/linux/netfilter/xt_CLASSIFY.h | 11 + .../usr/include/linux/netfilter/xt_CONNMARK.h | 7 + .../include/linux/netfilter/xt_CONNSECMARK.h | 16 + .../usr/include/linux/netfilter/xt_CT.h | 42 + .../usr/include/linux/netfilter/xt_DSCP.h | 27 + .../usr/include/linux/netfilter/xt_HMARK.h | 52 + .../include/linux/netfilter/xt_IDLETIMER.h | 42 + .../usr/include/linux/netfilter/xt_LED.h | 16 + .../usr/include/linux/netfilter/xt_LOG.h | 20 + .../usr/include/linux/netfilter/xt_MARK.h | 7 + .../usr/include/linux/netfilter/xt_NFLOG.h | 25 + .../usr/include/linux/netfilter/xt_NFQUEUE.h | 39 + .../usr/include/linux/netfilter/xt_RATEEST.h | 17 + .../usr/include/linux/netfilter/xt_SECMARK.h | 29 + .../usr/include/linux/netfilter/xt_SYNPROXY.h | 15 + .../usr/include/linux/netfilter/xt_TCPMSS.h | 13 + .../include/linux/netfilter/xt_TCPOPTSTRIP.h | 16 + .../usr/include/linux/netfilter/xt_TEE.h | 15 + .../usr/include/linux/netfilter/xt_TPROXY.h | 25 + .../usr/include/linux/netfilter/xt_addrtype.h | 45 + .../usr/include/linux/netfilter/xt_bpf.h | 42 + .../usr/include/linux/netfilter/xt_cgroup.h | 41 + .../usr/include/linux/netfilter/xt_cluster.h | 20 + .../usr/include/linux/netfilter/xt_comment.h | 11 + .../include/linux/netfilter/xt_connbytes.h | 27 + .../include/linux/netfilter/xt_connlabel.h | 19 + .../include/linux/netfilter/xt_connlimit.h | 31 + .../usr/include/linux/netfilter/xt_connmark.h | 37 + .../include/linux/netfilter/xt_conntrack.h | 79 + .../usr/include/linux/netfilter/xt_cpu.h | 12 + .../usr/include/linux/netfilter/xt_dccp.h | 26 + .../usr/include/linux/netfilter/xt_devgroup.h | 22 + .../usr/include/linux/netfilter/xt_dscp.h | 32 + .../usr/include/linux/netfilter/xt_ecn.h | 36 + .../usr/include/linux/netfilter/xt_esp.h | 16 + .../include/linux/netfilter/xt_hashlimit.h | 123 + .../usr/include/linux/netfilter/xt_helper.h | 9 + .../usr/include/linux/netfilter/xt_ipcomp.h | 17 + .../usr/include/linux/netfilter/xt_iprange.h | 21 + .../usr/include/linux/netfilter/xt_ipvs.h | 31 + .../usr/include/linux/netfilter/xt_l2tp.h | 28 + .../usr/include/linux/netfilter/xt_length.h | 12 + .../usr/include/linux/netfilter/xt_limit.h | 25 + .../usr/include/linux/netfilter/xt_mac.h | 11 + .../usr/include/linux/netfilter/xt_mark.h | 16 + .../include/linux/netfilter/xt_multiport.h | 30 + .../usr/include/linux/netfilter/xt_nfacct.h | 19 + .../usr/include/linux/netfilter/xt_osf.h | 37 + .../usr/include/linux/netfilter/xt_owner.h | 25 + .../usr/include/linux/netfilter/xt_physdev.h | 24 + .../usr/include/linux/netfilter/xt_pkttype.h | 9 + .../usr/include/linux/netfilter/xt_policy.h | 62 + .../usr/include/linux/netfilter/xt_quota.h | 23 + .../usr/include/linux/netfilter/xt_rateest.h | 39 + .../usr/include/linux/netfilter/xt_realm.h | 13 + .../usr/include/linux/netfilter/xt_recent.h | 47 + .../usr/include/linux/netfilter/xt_rpfilter.h | 18 + .../usr/include/linux/netfilter/xt_sctp.h | 93 + .../usr/include/linux/netfilter/xt_set.h | 94 + .../usr/include/linux/netfilter/xt_socket.h | 30 + .../usr/include/linux/netfilter/xt_state.h | 13 + .../include/linux/netfilter/xt_statistic.h | 37 + .../usr/include/linux/netfilter/xt_string.h | 35 + .../usr/include/linux/netfilter/xt_tcpmss.h | 12 + .../usr/include/linux/netfilter/xt_tcpudp.h | 37 + .../usr/include/linux/netfilter/xt_time.h | 33 + .../usr/include/linux/netfilter/xt_u32.h | 43 + .../overlay/usr/include/linux/netfilter_arp.h | 21 + .../include/linux/netfilter_arp/arp_tables.h | 206 + .../include/linux/netfilter_arp/arpt_mangle.h | 27 + .../usr/include/linux/netfilter_bridge.h | 44 + .../linux/netfilter_bridge/ebt_802_3.h | 64 + .../linux/netfilter_bridge/ebt_among.h | 65 + .../include/linux/netfilter_bridge/ebt_arp.h | 38 + .../linux/netfilter_bridge/ebt_arpreply.h | 13 + .../include/linux/netfilter_bridge/ebt_ip.h | 54 + .../include/linux/netfilter_bridge/ebt_ip6.h | 52 + .../linux/netfilter_bridge/ebt_limit.h | 25 + .../include/linux/netfilter_bridge/ebt_log.h | 21 + .../linux/netfilter_bridge/ebt_mark_m.h | 17 + .../linux/netfilter_bridge/ebt_mark_t.h | 24 + .../include/linux/netfilter_bridge/ebt_nat.h | 16 + .../linux/netfilter_bridge/ebt_nflog.h | 24 + .../linux/netfilter_bridge/ebt_pkttype.h | 13 + .../linux/netfilter_bridge/ebt_redirect.h | 11 + .../include/linux/netfilter_bridge/ebt_stp.h | 47 + .../include/linux/netfilter_bridge/ebt_vlan.h | 23 + .../include/linux/netfilter_bridge/ebtables.h | 287 + .../usr/include/linux/netfilter_ipv4.h | 53 + .../include/linux/netfilter_ipv4/ip_tables.h | 229 + .../linux/netfilter_ipv4/ipt_CLUSTERIP.h | 38 + .../include/linux/netfilter_ipv4/ipt_ECN.h | 34 + .../include/linux/netfilter_ipv4/ipt_LOG.h | 20 + .../include/linux/netfilter_ipv4/ipt_REJECT.h | 21 + .../include/linux/netfilter_ipv4/ipt_TTL.h | 24 + .../usr/include/linux/netfilter_ipv4/ipt_ah.h | 18 + .../include/linux/netfilter_ipv4/ipt_ecn.h | 16 + .../include/linux/netfilter_ipv4/ipt_ttl.h | 24 + .../usr/include/linux/netfilter_ipv6.h | 50 + .../include/linux/netfilter_ipv6/ip6_tables.h | 270 + .../include/linux/netfilter_ipv6/ip6t_HL.h | 25 + .../include/linux/netfilter_ipv6/ip6t_LOG.h | 20 + .../include/linux/netfilter_ipv6/ip6t_NPT.h | 17 + .../linux/netfilter_ipv6/ip6t_REJECT.h | 23 + .../include/linux/netfilter_ipv6/ip6t_ah.h | 23 + .../include/linux/netfilter_ipv6/ip6t_frag.h | 26 + .../include/linux/netfilter_ipv6/ip6t_hl.h | 25 + .../linux/netfilter_ipv6/ip6t_ipv6header.h | 29 + .../include/linux/netfilter_ipv6/ip6t_mh.h | 17 + .../include/linux/netfilter_ipv6/ip6t_opts.h | 25 + .../include/linux/netfilter_ipv6/ip6t_rt.h | 34 + .../include/linux/netfilter_ipv6/ip6t_srh.h | 96 + .../overlay/usr/include/linux/netlink.h | 379 + .../overlay/usr/include/linux/netlink_diag.h | 65 + .../overlay/usr/include/linux/netrom.h | 37 + .../overlay/usr/include/linux/nexthop.h | 157 + .../mentalnet/overlay/usr/include/linux/nfc.h | 317 + .../mentalnet/overlay/usr/include/linux/nfs.h | 133 + .../overlay/usr/include/linux/nfs2.h | 68 + .../overlay/usr/include/linux/nfs3.h | 104 + .../overlay/usr/include/linux/nfs4.h | 185 + .../overlay/usr/include/linux/nfs4_mount.h | 72 + .../overlay/usr/include/linux/nfs_fs.h | 63 + .../overlay/usr/include/linux/nfs_idmap.h | 65 + .../overlay/usr/include/linux/nfs_mount.h | 69 + .../overlay/usr/include/linux/nfsacl.h | 33 + .../overlay/usr/include/linux/nfsd/cld.h | 97 + .../overlay/usr/include/linux/nfsd/debug.h | 34 + .../overlay/usr/include/linux/nfsd/export.h | 79 + .../overlay/usr/include/linux/nfsd/stats.h | 18 + .../overlay/usr/include/linux/nfsd_netlink.h | 96 + .../overlay/usr/include/linux/nilfs2_api.h | 293 + .../overlay/usr/include/linux/nilfs2_ondisk.h | 651 + .../usr/include/linux/nitro_enclaves.h | 359 + .../usr/include/linux/nl80211-vnd-intel.h | 106 + .../overlay/usr/include/linux/nl80211.h | 8079 +++++++++ .../overlay/usr/include/linux/npcm-video.h | 41 + .../overlay/usr/include/linux/nsfs.h | 45 + .../mentalnet/overlay/usr/include/linux/nsm.h | 31 + .../overlay/usr/include/linux/ntsync.h | 23 + .../overlay/usr/include/linux/nubus.h | 224 + .../overlay/usr/include/linux/nvme_ioctl.h | 114 + .../overlay/usr/include/linux/nvram.h | 17 + .../overlay/usr/include/linux/omap3isp.h | 652 + .../overlay/usr/include/linux/omapfb.h | 223 + .../mentalnet/overlay/usr/include/linux/oom.h | 21 + .../overlay/usr/include/linux/openat2.h | 43 + .../overlay/usr/include/linux/openvswitch.h | 1103 ++ .../overlay/usr/include/linux/packet_diag.h | 81 + .../overlay/usr/include/linux/papr_pdsm.h | 165 + .../overlay/usr/include/linux/param.h | 7 + .../overlay/usr/include/linux/parport.h | 98 + .../overlay/usr/include/linux/patchkey.h | 34 + .../mentalnet/overlay/usr/include/linux/pci.h | 42 + .../overlay/usr/include/linux/pci_regs.h | 1195 ++ .../overlay/usr/include/linux/pcitest.h | 32 + .../overlay/usr/include/linux/perf_event.h | 1473 ++ .../overlay/usr/include/linux/personality.h | 70 + .../overlay/usr/include/linux/pfkeyv2.h | 386 + .../overlay/usr/include/linux/pfrut.h | 263 + .../mentalnet/overlay/usr/include/linux/pg.h | 67 + .../overlay/usr/include/linux/phantom.h | 50 + .../overlay/usr/include/linux/phonet.h | 186 + .../overlay/usr/include/linux/pidfd.h | 32 + .../overlay/usr/include/linux/pkt_cls.h | 800 + .../overlay/usr/include/linux/pkt_sched.h | 1211 ++ .../overlay/usr/include/linux/pktcdvd.h | 102 + .../mentalnet/overlay/usr/include/linux/pmu.h | 142 + .../overlay/usr/include/linux/poll.h | 1 + .../overlay/usr/include/linux/posix_acl.h | 40 + .../usr/include/linux/posix_acl_xattr.h | 39 + .../overlay/usr/include/linux/posix_types.h | 38 + .../overlay/usr/include/linux/ppdev.h | 103 + .../overlay/usr/include/linux/ppp-comp.h | 94 + .../overlay/usr/include/linux/ppp-ioctl.h | 125 + .../overlay/usr/include/linux/ppp_defs.h | 165 + .../mentalnet/overlay/usr/include/linux/pps.h | 151 + .../mentalnet/overlay/usr/include/linux/pr.h | 68 + .../overlay/usr/include/linux/prctl.h | 331 + .../overlay/usr/include/linux/psample.h | 71 + .../overlay/usr/include/linux/psci.h | 137 + .../overlay/usr/include/linux/psp-dbc.h | 147 + .../overlay/usr/include/linux/psp-sev.h | 268 + .../overlay/usr/include/linux/ptp_clock.h | 256 + .../overlay/usr/include/linux/ptrace.h | 186 + .../overlay/usr/include/linux/qemu_fw_cfg.h | 97 + .../overlay/usr/include/linux/qnx4_fs.h | 89 + .../overlay/usr/include/linux/qnxtypes.h | 29 + .../overlay/usr/include/linux/qrtr.h | 49 + .../overlay/usr/include/linux/quota.h | 200 + .../overlay/usr/include/linux/radeonfb.h | 16 + .../overlay/usr/include/linux/raid/md_p.h | 429 + .../overlay/usr/include/linux/raid/md_u.h | 149 + .../overlay/usr/include/linux/random.h | 73 + .../mentalnet/overlay/usr/include/linux/rds.h | 421 + .../overlay/usr/include/linux/reboot.h | 40 + .../overlay/usr/include/linux/reiserfs_fs.h | 27 + .../usr/include/linux/reiserfs_xattr.h | 25 + .../usr/include/linux/remoteproc_cdev.h | 37 + .../overlay/usr/include/linux/resource.h | 88 + .../overlay/usr/include/linux/rfkill.h | 191 + .../overlay/usr/include/linux/rio_cm_cdev.h | 79 + .../usr/include/linux/rio_mport_cdev.h | 278 + .../overlay/usr/include/linux/rkisp1-config.h | 1577 ++ .../overlay/usr/include/linux/romfs_fs.h | 60 + .../overlay/usr/include/linux/rose.h | 91 + .../overlay/usr/include/linux/route.h | 68 + .../mentalnet/overlay/usr/include/linux/rpl.h | 48 + .../overlay/usr/include/linux/rpl_iptunnel.h | 21 + .../overlay/usr/include/linux/rpmsg.h | 56 + .../overlay/usr/include/linux/rpmsg_types.h | 11 + .../overlay/usr/include/linux/rseq.h | 157 + .../mentalnet/overlay/usr/include/linux/rtc.h | 152 + .../overlay/usr/include/linux/rtnetlink.h | 830 + .../overlay/usr/include/linux/rxrpc.h | 121 + .../mentalnet/overlay/usr/include/linux/scc.h | 174 + .../overlay/usr/include/linux/sched.h | 149 + .../overlay/usr/include/linux/sched/types.h | 121 + .../overlay/usr/include/linux/scif_ioctl.h | 216 + .../overlay/usr/include/linux/screen_info.h | 76 + .../overlay/usr/include/linux/sctp.h | 1220 ++ .../overlay/usr/include/linux/seccomp.h | 157 + .../overlay/usr/include/linux/securebits.h | 61 + .../overlay/usr/include/linux/sed-opal.h | 219 + .../overlay/usr/include/linux/seg6.h | 55 + .../overlay/usr/include/linux/seg6_genl.h | 33 + .../overlay/usr/include/linux/seg6_hmac.h | 23 + .../overlay/usr/include/linux/seg6_iptunnel.h | 42 + .../overlay/usr/include/linux/seg6_local.h | 137 + .../usr/include/linux/selinux_netlink.h | 49 + .../mentalnet/overlay/usr/include/linux/sem.h | 94 + .../overlay/usr/include/linux/serial.h | 189 + .../overlay/usr/include/linux/serial_core.h | 237 + .../overlay/usr/include/linux/serial_reg.h | 387 + .../overlay/usr/include/linux/serio.h | 88 + .../overlay/usr/include/linux/sev-guest.h | 99 + .../mentalnet/overlay/usr/include/linux/shm.h | 109 + .../overlay/usr/include/linux/signal.h | 16 + .../overlay/usr/include/linux/signalfd.h | 57 + .../mentalnet/overlay/usr/include/linux/smc.h | 313 + .../overlay/usr/include/linux/smc_diag.h | 114 + .../overlay/usr/include/linux/smiapp.h | 30 + .../overlay/usr/include/linux/snmp.h | 364 + .../overlay/usr/include/linux/sock_diag.h | 65 + .../overlay/usr/include/linux/socket.h | 38 + .../overlay/usr/include/linux/sockios.h | 174 + .../overlay/usr/include/linux/sonet.h | 61 + .../overlay/usr/include/linux/sonypi.h | 147 + .../overlay/usr/include/linux/sound.h | 32 + .../overlay/usr/include/linux/soundcard.h | 1276 ++ .../overlay/usr/include/linux/spi/spi.h | 44 + .../overlay/usr/include/linux/spi/spidev.h | 123 + .../overlay/usr/include/linux/stat.h | 203 + .../overlay/usr/include/linux/stddef.h | 73 + .../mentalnet/overlay/usr/include/linux/stm.h | 46 + .../overlay/usr/include/linux/string.h | 8 + .../overlay/usr/include/linux/sunrpc/debug.h | 49 + .../include/linux/surface_aggregator/cdev.h | 147 + .../include/linux/surface_aggregator/dtx.h | 146 + .../usr/include/linux/suspend_ioctls.h | 34 + .../overlay/usr/include/linux/swab.h | 305 + .../usr/include/linux/switchtec_ioctl.h | 161 + .../overlay/usr/include/linux/sync_file.h | 113 + .../overlay/usr/include/linux/synclink.h | 301 + .../overlay/usr/include/linux/sysctl.h | 921 ++ .../overlay/usr/include/linux/sysinfo.h | 25 + .../usr/include/linux/target_core_user.h | 188 + .../overlay/usr/include/linux/taskstats.h | 252 + .../overlay/usr/include/linux/tc_act/tc_bpf.h | 30 + .../usr/include/linux/tc_act/tc_connmark.h | 22 + .../usr/include/linux/tc_act/tc_csum.h | 33 + .../overlay/usr/include/linux/tc_act/tc_ct.h | 44 + .../usr/include/linux/tc_act/tc_ctinfo.h | 29 + .../usr/include/linux/tc_act/tc_defact.h | 21 + .../usr/include/linux/tc_act/tc_gact.h | 33 + .../usr/include/linux/tc_act/tc_gate.h | 47 + .../overlay/usr/include/linux/tc_act/tc_ife.h | 32 + .../usr/include/linux/tc_act/tc_mirred.h | 29 + .../usr/include/linux/tc_act/tc_mpls.h | 34 + .../overlay/usr/include/linux/tc_act/tc_nat.h | 27 + .../usr/include/linux/tc_act/tc_pedit.h | 70 + .../usr/include/linux/tc_act/tc_sample.h | 25 + .../usr/include/linux/tc_act/tc_skbedit.h | 41 + .../usr/include/linux/tc_act/tc_skbmod.h | 34 + .../usr/include/linux/tc_act/tc_tunnel_key.h | 95 + .../usr/include/linux/tc_act/tc_vlan.h | 36 + .../usr/include/linux/tc_ematch/tc_em_cmp.h | 26 + .../usr/include/linux/tc_ematch/tc_em_ipt.h | 20 + .../usr/include/linux/tc_ematch/tc_em_meta.h | 93 + .../usr/include/linux/tc_ematch/tc_em_nbyte.h | 14 + .../usr/include/linux/tc_ematch/tc_em_text.h | 20 + .../mentalnet/overlay/usr/include/linux/tcp.h | 488 + .../overlay/usr/include/linux/tcp_metrics.h | 77 + .../overlay/usr/include/linux/tdx-guest.h | 42 + .../mentalnet/overlay/usr/include/linux/tee.h | 404 + .../overlay/usr/include/linux/termios.h | 8 + .../overlay/usr/include/linux/thermal.h | 95 + .../overlay/usr/include/linux/thp7312.h | 19 + .../overlay/usr/include/linux/time.h | 73 + .../overlay/usr/include/linux/time_types.h | 46 + .../overlay/usr/include/linux/timerfd.h | 37 + .../overlay/usr/include/linux/times.h | 14 + .../overlay/usr/include/linux/timex.h | 203 + .../overlay/usr/include/linux/tiocl.h | 40 + .../overlay/usr/include/linux/tipc.h | 315 + .../overlay/usr/include/linux/tipc_config.h | 413 + .../overlay/usr/include/linux/tipc_netlink.h | 341 + .../usr/include/linux/tipc_sockets_diag.h | 17 + .../mentalnet/overlay/usr/include/linux/tls.h | 206 + .../overlay/usr/include/linux/toshiba.h | 64 + .../overlay/usr/include/linux/tps6594_pfsm.h | 37 + .../overlay/usr/include/linux/trace_mmap.h | 48 + .../mentalnet/overlay/usr/include/linux/tty.h | 46 + .../overlay/usr/include/linux/tty_flags.h | 93 + .../overlay/usr/include/linux/types.h | 58 + .../overlay/usr/include/linux/ublk_cmd.h | 406 + .../overlay/usr/include/linux/udf_fs_i.h | 22 + .../overlay/usr/include/linux/udmabuf.h | 33 + .../mentalnet/overlay/usr/include/linux/udp.h | 47 + .../overlay/usr/include/linux/uhid.h | 200 + .../overlay/usr/include/linux/uinput.h | 232 + .../mentalnet/overlay/usr/include/linux/uio.h | 49 + .../overlay/usr/include/linux/uleds.h | 25 + .../overlay/usr/include/linux/ultrasound.h | 104 + .../overlay/usr/include/linux/um_timetravel.h | 290 + .../mentalnet/overlay/usr/include/linux/un.h | 16 + .../overlay/usr/include/linux/unistd.h | 10 + .../overlay/usr/include/linux/unix_diag.h | 61 + .../overlay/usr/include/linux/usb/audio.h | 638 + .../overlay/usr/include/linux/usb/cdc-wdm.h | 24 + .../overlay/usr/include/linux/usb/cdc.h | 461 + .../overlay/usr/include/linux/usb/ch11.h | 305 + .../overlay/usr/include/linux/usb/ch9.h | 1275 ++ .../overlay/usr/include/linux/usb/charger.h | 31 + .../usr/include/linux/usb/functionfs.h | 415 + .../overlay/usr/include/linux/usb/g_hid.h | 40 + .../overlay/usr/include/linux/usb/g_printer.h | 36 + .../overlay/usr/include/linux/usb/g_uvc.h | 42 + .../overlay/usr/include/linux/usb/gadgetfs.h | 89 + .../overlay/usr/include/linux/usb/midi.h | 113 + .../usr/include/linux/usb/raw_gadget.h | 259 + .../overlay/usr/include/linux/usb/tmc.h | 124 + .../overlay/usr/include/linux/usb/video.h | 601 + .../overlay/usr/include/linux/usbdevice_fs.h | 231 + .../overlay/usr/include/linux/usbip.h | 53 + .../overlay/usr/include/linux/user_events.h | 94 + .../overlay/usr/include/linux/userfaultfd.h | 386 + .../overlay/usr/include/linux/userio.h | 45 + .../overlay/usr/include/linux/utime.h | 12 + .../overlay/usr/include/linux/utsname.h | 35 + .../overlay/usr/include/linux/uuid.h | 1 + .../overlay/usr/include/linux/uvcvideo.h | 101 + .../overlay/usr/include/linux/v4l2-common.h | 69 + .../overlay/usr/include/linux/v4l2-controls.h | 3499 ++++ .../usr/include/linux/v4l2-dv-timings.h | 970 ++ .../overlay/usr/include/linux/v4l2-mediabus.h | 152 + .../overlay/usr/include/linux/v4l2-subdev.h | 304 + .../overlay/usr/include/linux/vbox_err.h | 151 + .../usr/include/linux/vbox_vmmdev_types.h | 292 + .../overlay/usr/include/linux/vboxguest.h | 354 + .../overlay/usr/include/linux/vdpa.h | 81 + .../overlay/usr/include/linux/vduse.h | 353 + .../overlay/usr/include/linux/version.h | 5 + .../overlay/usr/include/linux/vesa.h | 18 + .../overlay/usr/include/linux/veth.h | 13 + .../overlay/usr/include/linux/vfio.h | 1826 ++ .../overlay/usr/include/linux/vfio_ccw.h | 56 + .../overlay/usr/include/linux/vfio_zdev.h | 85 + .../overlay/usr/include/linux/vhost.h | 267 + .../overlay/usr/include/linux/vhost_types.h | 196 + .../overlay/usr/include/linux/videodev2.h | 2730 +++ .../overlay/usr/include/linux/virtio_9p.h | 44 + .../usr/include/linux/virtio_balloon.h | 131 + .../overlay/usr/include/linux/virtio_blk.h | 325 + .../overlay/usr/include/linux/virtio_bt.h | 38 + .../overlay/usr/include/linux/virtio_config.h | 121 + .../usr/include/linux/virtio_console.h | 78 + .../overlay/usr/include/linux/virtio_crypto.h | 530 + .../overlay/usr/include/linux/virtio_fs.h | 22 + .../overlay/usr/include/linux/virtio_gpio.h | 72 + .../overlay/usr/include/linux/virtio_gpu.h | 459 + .../overlay/usr/include/linux/virtio_i2c.h | 47 + .../overlay/usr/include/linux/virtio_ids.h | 84 + .../overlay/usr/include/linux/virtio_input.h | 76 + .../overlay/usr/include/linux/virtio_iommu.h | 171 + .../overlay/usr/include/linux/virtio_mem.h | 216 + .../overlay/usr/include/linux/virtio_mmio.h | 152 + .../overlay/usr/include/linux/virtio_net.h | 565 + .../overlay/usr/include/linux/virtio_pci.h | 289 + .../overlay/usr/include/linux/virtio_pcidev.h | 65 + .../overlay/usr/include/linux/virtio_pmem.h | 41 + .../overlay/usr/include/linux/virtio_ring.h | 248 + .../overlay/usr/include/linux/virtio_rng.h | 8 + .../overlay/usr/include/linux/virtio_scmi.h | 24 + .../overlay/usr/include/linux/virtio_scsi.h | 172 + .../overlay/usr/include/linux/virtio_snd.h | 488 + .../overlay/usr/include/linux/virtio_types.h | 46 + .../overlay/usr/include/linux/virtio_vsock.h | 104 + .../overlay/usr/include/linux/vm_sockets.h | 211 + .../usr/include/linux/vm_sockets_diag.h | 34 + .../overlay/usr/include/linux/vmcore.h | 18 + .../overlay/usr/include/linux/vsockmon.h | 61 + .../mentalnet/overlay/usr/include/linux/vt.h | 87 + .../overlay/usr/include/linux/vtpm_proxy.h | 54 + .../overlay/usr/include/linux/wait.h | 23 + .../overlay/usr/include/linux/watch_queue.h | 104 + .../overlay/usr/include/linux/watchdog.h | 58 + .../overlay/usr/include/linux/wireguard.h | 196 + .../overlay/usr/include/linux/wireless.h | 1111 ++ .../mentalnet/overlay/usr/include/linux/wmi.h | 70 + .../overlay/usr/include/linux/wwan.h | 16 + .../mentalnet/overlay/usr/include/linux/x25.h | 153 + .../overlay/usr/include/linux/xattr.h | 85 + .../overlay/usr/include/linux/xdp_diag.h | 83 + .../overlay/usr/include/linux/xfrm.h | 578 + .../usr/include/linux/xilinx-v4l2-controls.h | 74 + .../overlay/usr/include/linux/zorro.h | 114 + .../overlay/usr/include/linux/zorro_ids.h | 556 + board/mentalnet/overlay/usr/include/locale.h | 197 + board/mentalnet/overlay/usr/include/magic.h | 167 + board/mentalnet/overlay/usr/include/malloc.h | 161 + board/mentalnet/overlay/usr/include/math.h | 1444 ++ board/mentalnet/overlay/usr/include/mcheck.h | 60 + board/mentalnet/overlay/usr/include/memory.h | 33 + board/mentalnet/overlay/usr/include/menu.h | 281 + board/mentalnet/overlay/usr/include/mntent.h | 95 + .../mentalnet/overlay/usr/include/monetary.h | 62 + board/mentalnet/overlay/usr/include/mqueue.h | 119 + board/mentalnet/overlay/usr/include/ncurses.h | 1807 ++ .../overlay/usr/include/ncurses_dll.h | 103 + board/mentalnet/overlay/usr/include/netdb.h | 724 + .../mentalnet/overlay/usr/include/nl_types.h | 54 + board/mentalnet/overlay/usr/include/nss.h | 262 + board/mentalnet/overlay/usr/include/obstack.h | 515 + board/mentalnet/overlay/usr/include/panel.h | 100 + board/mentalnet/overlay/usr/include/paths.h | 75 + board/mentalnet/overlay/usr/include/poll.h | 1 + board/mentalnet/overlay/usr/include/printf.h | 192 + .../overlay/usr/include/proc_service.h | 95 + board/mentalnet/overlay/usr/include/pthread.h | 1348 ++ board/mentalnet/overlay/usr/include/pty.h | 48 + board/mentalnet/overlay/usr/include/pwd.h | 193 + board/mentalnet/overlay/usr/include/re_comp.h | 25 + board/mentalnet/overlay/usr/include/regex.h | 703 + board/mentalnet/overlay/usr/include/regexp.h | 32 + board/mentalnet/overlay/usr/include/resolv.h | 310 + board/mentalnet/overlay/usr/include/sched.h | 140 + board/mentalnet/overlay/usr/include/search.h | 181 + .../mentalnet/overlay/usr/include/semaphore.h | 112 + board/mentalnet/overlay/usr/include/setjmp.h | 92 + board/mentalnet/overlay/usr/include/sgtty.h | 40 + board/mentalnet/overlay/usr/include/shadow.h | 156 + board/mentalnet/overlay/usr/include/signal.h | 395 + board/mentalnet/overlay/usr/include/spawn.h | 238 + board/mentalnet/overlay/usr/include/sqlite3.h | 13775 ++++++++++++++++ .../overlay/usr/include/sqlite3ext.h | 723 + board/mentalnet/overlay/usr/include/stab.h | 17 + board/mentalnet/overlay/usr/include/stdbit.h | 848 + .../overlay/usr/include/stdc-predef.h | 64 + board/mentalnet/overlay/usr/include/stdint.h | 308 + board/mentalnet/overlay/usr/include/stdio.h | 975 ++ .../mentalnet/overlay/usr/include/stdio_ext.h | 86 + board/mentalnet/overlay/usr/include/stdlib.h | 1169 ++ board/mentalnet/overlay/usr/include/string.h | 554 + board/mentalnet/overlay/usr/include/strings.h | 148 + .../mentalnet/overlay/usr/include/sys/acct.h | 108 + .../mentalnet/overlay/usr/include/sys/auxv.h | 36 + .../overlay/usr/include/sys/bitypes.h | 3 + .../overlay/usr/include/sys/capability.h | 255 + .../mentalnet/overlay/usr/include/sys/cdefs.h | 886 + .../overlay/usr/include/sys/debugreg.h | 88 + board/mentalnet/overlay/usr/include/sys/dir.h | 27 + board/mentalnet/overlay/usr/include/sys/elf.h | 29 + .../mentalnet/overlay/usr/include/sys/epoll.h | 177 + .../mentalnet/overlay/usr/include/sys/errno.h | 1 + .../overlay/usr/include/sys/eventfd.h | 44 + .../overlay/usr/include/sys/fanotify.h | 38 + .../mentalnet/overlay/usr/include/sys/fcntl.h | 1 + .../mentalnet/overlay/usr/include/sys/file.h | 55 + .../mentalnet/overlay/usr/include/sys/fsuid.h | 35 + .../mentalnet/overlay/usr/include/sys/gmon.h | 203 + .../overlay/usr/include/sys/gmon_out.h | 78 + .../overlay/usr/include/sys/inotify.h | 100 + board/mentalnet/overlay/usr/include/sys/io.h | 183 + .../mentalnet/overlay/usr/include/sys/ioctl.h | 55 + board/mentalnet/overlay/usr/include/sys/ipc.h | 54 + board/mentalnet/overlay/usr/include/sys/kd.h | 34 + .../mentalnet/overlay/usr/include/sys/klog.h | 33 + .../mentalnet/overlay/usr/include/sys/mman.h | 156 + .../mentalnet/overlay/usr/include/sys/mount.h | 331 + board/mentalnet/overlay/usr/include/sys/msg.h | 92 + .../mentalnet/overlay/usr/include/sys/mtio.h | 275 + .../mentalnet/overlay/usr/include/sys/param.h | 106 + board/mentalnet/overlay/usr/include/sys/pci.h | 24 + .../mentalnet/overlay/usr/include/sys/perm.h | 35 + .../overlay/usr/include/sys/personality.h | 80 + .../mentalnet/overlay/usr/include/sys/pidfd.h | 66 + .../overlay/usr/include/sys/platform/x86.h | 69 + .../mentalnet/overlay/usr/include/sys/poll.h | 90 + .../mentalnet/overlay/usr/include/sys/prctl.h | 55 + .../overlay/usr/include/sys/procfs.h | 126 + .../overlay/usr/include/sys/profil.h | 60 + .../overlay/usr/include/sys/psx_syscall.h | 121 + .../overlay/usr/include/sys/ptrace.h | 216 + .../mentalnet/overlay/usr/include/sys/queue.h | 574 + .../mentalnet/overlay/usr/include/sys/quota.h | 135 + .../overlay/usr/include/sys/random.h | 45 + board/mentalnet/overlay/usr/include/sys/raw.h | 38 + .../overlay/usr/include/sys/reboot.h | 54 + board/mentalnet/overlay/usr/include/sys/reg.h | 77 + .../overlay/usr/include/sys/resource.h | 114 + .../mentalnet/overlay/usr/include/sys/rseq.h | 180 + .../overlay/usr/include/sys/select.h | 155 + board/mentalnet/overlay/usr/include/sys/sem.h | 88 + .../overlay/usr/include/sys/sendfile.h | 51 + board/mentalnet/overlay/usr/include/sys/shm.h | 73 + .../overlay/usr/include/sys/signal.h | 1 + .../overlay/usr/include/sys/signalfd.h | 62 + .../overlay/usr/include/sys/single_threaded.h | 33 + .../overlay/usr/include/sys/socket.h | 348 + .../overlay/usr/include/sys/socketvar.h | 3 + .../overlay/usr/include/sys/soundcard.h | 1 + .../mentalnet/overlay/usr/include/sys/stat.h | 471 + .../overlay/usr/include/sys/statfs.h | 67 + .../overlay/usr/include/sys/statvfs.h | 90 + .../mentalnet/overlay/usr/include/sys/swap.h | 43 + .../overlay/usr/include/sys/syscall.h | 31 + .../overlay/usr/include/sys/sysinfo.h | 47 + .../overlay/usr/include/sys/syslog.h | 217 + .../overlay/usr/include/sys/sysmacros.h | 64 + .../overlay/usr/include/sys/termios.h | 4 + .../mentalnet/overlay/usr/include/sys/time.h | 260 + .../mentalnet/overlay/usr/include/sys/timeb.h | 35 + .../overlay/usr/include/sys/timerfd.h | 77 + .../mentalnet/overlay/usr/include/sys/times.h | 50 + .../mentalnet/overlay/usr/include/sys/timex.h | 88 + .../overlay/usr/include/sys/ttychars.h | 61 + .../overlay/usr/include/sys/ttydefaults.h | 100 + .../mentalnet/overlay/usr/include/sys/types.h | 232 + .../overlay/usr/include/sys/ucontext.h | 262 + board/mentalnet/overlay/usr/include/sys/uio.h | 182 + board/mentalnet/overlay/usr/include/sys/un.h | 47 + .../overlay/usr/include/sys/unistd.h | 1 + .../mentalnet/overlay/usr/include/sys/user.h | 180 + .../overlay/usr/include/sys/utsname.h | 86 + board/mentalnet/overlay/usr/include/sys/vfs.h | 4 + .../overlay/usr/include/sys/vlimit.h | 67 + .../mentalnet/overlay/usr/include/sys/vm86.h | 38 + board/mentalnet/overlay/usr/include/sys/vt.h | 1 + .../mentalnet/overlay/usr/include/sys/wait.h | 175 + .../mentalnet/overlay/usr/include/sys/xattr.h | 109 + board/mentalnet/overlay/usr/include/syscall.h | 1 + .../mentalnet/overlay/usr/include/sysexits.h | 114 + board/mentalnet/overlay/usr/include/syslog.h | 1 + board/mentalnet/overlay/usr/include/tar.h | 111 + board/mentalnet/overlay/usr/include/term.h | 871 + board/mentalnet/overlay/usr/include/termcap.h | 73 + board/mentalnet/overlay/usr/include/termio.h | 6 + board/mentalnet/overlay/usr/include/termios.h | 109 + board/mentalnet/overlay/usr/include/tgmath.h | 1203 ++ .../mentalnet/overlay/usr/include/thread_db.h | 458 + board/mentalnet/overlay/usr/include/threads.h | 239 + board/mentalnet/overlay/usr/include/time.h | 454 + board/mentalnet/overlay/usr/include/ttyent.h | 65 + board/mentalnet/overlay/usr/include/types.h | 232 + board/mentalnet/overlay/usr/include/uchar.h | 96 + .../mentalnet/overlay/usr/include/ucontext.h | 56 + board/mentalnet/overlay/usr/include/ulimit.h | 47 + board/mentalnet/overlay/usr/include/unctrl.h | 68 + board/mentalnet/overlay/usr/include/unistd.h | 1225 ++ board/mentalnet/overlay/usr/include/utime.h | 66 + board/mentalnet/overlay/usr/include/utmp.h | 96 + board/mentalnet/overlay/usr/include/utmpx.h | 125 + board/mentalnet/overlay/usr/include/values.h | 68 + board/mentalnet/overlay/usr/include/wait.h | 1 + board/mentalnet/overlay/usr/include/wchar.h | 1075 ++ board/mentalnet/overlay/usr/include/wctype.h | 148 + board/mentalnet/overlay/usr/include/wordexp.h | 70 + .../overlay/usr/include/xtables-version.h | 2 + board/mentalnet/overlay/usr/include/xtables.h | 708 + board/mentalnet/overlay/usr/include/xxh3.h | 55 + board/mentalnet/overlay/usr/include/xxhash.h | 7238 ++++++++ board/mentalnet/overlay/usr/include/zconf.h | 551 + board/mentalnet/overlay/usr/include/zdict.h | 481 + board/mentalnet/overlay/usr/include/zlib.h | 2057 +++ board/mentalnet/overlay/usr/include/zstd.h | 3198 ++++ .../overlay/usr/include/zstd_errors.h | 107 + board/mentalnet/overlay/usr/lib/libc.so | 5 + .../overlay/usr/lib/libc_nonshared.a | Bin 0 -> 5822 bytes board/mentalnet/overlay/usr/lib/libpthread.a | 1 + .../overlay/usr/lib/tcc/include/float.h | 75 + .../overlay/usr/lib/tcc/include/stdalign.h | 16 + .../overlay/usr/lib/tcc/include/stdarg.h | 14 + .../overlay/usr/lib/tcc/include/stdatomic.h | 171 + .../overlay/usr/lib/tcc/include/stdbool.h | 11 + .../overlay/usr/lib/tcc/include/stddef.h | 39 + .../overlay/usr/lib/tcc/include/stdnoreturn.h | 7 + .../overlay/usr/lib/tcc/include/tccdefs.h | 338 + .../overlay/usr/lib/tcc/include/tgmath.h | 89 + .../overlay/usr/lib/tcc/include/varargs.h | 12 + board/mentalnet/overlay/usr/lib/tcc/libtcc1.a | Bin 0 -> 39848 bytes board/mentalnet/overlay/usr/sbin/serv | 75 + .../mentalnet/overlay/var/www/html/index.html | 4 + board/mentalnet/overlay/var/www/html/tux.jpg | Bin 0 -> 14275 bytes board/mentalnet/post-build.sh | 4 +- 1376 files changed, 262659 insertions(+), 28 deletions(-) create mode 100644 board/mentalnet/overlay/etc/lighttpd/conf.d/proxy.conf create mode 100644 board/mentalnet/overlay/etc/lighttpd/modules.conf create mode 100755 board/mentalnet/overlay/usr/bin/fastfetch create mode 100755 board/mentalnet/overlay/usr/bin/tcc create mode 100644 board/mentalnet/overlay/usr/include/a.out.h create mode 100644 board/mentalnet/overlay/usr/include/aio.h create mode 100644 board/mentalnet/overlay/usr/include/aliases.h create mode 100644 board/mentalnet/overlay/usr/include/alloca.h create mode 100644 board/mentalnet/overlay/usr/include/ar.h create mode 100644 board/mentalnet/overlay/usr/include/argp.h create mode 100644 board/mentalnet/overlay/usr/include/argz.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/auxvec.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/bitsperlong.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/bpf_perf_event.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/errno-base.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/errno.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/fcntl.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/hugetlb_encode.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/int-l64.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/int-ll64.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/ioctls.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/ipcbuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/kvm_para.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/mman-common.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/mman.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/msgbuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/param.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/poll.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/posix_types.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/resource.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/sembuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/setup.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/shmbuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/siginfo.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/signal-defs.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/signal.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/socket.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/sockios.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/stat.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/statfs.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/swab.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/termbits-common.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/termbits.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/termios.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/types.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/ucontext.h create mode 100644 board/mentalnet/overlay/usr/include/asm-generic/unistd.h create mode 100644 board/mentalnet/overlay/usr/include/asm/a.out.h create mode 100644 board/mentalnet/overlay/usr/include/asm/amd_hsmp.h create mode 100644 board/mentalnet/overlay/usr/include/asm/auxvec.h create mode 100644 board/mentalnet/overlay/usr/include/asm/bitsperlong.h create mode 100644 board/mentalnet/overlay/usr/include/asm/boot.h create mode 100644 board/mentalnet/overlay/usr/include/asm/bootparam.h create mode 100644 board/mentalnet/overlay/usr/include/asm/bpf_perf_event.h create mode 100644 board/mentalnet/overlay/usr/include/asm/byteorder.h create mode 100644 board/mentalnet/overlay/usr/include/asm/debugreg.h create mode 100644 board/mentalnet/overlay/usr/include/asm/e820.h create mode 100644 board/mentalnet/overlay/usr/include/asm/elf.h create mode 100644 board/mentalnet/overlay/usr/include/asm/errno.h create mode 100644 board/mentalnet/overlay/usr/include/asm/fcntl.h create mode 100644 board/mentalnet/overlay/usr/include/asm/hw_breakpoint.h create mode 100644 board/mentalnet/overlay/usr/include/asm/hwcap2.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ioctls.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ipcbuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ist.h create mode 100644 board/mentalnet/overlay/usr/include/asm/kvm.h create mode 100644 board/mentalnet/overlay/usr/include/asm/kvm_para.h create mode 100644 board/mentalnet/overlay/usr/include/asm/kvm_perf.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ldt.h create mode 100644 board/mentalnet/overlay/usr/include/asm/mce.h create mode 100644 board/mentalnet/overlay/usr/include/asm/mman.h create mode 100644 board/mentalnet/overlay/usr/include/asm/msgbuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm/msr.h create mode 100644 board/mentalnet/overlay/usr/include/asm/mtrr.h create mode 100644 board/mentalnet/overlay/usr/include/asm/param.h create mode 100644 board/mentalnet/overlay/usr/include/asm/perf_regs.h create mode 100644 board/mentalnet/overlay/usr/include/asm/poll.h create mode 100644 board/mentalnet/overlay/usr/include/asm/posix_types.h create mode 100644 board/mentalnet/overlay/usr/include/asm/posix_types_32.h create mode 100644 board/mentalnet/overlay/usr/include/asm/posix_types_64.h create mode 100644 board/mentalnet/overlay/usr/include/asm/posix_types_x32.h create mode 100644 board/mentalnet/overlay/usr/include/asm/prctl.h create mode 100644 board/mentalnet/overlay/usr/include/asm/processor-flags.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ptrace-abi.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ptrace.h create mode 100644 board/mentalnet/overlay/usr/include/asm/resource.h create mode 100644 board/mentalnet/overlay/usr/include/asm/sembuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm/setup.h create mode 100644 board/mentalnet/overlay/usr/include/asm/setup_data.h create mode 100644 board/mentalnet/overlay/usr/include/asm/sgx.h create mode 100644 board/mentalnet/overlay/usr/include/asm/shmbuf.h create mode 100644 board/mentalnet/overlay/usr/include/asm/sigcontext.h create mode 100644 board/mentalnet/overlay/usr/include/asm/sigcontext32.h create mode 100644 board/mentalnet/overlay/usr/include/asm/siginfo.h create mode 100644 board/mentalnet/overlay/usr/include/asm/signal.h create mode 100644 board/mentalnet/overlay/usr/include/asm/socket.h create mode 100644 board/mentalnet/overlay/usr/include/asm/sockios.h create mode 100644 board/mentalnet/overlay/usr/include/asm/stat.h create mode 100644 board/mentalnet/overlay/usr/include/asm/statfs.h create mode 100644 board/mentalnet/overlay/usr/include/asm/svm.h create mode 100644 board/mentalnet/overlay/usr/include/asm/swab.h create mode 100644 board/mentalnet/overlay/usr/include/asm/termbits.h create mode 100644 board/mentalnet/overlay/usr/include/asm/termios.h create mode 100644 board/mentalnet/overlay/usr/include/asm/types.h create mode 100644 board/mentalnet/overlay/usr/include/asm/ucontext.h create mode 100644 board/mentalnet/overlay/usr/include/asm/unistd.h create mode 100644 board/mentalnet/overlay/usr/include/asm/unistd_32.h create mode 100644 board/mentalnet/overlay/usr/include/asm/unistd_64.h create mode 100644 board/mentalnet/overlay/usr/include/asm/unistd_x32.h create mode 100644 board/mentalnet/overlay/usr/include/asm/vm86.h create mode 100644 board/mentalnet/overlay/usr/include/asm/vmx.h create mode 100644 board/mentalnet/overlay/usr/include/asm/vsyscall.h create mode 100644 board/mentalnet/overlay/usr/include/assert.h create mode 100644 board/mentalnet/overlay/usr/include/bits/a.out.h create mode 100644 board/mentalnet/overlay/usr/include/bits/argp-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/atomic_wide_counter.h create mode 100644 board/mentalnet/overlay/usr/include/bits/byteswap.h create mode 100644 board/mentalnet/overlay/usr/include/bits/cloexec.h create mode 100644 board/mentalnet/overlay/usr/include/bits/cmathcalls.h create mode 100644 board/mentalnet/overlay/usr/include/bits/confname.h create mode 100644 board/mentalnet/overlay/usr/include/bits/cpu-set.h create mode 100644 board/mentalnet/overlay/usr/include/bits/dirent.h create mode 100644 board/mentalnet/overlay/usr/include/bits/dirent_ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/dl_find_object.h create mode 100644 board/mentalnet/overlay/usr/include/bits/dlfcn.h create mode 100644 board/mentalnet/overlay/usr/include/bits/elfclass.h create mode 100644 board/mentalnet/overlay/usr/include/bits/endian.h create mode 100644 board/mentalnet/overlay/usr/include/bits/endianness.h create mode 100644 board/mentalnet/overlay/usr/include/bits/environments.h create mode 100644 board/mentalnet/overlay/usr/include/bits/epoll.h create mode 100644 board/mentalnet/overlay/usr/include/bits/err-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/errno.h create mode 100644 board/mentalnet/overlay/usr/include/bits/error-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/error.h create mode 100644 board/mentalnet/overlay/usr/include/bits/eventfd.h create mode 100644 board/mentalnet/overlay/usr/include/bits/fcntl-linux.h create mode 100644 board/mentalnet/overlay/usr/include/bits/fcntl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/fcntl2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/fenv.h create mode 100644 board/mentalnet/overlay/usr/include/bits/floatn-common.h create mode 100644 board/mentalnet/overlay/usr/include/bits/floatn.h create mode 100644 board/mentalnet/overlay/usr/include/bits/flt-eval-method.h create mode 100644 board/mentalnet/overlay/usr/include/bits/fp-fast.h create mode 100644 board/mentalnet/overlay/usr/include/bits/fp-logb.h create mode 100644 board/mentalnet/overlay/usr/include/bits/getopt_core.h create mode 100644 board/mentalnet/overlay/usr/include/bits/getopt_ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/getopt_posix.h create mode 100644 board/mentalnet/overlay/usr/include/bits/hwcap.h create mode 100644 board/mentalnet/overlay/usr/include/bits/in.h create mode 100644 board/mentalnet/overlay/usr/include/bits/indirect-return.h create mode 100644 board/mentalnet/overlay/usr/include/bits/initspin.h create mode 100644 board/mentalnet/overlay/usr/include/bits/inotify.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ioctl-types.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ioctls.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ipc-perm.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ipc.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ipctypes.h create mode 100644 board/mentalnet/overlay/usr/include/bits/iscanonical.h create mode 100644 board/mentalnet/overlay/usr/include/bits/libc-header-start.h create mode 100644 board/mentalnet/overlay/usr/include/bits/libm-simd-decl-stubs.h create mode 100644 board/mentalnet/overlay/usr/include/bits/link.h create mode 100644 board/mentalnet/overlay/usr/include/bits/link_lavcurrent.h create mode 100644 board/mentalnet/overlay/usr/include/bits/local_lim.h create mode 100644 board/mentalnet/overlay/usr/include/bits/locale.h create mode 100644 board/mentalnet/overlay/usr/include/bits/long-double.h create mode 100644 board/mentalnet/overlay/usr/include/bits/math-vector.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mathcalls-helper-functions.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mathcalls-macros.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mathcalls-narrow.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mathcalls.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mathdef.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mman-linux.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mman-map-flags-generic.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mman-shared.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mman.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mman_ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/monetary-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mqueue.h create mode 100644 board/mentalnet/overlay/usr/include/bits/mqueue2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/msq.h create mode 100644 board/mentalnet/overlay/usr/include/bits/netdb.h create mode 100644 board/mentalnet/overlay/usr/include/bits/param.h create mode 100644 board/mentalnet/overlay/usr/include/bits/platform/features.h create mode 100644 board/mentalnet/overlay/usr/include/bits/platform/x86.h create mode 100644 board/mentalnet/overlay/usr/include/bits/poll.h create mode 100644 board/mentalnet/overlay/usr/include/bits/poll2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/posix1_lim.h create mode 100644 board/mentalnet/overlay/usr/include/bits/posix2_lim.h create mode 100644 board/mentalnet/overlay/usr/include/bits/posix_opt.h create mode 100644 board/mentalnet/overlay/usr/include/bits/printf-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/procfs-extra.h create mode 100644 board/mentalnet/overlay/usr/include/bits/procfs-id.h create mode 100644 board/mentalnet/overlay/usr/include/bits/procfs-prregset.h create mode 100644 board/mentalnet/overlay/usr/include/bits/procfs.h create mode 100644 board/mentalnet/overlay/usr/include/bits/pthread_stack_min-dynamic.h create mode 100644 board/mentalnet/overlay/usr/include/bits/pthread_stack_min.h create mode 100644 board/mentalnet/overlay/usr/include/bits/pthreadtypes-arch.h create mode 100644 board/mentalnet/overlay/usr/include/bits/pthreadtypes.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ptrace-shared.h create mode 100644 board/mentalnet/overlay/usr/include/bits/resource.h create mode 100644 board/mentalnet/overlay/usr/include/bits/rseq.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sched.h create mode 100644 board/mentalnet/overlay/usr/include/bits/select-decl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/select.h create mode 100644 board/mentalnet/overlay/usr/include/bits/select2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sem.h create mode 100644 board/mentalnet/overlay/usr/include/bits/semaphore.h create mode 100644 board/mentalnet/overlay/usr/include/bits/setjmp.h create mode 100644 board/mentalnet/overlay/usr/include/bits/setjmp2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/shm.h create mode 100644 board/mentalnet/overlay/usr/include/bits/shmlba.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sigaction.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sigcontext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sigevent-consts.h create mode 100644 board/mentalnet/overlay/usr/include/bits/siginfo-arch.h create mode 100644 board/mentalnet/overlay/usr/include/bits/siginfo-consts-arch.h create mode 100644 board/mentalnet/overlay/usr/include/bits/siginfo-consts.h create mode 100644 board/mentalnet/overlay/usr/include/bits/signal_ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/signalfd.h create mode 100644 board/mentalnet/overlay/usr/include/bits/signum-arch.h create mode 100644 board/mentalnet/overlay/usr/include/bits/signum-generic.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sigstack.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sigstksz.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sigthread.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sockaddr.h create mode 100644 board/mentalnet/overlay/usr/include/bits/socket-constants.h create mode 100644 board/mentalnet/overlay/usr/include/bits/socket.h create mode 100644 board/mentalnet/overlay/usr/include/bits/socket2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/socket_type.h create mode 100644 board/mentalnet/overlay/usr/include/bits/spawn_ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/ss_flags.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stab.def create mode 100644 board/mentalnet/overlay/usr/include/bits/stat.h create mode 100644 board/mentalnet/overlay/usr/include/bits/statfs.h create mode 100644 board/mentalnet/overlay/usr/include/bits/statvfs.h create mode 100644 board/mentalnet/overlay/usr/include/bits/statx-generic.h create mode 100644 board/mentalnet/overlay/usr/include/bits/statx.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdint-intn.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdint-least.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdint-uintn.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdio-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdio.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdio2-decl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdio2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdio_lim.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdlib-bsearch.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdlib-float.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdlib-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/stdlib.h create mode 100644 board/mentalnet/overlay/usr/include/bits/string_fortified.h create mode 100644 board/mentalnet/overlay/usr/include/bits/strings_fortified.h create mode 100644 board/mentalnet/overlay/usr/include/bits/struct_mutex.h create mode 100644 board/mentalnet/overlay/usr/include/bits/struct_rwlock.h create mode 100644 board/mentalnet/overlay/usr/include/bits/struct_stat.h create mode 100644 board/mentalnet/overlay/usr/include/bits/struct_stat_time64_helper.h create mode 100644 board/mentalnet/overlay/usr/include/bits/syscall.h create mode 100644 board/mentalnet/overlay/usr/include/bits/syslog-decl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/syslog-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/syslog-path.h create mode 100644 board/mentalnet/overlay/usr/include/bits/syslog.h create mode 100644 board/mentalnet/overlay/usr/include/bits/sysmacros.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-baud.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-c_cc.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-c_cflag.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-c_iflag.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-c_lflag.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-c_oflag.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-misc.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-struct.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios-tcflow.h create mode 100644 board/mentalnet/overlay/usr/include/bits/termios.h create mode 100644 board/mentalnet/overlay/usr/include/bits/thread-shared-types.h create mode 100644 board/mentalnet/overlay/usr/include/bits/time.h create mode 100644 board/mentalnet/overlay/usr/include/bits/time64.h create mode 100644 board/mentalnet/overlay/usr/include/bits/timerfd.h create mode 100644 board/mentalnet/overlay/usr/include/bits/timesize.h create mode 100644 board/mentalnet/overlay/usr/include/bits/timex.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/FILE.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__FILE.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__fpos64_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__fpos_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__locale_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__mbstate_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__sigset_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/__sigval_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/clock_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/clockid_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/cookie_io_functions_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/error_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/idtype_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/locale_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/mbstate_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/res_state.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/sig_atomic_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/sigevent_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/siginfo_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/sigset_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/sigval_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/stack_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_FILE.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct___jmp_buf_tag.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_iovec.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_itimerspec.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_msqid64_ds.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_msqid64_ds_helper.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_msqid_ds.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_osockaddr.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_rusage.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_sched_param.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_semid64_ds.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_semid64_ds_helper.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_semid_ds.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_shmid64_ds.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_shmid64_ds_helper.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_shmid_ds.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_sigstack.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_statx.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_statx_timestamp.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_timeb.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_timespec.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_timeval.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/struct_tm.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/time_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/timer_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/types/wint_t.h create mode 100644 board/mentalnet/overlay/usr/include/bits/typesizes.h create mode 100644 board/mentalnet/overlay/usr/include/bits/uintn-identity.h create mode 100644 board/mentalnet/overlay/usr/include/bits/uio-ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/uio_lim.h create mode 100644 board/mentalnet/overlay/usr/include/bits/unistd-decl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/unistd.h create mode 100644 board/mentalnet/overlay/usr/include/bits/unistd_ext.h create mode 100644 board/mentalnet/overlay/usr/include/bits/utmp.h create mode 100644 board/mentalnet/overlay/usr/include/bits/utmpx.h create mode 100644 board/mentalnet/overlay/usr/include/bits/utsname.h create mode 100644 board/mentalnet/overlay/usr/include/bits/waitflags.h create mode 100644 board/mentalnet/overlay/usr/include/bits/waitstatus.h create mode 100644 board/mentalnet/overlay/usr/include/bits/wchar-ldbl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/wchar.h create mode 100644 board/mentalnet/overlay/usr/include/bits/wchar2-decl.h create mode 100644 board/mentalnet/overlay/usr/include/bits/wchar2.h create mode 100644 board/mentalnet/overlay/usr/include/bits/wctype-wchar.h create mode 100644 board/mentalnet/overlay/usr/include/bits/wordsize.h create mode 100644 board/mentalnet/overlay/usr/include/bits/xopen_lim.h create mode 100644 board/mentalnet/overlay/usr/include/byteswap.h create mode 100644 board/mentalnet/overlay/usr/include/com_err.h create mode 100644 board/mentalnet/overlay/usr/include/complex.h create mode 100644 board/mentalnet/overlay/usr/include/cpio.h create mode 100644 board/mentalnet/overlay/usr/include/crypt.h create mode 100644 board/mentalnet/overlay/usr/include/ctype.h create mode 100644 board/mentalnet/overlay/usr/include/curses.h create mode 100644 board/mentalnet/overlay/usr/include/dirent.h create mode 100644 board/mentalnet/overlay/usr/include/dlfcn.h create mode 100644 board/mentalnet/overlay/usr/include/elf.h create mode 100644 board/mentalnet/overlay/usr/include/endian.h create mode 100644 board/mentalnet/overlay/usr/include/envz.h create mode 100644 board/mentalnet/overlay/usr/include/err.h create mode 100644 board/mentalnet/overlay/usr/include/errno.h create mode 100644 board/mentalnet/overlay/usr/include/error.h create mode 100644 board/mentalnet/overlay/usr/include/eti.h create mode 100644 board/mentalnet/overlay/usr/include/execinfo.h create mode 100644 board/mentalnet/overlay/usr/include/fcntl.h create mode 100644 board/mentalnet/overlay/usr/include/features-time64.h create mode 100644 board/mentalnet/overlay/usr/include/features.h create mode 100644 board/mentalnet/overlay/usr/include/fenv.h create mode 100644 board/mentalnet/overlay/usr/include/ffi.h create mode 100644 board/mentalnet/overlay/usr/include/ffitarget.h create mode 100644 board/mentalnet/overlay/usr/include/fmtmsg.h create mode 100644 board/mentalnet/overlay/usr/include/fnmatch.h create mode 100644 board/mentalnet/overlay/usr/include/form.h create mode 100644 board/mentalnet/overlay/usr/include/fpu_control.h create mode 100644 board/mentalnet/overlay/usr/include/fstab.h create mode 100644 board/mentalnet/overlay/usr/include/fts.h create mode 100644 board/mentalnet/overlay/usr/include/ftw.h create mode 100644 board/mentalnet/overlay/usr/include/gconv.h create mode 100644 board/mentalnet/overlay/usr/include/getopt.h create mode 100644 board/mentalnet/overlay/usr/include/glob.h create mode 100644 board/mentalnet/overlay/usr/include/gnu-versions.h create mode 100644 board/mentalnet/overlay/usr/include/gnu/lib-names-32.h create mode 100644 board/mentalnet/overlay/usr/include/gnu/lib-names.h create mode 100644 board/mentalnet/overlay/usr/include/gnu/libc-version.h create mode 100644 board/mentalnet/overlay/usr/include/gnu/stubs-32.h create mode 100644 board/mentalnet/overlay/usr/include/gnu/stubs.h create mode 100644 board/mentalnet/overlay/usr/include/grp.h create mode 100644 board/mentalnet/overlay/usr/include/gshadow.h create mode 100644 board/mentalnet/overlay/usr/include/iconv.h create mode 100644 board/mentalnet/overlay/usr/include/ieee754.h create mode 100644 board/mentalnet/overlay/usr/include/ifaddrs.h create mode 100644 board/mentalnet/overlay/usr/include/inttypes.h create mode 100644 board/mentalnet/overlay/usr/include/jq.h create mode 100644 board/mentalnet/overlay/usr/include/jv.h create mode 100644 board/mentalnet/overlay/usr/include/langinfo.h create mode 100644 board/mentalnet/overlay/usr/include/lastlog.h create mode 100644 board/mentalnet/overlay/usr/include/libgen.h create mode 100644 board/mentalnet/overlay/usr/include/libintl.h create mode 100644 board/mentalnet/overlay/usr/include/limits.h create mode 100644 board/mentalnet/overlay/usr/include/link.h create mode 100644 board/mentalnet/overlay/usr/include/linux/a.out.h create mode 100644 board/mentalnet/overlay/usr/include/linux/acct.h create mode 100644 board/mentalnet/overlay/usr/include/linux/acrn.h create mode 100644 board/mentalnet/overlay/usr/include/linux/adb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/adfs_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/affs_hardblocks.h create mode 100644 board/mentalnet/overlay/usr/include/linux/agpgart.h create mode 100644 board/mentalnet/overlay/usr/include/linux/aio_abi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/am437x-vpfe.h create mode 100644 board/mentalnet/overlay/usr/include/linux/amt.h create mode 100644 board/mentalnet/overlay/usr/include/linux/android/binder.h create mode 100644 board/mentalnet/overlay/usr/include/linux/android/binderfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/apm_bios.h create mode 100644 board/mentalnet/overlay/usr/include/linux/arcfb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/arm_sdei.h create mode 100644 board/mentalnet/overlay/usr/include/linux/aspeed-lpc-ctrl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/aspeed-p2a-ctrl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/aspeed-video.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atalk.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm_eni.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm_he.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm_idt77105.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm_nicstar.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm_tcp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atm_zatm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmapi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmarp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmbr2684.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmclip.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmioc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmlec.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmmpc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmppp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmsap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/atmsvc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/audit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/auto_dev-ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/auto_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/auto_fs4.h create mode 100644 board/mentalnet/overlay/usr/include/linux/auxvec.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ax25.h create mode 100644 board/mentalnet/overlay/usr/include/linux/batadv_packet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/batman_adv.h create mode 100644 board/mentalnet/overlay/usr/include/linux/baycom.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bcm933xx_hcs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bfs_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/binfmts.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bits.h create mode 100644 board/mentalnet/overlay/usr/include/linux/blkdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/blkpg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/blktrace_api.h create mode 100644 board/mentalnet/overlay/usr/include/linux/blkzoned.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bpf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bpf_common.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bpf_perf_event.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bpqether.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bsg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/bt-bmc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/btf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/btrfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/btrfs_tree.h create mode 100644 board/mentalnet/overlay/usr/include/linux/byteorder/big_endian.h create mode 100644 board/mentalnet/overlay/usr/include/linux/byteorder/little_endian.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cachefiles.h create mode 100644 board/mentalnet/overlay/usr/include/linux/caif/caif_socket.h create mode 100644 board/mentalnet/overlay/usr/include/linux/caif/if_caif.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/bcm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/error.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/gw.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/isotp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/j1939.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/raw.h create mode 100644 board/mentalnet/overlay/usr/include/linux/can/vxcan.h create mode 100644 board/mentalnet/overlay/usr/include/linux/capability.h create mode 100644 board/mentalnet/overlay/usr/include/linux/capi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cciss_defs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cciss_ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ccs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cdrom.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cec-funcs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cec.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cfm_bridge.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cgroupstats.h create mode 100644 board/mentalnet/overlay/usr/include/linux/chio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cifs/cifs_mount.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cifs/cifs_netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/close_range.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cn_proc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/coda.h create mode 100644 board/mentalnet/overlay/usr/include/linux/coff.h create mode 100644 board/mentalnet/overlay/usr/include/linux/comedi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/connector.h create mode 100644 board/mentalnet/overlay/usr/include/linux/const.h create mode 100644 board/mentalnet/overlay/usr/include/linux/coresight-stm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/counter.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cramfs_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cryptouser.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cuda.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cxl_mem.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cyclades.h create mode 100644 board/mentalnet/overlay/usr/include/linux/cycx_cfm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dcbnl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dccp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/devlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dlm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dlm_device.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dlm_plock.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dlmconstants.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dm-ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dm-log-userspace.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dma-buf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dma-heap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dns_resolver.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dpll.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dqblk_xfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/audio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/ca.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/dmx.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/frontend.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/net.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/osd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/version.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dvb/video.h create mode 100644 board/mentalnet/overlay/usr/include/linux/dw100.h create mode 100644 board/mentalnet/overlay/usr/include/linux/edd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/efs_fs_sb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/elf-em.h create mode 100644 board/mentalnet/overlay/usr/include/linux/elf-fdpic.h create mode 100644 board/mentalnet/overlay/usr/include/linux/elf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/errno.h create mode 100644 board/mentalnet/overlay/usr/include/linux/errqueue.h create mode 100644 board/mentalnet/overlay/usr/include/linux/erspan.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ethtool.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ethtool_netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/eventfd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/eventpoll.h create mode 100644 board/mentalnet/overlay/usr/include/linux/exfat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ext4.h create mode 100644 board/mentalnet/overlay/usr/include/linux/f2fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fadvise.h create mode 100644 board/mentalnet/overlay/usr/include/linux/falloc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fanotify.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fcntl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fdreg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fib_rules.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fiemap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/filter.h create mode 100644 board/mentalnet/overlay/usr/include/linux/firewire-cdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/firewire-constants.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fou.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fpga-dfl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fscrypt.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fsi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fsl_hypervisor.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fsl_mc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fsmap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fsverity.h create mode 100644 board/mentalnet/overlay/usr/include/linux/fuse.h create mode 100644 board/mentalnet/overlay/usr/include/linux/futex.h create mode 100644 board/mentalnet/overlay/usr/include/linux/gameport.h create mode 100644 board/mentalnet/overlay/usr/include/linux/gen_stats.h create mode 100644 board/mentalnet/overlay/usr/include/linux/genetlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/genwqe/genwqe_card.h create mode 100644 board/mentalnet/overlay/usr/include/linux/gfs2_ondisk.h create mode 100644 board/mentalnet/overlay/usr/include/linux/gpio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/gsmmux.h create mode 100644 board/mentalnet/overlay/usr/include/linux/gtp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/handshake.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hash_info.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hdlc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hdlc/ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hdlcdrv.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hdreg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hid.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hiddev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hidraw.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hpet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hsi/cs-protocol.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hsi/hsi_char.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hsr_netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hw_breakpoint.h create mode 100644 board/mentalnet/overlay/usr/include/linux/hyperv.h create mode 100644 board/mentalnet/overlay/usr/include/linux/i2c-dev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/i2c.h create mode 100644 board/mentalnet/overlay/usr/include/linux/i2o-dev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/i8k.h create mode 100644 board/mentalnet/overlay/usr/include/linux/icmp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/icmpv6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/idxd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_addr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_addrlabel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_alg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_arcnet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_arp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_bonding.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_bridge.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_cablemodem.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_eql.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_ether.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_fc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_fddi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_hippi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_infiniband.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_link.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_ltalk.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_macsec.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_packet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_phonet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_plip.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_ppp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_pppol2tp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_pppox.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_slip.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_team.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_tun.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_tunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_vlan.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_x25.h create mode 100644 board/mentalnet/overlay/usr/include/linux/if_xdp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ife.h create mode 100644 board/mentalnet/overlay/usr/include/linux/igmp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/iio/buffer.h create mode 100644 board/mentalnet/overlay/usr/include/linux/iio/events.h create mode 100644 board/mentalnet/overlay/usr/include/linux/iio/types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ila.h create mode 100644 board/mentalnet/overlay/usr/include/linux/in.h create mode 100644 board/mentalnet/overlay/usr/include/linux/in6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/in_route.h create mode 100644 board/mentalnet/overlay/usr/include/linux/inet_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/inotify.h create mode 100644 board/mentalnet/overlay/usr/include/linux/input-event-codes.h create mode 100644 board/mentalnet/overlay/usr/include/linux/input.h create mode 100644 board/mentalnet/overlay/usr/include/linux/io_uring.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ioam6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ioam6_genl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ioam6_iptunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/iommufd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ioprio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ip.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ip6_tunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ip_vs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipmi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipmi_bmc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipmi_msgdefs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipmi_ssif_bmc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipsec.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipv6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ipv6_route.h create mode 100644 board/mentalnet/overlay/usr/include/linux/irqnr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/isdn/capicmd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/iso_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/isst_if.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ivtv.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ivtvfb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/jffs2.h create mode 100644 board/mentalnet/overlay/usr/include/linux/joystick.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kcm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kcmp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kcov.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kdev_t.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kernel-page-flags.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kernel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kernelcapi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kexec.h create mode 100644 board/mentalnet/overlay/usr/include/linux/keyboard.h create mode 100644 board/mentalnet/overlay/usr/include/linux/keyctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kfd_ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kfd_sysfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kvm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/kvm_para.h create mode 100644 board/mentalnet/overlay/usr/include/linux/l2tp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/landlock.h create mode 100644 board/mentalnet/overlay/usr/include/linux/libc-compat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/limits.h create mode 100644 board/mentalnet/overlay/usr/include/linux/lirc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/llc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/loadpin.h create mode 100644 board/mentalnet/overlay/usr/include/linux/loop.h create mode 100644 board/mentalnet/overlay/usr/include/linux/lp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/lsm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/lwtunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/magic.h create mode 100644 board/mentalnet/overlay/usr/include/linux/major.h create mode 100644 board/mentalnet/overlay/usr/include/linux/map_to_14segment.h create mode 100644 board/mentalnet/overlay/usr/include/linux/map_to_7segment.h create mode 100644 board/mentalnet/overlay/usr/include/linux/matroxfb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/max2175.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mctp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mdio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/media-bus-format.h create mode 100644 board/mentalnet/overlay/usr/include/linux/media.h create mode 100644 board/mentalnet/overlay/usr/include/linux/media/raspberrypi/pisp_be_config.h create mode 100644 board/mentalnet/overlay/usr/include/linux/media/raspberrypi/pisp_common.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mei.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mei_uuid.h create mode 100644 board/mentalnet/overlay/usr/include/linux/membarrier.h create mode 100644 board/mentalnet/overlay/usr/include/linux/memfd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mempolicy.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mii.h create mode 100644 board/mentalnet/overlay/usr/include/linux/minix_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/misc/bcm_vk.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mman.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mmc/ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mmtimer.h create mode 100644 board/mentalnet/overlay/usr/include/linux/module.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mount.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mpls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mpls_iptunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mptcp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mptcp_pm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mqueue.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mroute.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mroute6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mrp_bridge.h create mode 100644 board/mentalnet/overlay/usr/include/linux/msdos_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/msg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/mtio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nbd-netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nbd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ncsi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ndctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/neighbour.h create mode 100644 board/mentalnet/overlay/usr/include/linux/net.h create mode 100644 board/mentalnet/overlay/usr/include/linux/net_dropmon.h create mode 100644 board/mentalnet/overlay/usr/include/linux/net_namespace.h create mode 100644 board/mentalnet/overlay/usr/include/linux/net_tstamp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netconf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netdevice.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/ipset/ip_set.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/ipset/ip_set_bitmap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/ipset/ip_set_hash.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/ipset/ip_set_list.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_conntrack_common.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_conntrack_ftp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_conntrack_sctp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_conntrack_tcp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_conntrack_tuple_common.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_log.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_nat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_synproxy.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_tables.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nf_tables_compat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_acct.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_compat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_conntrack.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_cthelper.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_cttimeout.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_hook.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_log.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_osf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/nfnetlink_queue.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/x_tables.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_AUDIT.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_CHECKSUM.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_CLASSIFY.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_CONNMARK.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_CONNSECMARK.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_CT.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_DSCP.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_HMARK.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_IDLETIMER.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_LED.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_LOG.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_MARK.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_NFLOG.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_NFQUEUE.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_RATEEST.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_SECMARK.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_SYNPROXY.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_TCPMSS.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_TCPOPTSTRIP.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_TEE.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_TPROXY.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_addrtype.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_bpf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_cgroup.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_cluster.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_comment.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_connbytes.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_connlabel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_connlimit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_connmark.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_conntrack.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_cpu.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_dccp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_devgroup.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_dscp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_ecn.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_esp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_hashlimit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_helper.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_ipcomp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_iprange.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_ipvs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_l2tp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_length.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_limit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_mac.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_mark.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_multiport.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_nfacct.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_osf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_owner.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_physdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_pkttype.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_policy.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_quota.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_rateest.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_realm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_recent.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_rpfilter.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_sctp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_set.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_socket.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_state.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_statistic.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_string.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_tcpmss.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_tcpudp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_time.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter/xt_u32.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_arp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_arp/arp_tables.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_arp/arpt_mangle.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_802_3.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_among.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_arp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_arpreply.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_ip.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_ip6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_limit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_log.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_mark_m.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_mark_t.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_nat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_nflog.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_pkttype.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_redirect.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_stp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebt_vlan.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_bridge/ebtables.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ip_tables.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_ECN.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_LOG.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_REJECT.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_TTL.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_ah.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_ecn.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv4/ipt_ttl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6_tables.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_HL.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_LOG.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_NPT.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_REJECT.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_ah.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_frag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_hl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_ipv6header.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_mh.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_opts.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_rt.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netfilter_ipv6/ip6t_srh.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netlink_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/netrom.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nexthop.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs2.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs3.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs4.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs4_mount.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs_idmap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfs_mount.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfsacl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfsd/cld.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfsd/debug.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfsd/export.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfsd/stats.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nfsd_netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nilfs2_api.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nilfs2_ondisk.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nitro_enclaves.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nl80211-vnd-intel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nl80211.h create mode 100644 board/mentalnet/overlay/usr/include/linux/npcm-video.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nsfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nsm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ntsync.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nubus.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nvme_ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/nvram.h create mode 100644 board/mentalnet/overlay/usr/include/linux/omap3isp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/omapfb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/oom.h create mode 100644 board/mentalnet/overlay/usr/include/linux/openat2.h create mode 100644 board/mentalnet/overlay/usr/include/linux/openvswitch.h create mode 100644 board/mentalnet/overlay/usr/include/linux/packet_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/papr_pdsm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/param.h create mode 100644 board/mentalnet/overlay/usr/include/linux/parport.h create mode 100644 board/mentalnet/overlay/usr/include/linux/patchkey.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pci.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pci_regs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pcitest.h create mode 100644 board/mentalnet/overlay/usr/include/linux/perf_event.h create mode 100644 board/mentalnet/overlay/usr/include/linux/personality.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pfkeyv2.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pfrut.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/phantom.h create mode 100644 board/mentalnet/overlay/usr/include/linux/phonet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pidfd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pkt_cls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pkt_sched.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pktcdvd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pmu.h create mode 100644 board/mentalnet/overlay/usr/include/linux/poll.h create mode 100644 board/mentalnet/overlay/usr/include/linux/posix_acl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/posix_acl_xattr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/posix_types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ppdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ppp-comp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ppp-ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ppp_defs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pps.h create mode 100644 board/mentalnet/overlay/usr/include/linux/pr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/prctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/psample.h create mode 100644 board/mentalnet/overlay/usr/include/linux/psci.h create mode 100644 board/mentalnet/overlay/usr/include/linux/psp-dbc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/psp-sev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ptp_clock.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ptrace.h create mode 100644 board/mentalnet/overlay/usr/include/linux/qemu_fw_cfg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/qnx4_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/qnxtypes.h create mode 100644 board/mentalnet/overlay/usr/include/linux/qrtr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/quota.h create mode 100644 board/mentalnet/overlay/usr/include/linux/radeonfb.h create mode 100644 board/mentalnet/overlay/usr/include/linux/raid/md_p.h create mode 100644 board/mentalnet/overlay/usr/include/linux/raid/md_u.h create mode 100644 board/mentalnet/overlay/usr/include/linux/random.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rds.h create mode 100644 board/mentalnet/overlay/usr/include/linux/reboot.h create mode 100644 board/mentalnet/overlay/usr/include/linux/reiserfs_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/reiserfs_xattr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/remoteproc_cdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/resource.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rfkill.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rio_cm_cdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rio_mport_cdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rkisp1-config.h create mode 100644 board/mentalnet/overlay/usr/include/linux/romfs_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rose.h create mode 100644 board/mentalnet/overlay/usr/include/linux/route.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rpl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rpl_iptunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rpmsg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rpmsg_types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rseq.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rtc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rtnetlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/rxrpc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/scc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sched.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sched/types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/scif_ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/screen_info.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sctp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/seccomp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/securebits.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sed-opal.h create mode 100644 board/mentalnet/overlay/usr/include/linux/seg6.h create mode 100644 board/mentalnet/overlay/usr/include/linux/seg6_genl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/seg6_hmac.h create mode 100644 board/mentalnet/overlay/usr/include/linux/seg6_iptunnel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/seg6_local.h create mode 100644 board/mentalnet/overlay/usr/include/linux/selinux_netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sem.h create mode 100644 board/mentalnet/overlay/usr/include/linux/serial.h create mode 100644 board/mentalnet/overlay/usr/include/linux/serial_core.h create mode 100644 board/mentalnet/overlay/usr/include/linux/serial_reg.h create mode 100644 board/mentalnet/overlay/usr/include/linux/serio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sev-guest.h create mode 100644 board/mentalnet/overlay/usr/include/linux/shm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/signal.h create mode 100644 board/mentalnet/overlay/usr/include/linux/signalfd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/smc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/smc_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/smiapp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/snmp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sock_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/socket.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sockios.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sonet.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sonypi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sound.h create mode 100644 board/mentalnet/overlay/usr/include/linux/soundcard.h create mode 100644 board/mentalnet/overlay/usr/include/linux/spi/spi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/spi/spidev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/stat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/stddef.h create mode 100644 board/mentalnet/overlay/usr/include/linux/stm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/string.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sunrpc/debug.h create mode 100644 board/mentalnet/overlay/usr/include/linux/surface_aggregator/cdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/surface_aggregator/dtx.h create mode 100644 board/mentalnet/overlay/usr/include/linux/suspend_ioctls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/swab.h create mode 100644 board/mentalnet/overlay/usr/include/linux/switchtec_ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sync_file.h create mode 100644 board/mentalnet/overlay/usr/include/linux/synclink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sysctl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/sysinfo.h create mode 100644 board/mentalnet/overlay/usr/include/linux/target_core_user.h create mode 100644 board/mentalnet/overlay/usr/include/linux/taskstats.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_bpf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_connmark.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_csum.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_ct.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_ctinfo.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_defact.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_gact.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_gate.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_ife.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_mirred.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_mpls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_nat.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_pedit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_sample.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_skbedit.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_skbmod.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_tunnel_key.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_act/tc_vlan.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_ematch/tc_em_cmp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_ematch/tc_em_ipt.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_ematch/tc_em_meta.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_ematch/tc_em_nbyte.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tc_ematch/tc_em_text.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tcp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tcp_metrics.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tdx-guest.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tee.h create mode 100644 board/mentalnet/overlay/usr/include/linux/termios.h create mode 100644 board/mentalnet/overlay/usr/include/linux/thermal.h create mode 100644 board/mentalnet/overlay/usr/include/linux/thp7312.h create mode 100644 board/mentalnet/overlay/usr/include/linux/time.h create mode 100644 board/mentalnet/overlay/usr/include/linux/time_types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/timerfd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/times.h create mode 100644 board/mentalnet/overlay/usr/include/linux/timex.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tiocl.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tipc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tipc_config.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tipc_netlink.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tipc_sockets_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/toshiba.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tps6594_pfsm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/trace_mmap.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tty.h create mode 100644 board/mentalnet/overlay/usr/include/linux/tty_flags.h create mode 100644 board/mentalnet/overlay/usr/include/linux/types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ublk_cmd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/udf_fs_i.h create mode 100644 board/mentalnet/overlay/usr/include/linux/udmabuf.h create mode 100644 board/mentalnet/overlay/usr/include/linux/udp.h create mode 100644 board/mentalnet/overlay/usr/include/linux/uhid.h create mode 100644 board/mentalnet/overlay/usr/include/linux/uinput.h create mode 100644 board/mentalnet/overlay/usr/include/linux/uio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/uleds.h create mode 100644 board/mentalnet/overlay/usr/include/linux/ultrasound.h create mode 100644 board/mentalnet/overlay/usr/include/linux/um_timetravel.h create mode 100644 board/mentalnet/overlay/usr/include/linux/un.h create mode 100644 board/mentalnet/overlay/usr/include/linux/unistd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/unix_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/audio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/cdc-wdm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/cdc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/ch11.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/ch9.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/charger.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/functionfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/g_hid.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/g_printer.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/g_uvc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/gadgetfs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/midi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/raw_gadget.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/tmc.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usb/video.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usbdevice_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/usbip.h create mode 100644 board/mentalnet/overlay/usr/include/linux/user_events.h create mode 100644 board/mentalnet/overlay/usr/include/linux/userfaultfd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/userio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/utime.h create mode 100644 board/mentalnet/overlay/usr/include/linux/utsname.h create mode 100644 board/mentalnet/overlay/usr/include/linux/uuid.h create mode 100644 board/mentalnet/overlay/usr/include/linux/uvcvideo.h create mode 100644 board/mentalnet/overlay/usr/include/linux/v4l2-common.h create mode 100644 board/mentalnet/overlay/usr/include/linux/v4l2-controls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/v4l2-dv-timings.h create mode 100644 board/mentalnet/overlay/usr/include/linux/v4l2-mediabus.h create mode 100644 board/mentalnet/overlay/usr/include/linux/v4l2-subdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vbox_err.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vbox_vmmdev_types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vboxguest.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vdpa.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vduse.h create mode 100644 board/mentalnet/overlay/usr/include/linux/version.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vesa.h create mode 100644 board/mentalnet/overlay/usr/include/linux/veth.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vfio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vfio_ccw.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vfio_zdev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vhost.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vhost_types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/videodev2.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_9p.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_balloon.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_blk.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_bt.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_config.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_console.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_crypto.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_fs.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_gpio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_gpu.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_i2c.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_ids.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_input.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_iommu.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_mem.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_mmio.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_net.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_pci.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_pcidev.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_pmem.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_ring.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_rng.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_scmi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_scsi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_snd.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_types.h create mode 100644 board/mentalnet/overlay/usr/include/linux/virtio_vsock.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vm_sockets.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vm_sockets_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vmcore.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vsockmon.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vt.h create mode 100644 board/mentalnet/overlay/usr/include/linux/vtpm_proxy.h create mode 100644 board/mentalnet/overlay/usr/include/linux/wait.h create mode 100644 board/mentalnet/overlay/usr/include/linux/watch_queue.h create mode 100644 board/mentalnet/overlay/usr/include/linux/watchdog.h create mode 100644 board/mentalnet/overlay/usr/include/linux/wireguard.h create mode 100644 board/mentalnet/overlay/usr/include/linux/wireless.h create mode 100644 board/mentalnet/overlay/usr/include/linux/wmi.h create mode 100644 board/mentalnet/overlay/usr/include/linux/wwan.h create mode 100644 board/mentalnet/overlay/usr/include/linux/x25.h create mode 100644 board/mentalnet/overlay/usr/include/linux/xattr.h create mode 100644 board/mentalnet/overlay/usr/include/linux/xdp_diag.h create mode 100644 board/mentalnet/overlay/usr/include/linux/xfrm.h create mode 100644 board/mentalnet/overlay/usr/include/linux/xilinx-v4l2-controls.h create mode 100644 board/mentalnet/overlay/usr/include/linux/zorro.h create mode 100644 board/mentalnet/overlay/usr/include/linux/zorro_ids.h create mode 100644 board/mentalnet/overlay/usr/include/locale.h create mode 100644 board/mentalnet/overlay/usr/include/magic.h create mode 100644 board/mentalnet/overlay/usr/include/malloc.h create mode 100644 board/mentalnet/overlay/usr/include/math.h create mode 100644 board/mentalnet/overlay/usr/include/mcheck.h create mode 100644 board/mentalnet/overlay/usr/include/memory.h create mode 100644 board/mentalnet/overlay/usr/include/menu.h create mode 100644 board/mentalnet/overlay/usr/include/mntent.h create mode 100644 board/mentalnet/overlay/usr/include/monetary.h create mode 100644 board/mentalnet/overlay/usr/include/mqueue.h create mode 100644 board/mentalnet/overlay/usr/include/ncurses.h create mode 100644 board/mentalnet/overlay/usr/include/ncurses_dll.h create mode 100644 board/mentalnet/overlay/usr/include/netdb.h create mode 100644 board/mentalnet/overlay/usr/include/nl_types.h create mode 100644 board/mentalnet/overlay/usr/include/nss.h create mode 100644 board/mentalnet/overlay/usr/include/obstack.h create mode 100644 board/mentalnet/overlay/usr/include/panel.h create mode 100644 board/mentalnet/overlay/usr/include/paths.h create mode 100644 board/mentalnet/overlay/usr/include/poll.h create mode 100644 board/mentalnet/overlay/usr/include/printf.h create mode 100644 board/mentalnet/overlay/usr/include/proc_service.h create mode 100644 board/mentalnet/overlay/usr/include/pthread.h create mode 100644 board/mentalnet/overlay/usr/include/pty.h create mode 100644 board/mentalnet/overlay/usr/include/pwd.h create mode 100644 board/mentalnet/overlay/usr/include/re_comp.h create mode 100644 board/mentalnet/overlay/usr/include/regex.h create mode 100644 board/mentalnet/overlay/usr/include/regexp.h create mode 100644 board/mentalnet/overlay/usr/include/resolv.h create mode 100644 board/mentalnet/overlay/usr/include/sched.h create mode 100644 board/mentalnet/overlay/usr/include/search.h create mode 100644 board/mentalnet/overlay/usr/include/semaphore.h create mode 100644 board/mentalnet/overlay/usr/include/setjmp.h create mode 100644 board/mentalnet/overlay/usr/include/sgtty.h create mode 100644 board/mentalnet/overlay/usr/include/shadow.h create mode 100644 board/mentalnet/overlay/usr/include/signal.h create mode 100644 board/mentalnet/overlay/usr/include/spawn.h create mode 100644 board/mentalnet/overlay/usr/include/sqlite3.h create mode 100644 board/mentalnet/overlay/usr/include/sqlite3ext.h create mode 100644 board/mentalnet/overlay/usr/include/stab.h create mode 100644 board/mentalnet/overlay/usr/include/stdbit.h create mode 100644 board/mentalnet/overlay/usr/include/stdc-predef.h create mode 100644 board/mentalnet/overlay/usr/include/stdint.h create mode 100644 board/mentalnet/overlay/usr/include/stdio.h create mode 100644 board/mentalnet/overlay/usr/include/stdio_ext.h create mode 100644 board/mentalnet/overlay/usr/include/stdlib.h create mode 100644 board/mentalnet/overlay/usr/include/string.h create mode 100644 board/mentalnet/overlay/usr/include/strings.h create mode 100644 board/mentalnet/overlay/usr/include/sys/acct.h create mode 100644 board/mentalnet/overlay/usr/include/sys/auxv.h create mode 100644 board/mentalnet/overlay/usr/include/sys/bitypes.h create mode 100644 board/mentalnet/overlay/usr/include/sys/capability.h create mode 100644 board/mentalnet/overlay/usr/include/sys/cdefs.h create mode 100644 board/mentalnet/overlay/usr/include/sys/debugreg.h create mode 100644 board/mentalnet/overlay/usr/include/sys/dir.h create mode 100644 board/mentalnet/overlay/usr/include/sys/elf.h create mode 100644 board/mentalnet/overlay/usr/include/sys/epoll.h create mode 100644 board/mentalnet/overlay/usr/include/sys/errno.h create mode 100644 board/mentalnet/overlay/usr/include/sys/eventfd.h create mode 100644 board/mentalnet/overlay/usr/include/sys/fanotify.h create mode 100644 board/mentalnet/overlay/usr/include/sys/fcntl.h create mode 100644 board/mentalnet/overlay/usr/include/sys/file.h create mode 100644 board/mentalnet/overlay/usr/include/sys/fsuid.h create mode 100644 board/mentalnet/overlay/usr/include/sys/gmon.h create mode 100644 board/mentalnet/overlay/usr/include/sys/gmon_out.h create mode 100644 board/mentalnet/overlay/usr/include/sys/inotify.h create mode 100644 board/mentalnet/overlay/usr/include/sys/io.h create mode 100644 board/mentalnet/overlay/usr/include/sys/ioctl.h create mode 100644 board/mentalnet/overlay/usr/include/sys/ipc.h create mode 100644 board/mentalnet/overlay/usr/include/sys/kd.h create mode 100644 board/mentalnet/overlay/usr/include/sys/klog.h create mode 100644 board/mentalnet/overlay/usr/include/sys/mman.h create mode 100644 board/mentalnet/overlay/usr/include/sys/mount.h create mode 100644 board/mentalnet/overlay/usr/include/sys/msg.h create mode 100644 board/mentalnet/overlay/usr/include/sys/mtio.h create mode 100644 board/mentalnet/overlay/usr/include/sys/param.h create mode 100644 board/mentalnet/overlay/usr/include/sys/pci.h create mode 100644 board/mentalnet/overlay/usr/include/sys/perm.h create mode 100644 board/mentalnet/overlay/usr/include/sys/personality.h create mode 100644 board/mentalnet/overlay/usr/include/sys/pidfd.h create mode 100644 board/mentalnet/overlay/usr/include/sys/platform/x86.h create mode 100644 board/mentalnet/overlay/usr/include/sys/poll.h create mode 100644 board/mentalnet/overlay/usr/include/sys/prctl.h create mode 100644 board/mentalnet/overlay/usr/include/sys/procfs.h create mode 100644 board/mentalnet/overlay/usr/include/sys/profil.h create mode 100644 board/mentalnet/overlay/usr/include/sys/psx_syscall.h create mode 100644 board/mentalnet/overlay/usr/include/sys/ptrace.h create mode 100644 board/mentalnet/overlay/usr/include/sys/queue.h create mode 100644 board/mentalnet/overlay/usr/include/sys/quota.h create mode 100644 board/mentalnet/overlay/usr/include/sys/random.h create mode 100644 board/mentalnet/overlay/usr/include/sys/raw.h create mode 100644 board/mentalnet/overlay/usr/include/sys/reboot.h create mode 100644 board/mentalnet/overlay/usr/include/sys/reg.h create mode 100644 board/mentalnet/overlay/usr/include/sys/resource.h create mode 100644 board/mentalnet/overlay/usr/include/sys/rseq.h create mode 100644 board/mentalnet/overlay/usr/include/sys/select.h create mode 100644 board/mentalnet/overlay/usr/include/sys/sem.h create mode 100644 board/mentalnet/overlay/usr/include/sys/sendfile.h create mode 100644 board/mentalnet/overlay/usr/include/sys/shm.h create mode 100644 board/mentalnet/overlay/usr/include/sys/signal.h create mode 100644 board/mentalnet/overlay/usr/include/sys/signalfd.h create mode 100644 board/mentalnet/overlay/usr/include/sys/single_threaded.h create mode 100644 board/mentalnet/overlay/usr/include/sys/socket.h create mode 100644 board/mentalnet/overlay/usr/include/sys/socketvar.h create mode 100644 board/mentalnet/overlay/usr/include/sys/soundcard.h create mode 100644 board/mentalnet/overlay/usr/include/sys/stat.h create mode 100644 board/mentalnet/overlay/usr/include/sys/statfs.h create mode 100644 board/mentalnet/overlay/usr/include/sys/statvfs.h create mode 100644 board/mentalnet/overlay/usr/include/sys/swap.h create mode 100644 board/mentalnet/overlay/usr/include/sys/syscall.h create mode 100644 board/mentalnet/overlay/usr/include/sys/sysinfo.h create mode 100644 board/mentalnet/overlay/usr/include/sys/syslog.h create mode 100644 board/mentalnet/overlay/usr/include/sys/sysmacros.h create mode 100644 board/mentalnet/overlay/usr/include/sys/termios.h create mode 100644 board/mentalnet/overlay/usr/include/sys/time.h create mode 100644 board/mentalnet/overlay/usr/include/sys/timeb.h create mode 100644 board/mentalnet/overlay/usr/include/sys/timerfd.h create mode 100644 board/mentalnet/overlay/usr/include/sys/times.h create mode 100644 board/mentalnet/overlay/usr/include/sys/timex.h create mode 100644 board/mentalnet/overlay/usr/include/sys/ttychars.h create mode 100644 board/mentalnet/overlay/usr/include/sys/ttydefaults.h create mode 100644 board/mentalnet/overlay/usr/include/sys/types.h create mode 100644 board/mentalnet/overlay/usr/include/sys/ucontext.h create mode 100644 board/mentalnet/overlay/usr/include/sys/uio.h create mode 100644 board/mentalnet/overlay/usr/include/sys/un.h create mode 100644 board/mentalnet/overlay/usr/include/sys/unistd.h create mode 100644 board/mentalnet/overlay/usr/include/sys/user.h create mode 100644 board/mentalnet/overlay/usr/include/sys/utsname.h create mode 100644 board/mentalnet/overlay/usr/include/sys/vfs.h create mode 100644 board/mentalnet/overlay/usr/include/sys/vlimit.h create mode 100644 board/mentalnet/overlay/usr/include/sys/vm86.h create mode 100644 board/mentalnet/overlay/usr/include/sys/vt.h create mode 100644 board/mentalnet/overlay/usr/include/sys/wait.h create mode 100644 board/mentalnet/overlay/usr/include/sys/xattr.h create mode 100644 board/mentalnet/overlay/usr/include/syscall.h create mode 100644 board/mentalnet/overlay/usr/include/sysexits.h create mode 100644 board/mentalnet/overlay/usr/include/syslog.h create mode 100644 board/mentalnet/overlay/usr/include/tar.h create mode 100644 board/mentalnet/overlay/usr/include/term.h create mode 100644 board/mentalnet/overlay/usr/include/termcap.h create mode 100644 board/mentalnet/overlay/usr/include/termio.h create mode 100644 board/mentalnet/overlay/usr/include/termios.h create mode 100644 board/mentalnet/overlay/usr/include/tgmath.h create mode 100644 board/mentalnet/overlay/usr/include/thread_db.h create mode 100644 board/mentalnet/overlay/usr/include/threads.h create mode 100644 board/mentalnet/overlay/usr/include/time.h create mode 100644 board/mentalnet/overlay/usr/include/ttyent.h create mode 100644 board/mentalnet/overlay/usr/include/types.h create mode 100644 board/mentalnet/overlay/usr/include/uchar.h create mode 100644 board/mentalnet/overlay/usr/include/ucontext.h create mode 100644 board/mentalnet/overlay/usr/include/ulimit.h create mode 100644 board/mentalnet/overlay/usr/include/unctrl.h create mode 100644 board/mentalnet/overlay/usr/include/unistd.h create mode 100644 board/mentalnet/overlay/usr/include/utime.h create mode 100644 board/mentalnet/overlay/usr/include/utmp.h create mode 100644 board/mentalnet/overlay/usr/include/utmpx.h create mode 100644 board/mentalnet/overlay/usr/include/values.h create mode 100644 board/mentalnet/overlay/usr/include/wait.h create mode 100644 board/mentalnet/overlay/usr/include/wchar.h create mode 100644 board/mentalnet/overlay/usr/include/wctype.h create mode 100644 board/mentalnet/overlay/usr/include/wordexp.h create mode 100644 board/mentalnet/overlay/usr/include/xtables-version.h create mode 100644 board/mentalnet/overlay/usr/include/xtables.h create mode 100644 board/mentalnet/overlay/usr/include/xxh3.h create mode 100644 board/mentalnet/overlay/usr/include/xxhash.h create mode 100644 board/mentalnet/overlay/usr/include/zconf.h create mode 100644 board/mentalnet/overlay/usr/include/zdict.h create mode 100644 board/mentalnet/overlay/usr/include/zlib.h create mode 100644 board/mentalnet/overlay/usr/include/zstd.h create mode 100644 board/mentalnet/overlay/usr/include/zstd_errors.h create mode 100644 board/mentalnet/overlay/usr/lib/libc.so create mode 100644 board/mentalnet/overlay/usr/lib/libc_nonshared.a create mode 100644 board/mentalnet/overlay/usr/lib/libpthread.a create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/float.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/stdalign.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/stdarg.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/stdatomic.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/stdbool.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/stddef.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/stdnoreturn.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/tccdefs.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/tgmath.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/include/varargs.h create mode 100644 board/mentalnet/overlay/usr/lib/tcc/libtcc1.a create mode 100755 board/mentalnet/overlay/usr/sbin/serv create mode 100644 board/mentalnet/overlay/var/www/html/index.html create mode 100644 board/mentalnet/overlay/var/www/html/tux.jpg diff --git a/.config b/.config index 9c0a4c3..6063a70 100644 --- a/.config +++ b/.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Buildroot -g674592d-dirty Configuration +# Buildroot -g8de5ae7-dirty Configuration # BR2_HAVE_DOT_CONFIG=y BR2_HOST_GCC_AT_LEAST_4_9=y @@ -467,8 +467,8 @@ BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y BR2_SYSTEM_DHCP="eth0" BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" BR2_ENABLE_LOCALE_PURGE=y -BR2_ENABLE_LOCALE_WHITELIST="C en_US" -BR2_GENERATE_LOCALE="" +BR2_ENABLE_LOCALE_WHITELIST="C en_US en_US.UTF-8" +BR2_GENERATE_LOCALE="en_US.UTF-8" # BR2_SYSTEM_ENABLE_NLS is not set # BR2_TARGET_TZ_INFO is not set BR2_ROOTFS_USERS_TABLES="" @@ -979,7 +979,12 @@ BR2_PACKAGE_E2FSPROGS_FSCK=y # # BR2_PACKAGE_BITSTREAM_VERA is not set # BR2_PACKAGE_CANTARELL is not set -# BR2_PACKAGE_DEJAVU is not set +BR2_PACKAGE_DEJAVU=y +BR2_PACKAGE_DEJAVU_MONO=y +BR2_PACKAGE_DEJAVU_SANS=y +BR2_PACKAGE_DEJAVU_SERIF=y +BR2_PACKAGE_DEJAVU_SANS_CONDENSED=y +BR2_PACKAGE_DEJAVU_SERIF_CONDENSED=y # BR2_PACKAGE_FONT_AWESOME is not set # BR2_PACKAGE_GHOSTSCRIPT_FONTS is not set # BR2_PACKAGE_INCONSOLATA is not set @@ -1136,7 +1141,7 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # # freerdp needs a toolchain w/ wchar, dynamic library, threads, C++ # -# BR2_PACKAGE_GRAPHICSMAGICK is not set +BR2_PACKAGE_GRAPHICSMAGICK=y # BR2_PACKAGE_IMAGEMAGICK is not set # BR2_PACKAGE_LIBGLVND is not set @@ -1541,9 +1546,275 @@ BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS=y # # openjdk needs glibc, and a toolchain w/ wchar, dynamic library, threads, C++, gcc >= 4.9, host gcc >= 4.9 # -# BR2_PACKAGE_PERL is not set +BR2_PACKAGE_PERL=y +BR2_PACKAGE_PERL_MODULES="" +# BR2_PACKAGE_PERL_THREADS is not set + +# +# Perl libraries/modules +# +# BR2_PACKAGE_PERL_APACHE_LOGFORMAT_COMPILER is not set +# BR2_PACKAGE_PERL_APPCONFIG is not set +# BR2_PACKAGE_PERL_ASTRO_SUNTIME is not set +# BR2_PACKAGE_PERL_CLASS_INSPECTOR is not set +# BR2_PACKAGE_PERL_CLASS_LOAD is not set +# BR2_PACKAGE_PERL_CLASS_METHOD_MODIFIERS is not set +# BR2_PACKAGE_PERL_CLASS_STD is not set +# BR2_PACKAGE_PERL_CLASS_STD_FAST is not set +# BR2_PACKAGE_PERL_CLONE is not set +# BR2_PACKAGE_PERL_CONVERT_ASN1 is not set +# BR2_PACKAGE_PERL_COOKIE_BAKER is not set +# BR2_PACKAGE_PERL_CRYPT_BLOWFISH is not set +# BR2_PACKAGE_PERL_CRYPT_CBC is not set +# BR2_PACKAGE_PERL_CRYPT_OPENSSL_AES is not set +# BR2_PACKAGE_PERL_CRYPT_OPENSSL_RANDOM is not set +# BR2_PACKAGE_PERL_CRYPT_OPENSSL_RSA is not set +# BR2_PACKAGE_PERL_DATA_DUMP is not set +# BR2_PACKAGE_PERL_DATA_OPTLIST is not set +# BR2_PACKAGE_PERL_DATA_UUID is not set +# BR2_PACKAGE_PERL_DATE_MANIP is not set +# BR2_PACKAGE_PERL_DATETIME_TINY is not set + +# +# perl-dbd-mysql needs a toolchain w/ dynamic library, wchar, C++, threads +# +# BR2_PACKAGE_PERL_DBI is not set +# BR2_PACKAGE_PERL_DEVEL_CYCLE is not set +# BR2_PACKAGE_PERL_DEVEL_GLOBALDESTRUCTION is not set +# BR2_PACKAGE_PERL_DEVEL_SIZE is not set +# BR2_PACKAGE_PERL_DEVEL_STACKTRACE is not set +# BR2_PACKAGE_PERL_DEVEL_STACKTRACE_ASHTML is not set +# BR2_PACKAGE_PERL_DEVICE_SERIALPORT is not set +# BR2_PACKAGE_PERL_DIGEST_HMAC is not set +# BR2_PACKAGE_PERL_DIGEST_SHA1 is not set +# BR2_PACKAGE_PERL_DIST_CHECKCONFLICTS is not set + +# +# perl-encode-detect needs a toolchain w/ C++, dynamic library +# +# BR2_PACKAGE_PERL_ENCODE_LOCALE is not set +# BR2_PACKAGE_PERL_EXPORTER_TINY is not set +# BR2_PACKAGE_PERL_FILE_LISTING is not set +# BR2_PACKAGE_PERL_FILE_SHAREDIR is not set +# BR2_PACKAGE_PERL_FILE_SLURP is not set +# BR2_PACKAGE_PERL_FILE_UTIL is not set +# BR2_PACKAGE_PERL_FILESYS_NOTIFY_SIMPLE is not set +# BR2_PACKAGE_PERL_GD is not set +# BR2_PACKAGE_PERL_GDGRAPH is not set +# BR2_PACKAGE_PERL_GDTEXTUTIL is not set +# BR2_PACKAGE_PERL_HASH_MULTIVALUE is not set +# BR2_PACKAGE_PERL_HTML_PARSER is not set +# BR2_PACKAGE_PERL_HTML_TAGSET is not set +# BR2_PACKAGE_PERL_HTTP_COOKIES is not set +# BR2_PACKAGE_PERL_HTTP_DAEMON is not set +# BR2_PACKAGE_PERL_HTTP_DATE is not set +# BR2_PACKAGE_PERL_HTTP_ENTITY_PARSER is not set +# BR2_PACKAGE_PERL_HTTP_HEADERS_FAST is not set +# BR2_PACKAGE_PERL_HTTP_MESSAGE is not set +# BR2_PACKAGE_PERL_HTTP_MULTIPARTPARSER is not set +# BR2_PACKAGE_PERL_HTTP_NEGOTIATE is not set +# BR2_PACKAGE_PERL_I18N is not set +# BR2_PACKAGE_PERL_IMAGE_EXIFTOOL is not set +# BR2_PACKAGE_PERL_IO_HTML is not set +# BR2_PACKAGE_PERL_IO_INTERFACE is not set +# BR2_PACKAGE_PERL_IO_SOCKET_MULTICAST is not set +# BR2_PACKAGE_PERL_IO_SOCKET_SSL is not set +# BR2_PACKAGE_PERL_JSON_MAYBEXS is not set +# BR2_PACKAGE_PERL_JSON_TINY is not set +# BR2_PACKAGE_PERL_LIBWWW_PERL is not set +# BR2_PACKAGE_PERL_LOCALE_MAKETEXT_LEXICON is not set +# BR2_PACKAGE_PERL_LWP_MEDIATYPES is not set +# BR2_PACKAGE_PERL_LWP_PROTOCOL_HTTPS is not set +# BR2_PACKAGE_PERL_MAIL_DKIM is not set +# BR2_PACKAGE_PERL_MAILTOOLS is not set +# BR2_PACKAGE_PERL_MATH_INT64 is not set +# BR2_PACKAGE_PERL_MATH_PRIME_UTIL is not set +# BR2_PACKAGE_PERL_MIME_BASE32 is not set +# BR2_PACKAGE_PERL_MIME_BASE64_URLSAFE is not set +# BR2_PACKAGE_PERL_MIME_TOOLS is not set +# BR2_PACKAGE_PERL_MODULE_IMPLEMENTATION is not set +# BR2_PACKAGE_PERL_MODULE_RUNTIME is not set +# BR2_PACKAGE_PERL_MOJOLICIOUS is not set +# BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION is not set +# BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_AUTHORIZATION is not set +# BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_CSPHEADER is not set +# BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_I18N is not set +# BR2_PACKAGE_PERL_MOJOLICIOUS_PLUGIN_SECURITYHEADER is not set +# BR2_PACKAGE_PERL_MOO is not set +# BR2_PACKAGE_PERL_MOZILLA_CA is not set +# BR2_PACKAGE_PERL_NET_DNS is not set +# BR2_PACKAGE_PERL_NET_HTTP is not set +# BR2_PACKAGE_PERL_NET_SNMP is not set + +# +# perl-net-ssh2 needs libssh2 with OpenSSL or Libgcrypt backend +# +# BR2_PACKAGE_PERL_NET_SSLEAY is not set +# BR2_PACKAGE_PERL_NET_TELNET is not set +# BR2_PACKAGE_PERL_NETADDR_IP is not set +# BR2_PACKAGE_PERL_NUMBER_BYTES_HUMAN is not set +# BR2_PACKAGE_PERL_PACKAGE_STASH is not set +# BR2_PACKAGE_PERL_PARAMS_UTIL is not set +# BR2_PACKAGE_PERL_PARSE_YAPP is not set +# BR2_PACKAGE_PERL_PATH_TINY is not set +# BR2_PACKAGE_PERL_PLACK is not set +# BR2_PACKAGE_PERL_POSIX_STRFTIME_COMPILER is not set +# BR2_PACKAGE_PERL_ROLE_TINY is not set +# BR2_PACKAGE_PERL_STREAM_BUFFERED is not set +# BR2_PACKAGE_PERL_SUB_EXPORTER_PROGRESSIVE is not set +# BR2_PACKAGE_PERL_SUB_INSTALL is not set +# BR2_PACKAGE_PERL_SUB_QUOTE is not set +# BR2_PACKAGE_PERL_SYS_CPU is not set +# BR2_PACKAGE_PERL_SYS_MEMINFO is not set +# BR2_PACKAGE_PERL_SYS_MMAP is not set +# BR2_PACKAGE_PERL_TIME_PARSEDATE is not set +# BR2_PACKAGE_PERL_TIMEDATE is not set +# BR2_PACKAGE_PERL_TRY_TINY is not set +# BR2_PACKAGE_PERL_TYPE_TINY is not set +# BR2_PACKAGE_PERL_URI is not set +# BR2_PACKAGE_PERL_WWW_FORM_URLENCODED is not set +# BR2_PACKAGE_PERL_WWW_ROBOTRULES is not set +# BR2_PACKAGE_PERL_X10 is not set +# BR2_PACKAGE_PERL_XML_LIBXML is not set +# BR2_PACKAGE_PERL_XML_NAMESPACESUPPORT is not set +# BR2_PACKAGE_PERL_XML_SAX is not set +# BR2_PACKAGE_PERL_XML_SAX_BASE is not set BR2_PACKAGE_PHP_ARCH_SUPPORTS=y -# BR2_PACKAGE_PHP is not set +BR2_PACKAGE_PHP=y +BR2_PACKAGE_PHP_SAPI_CGI=y +BR2_PACKAGE_PHP_SAPI_CLI=y +BR2_PACKAGE_PHP_SAPI_FPM=y + +# +# Extensions +# +# BR2_PACKAGE_PHP_EXT_CALENDAR is not set +# BR2_PACKAGE_PHP_EXT_FILEINFO is not set +# BR2_PACKAGE_PHP_EXT_OPCACHE is not set +# BR2_PACKAGE_PHP_EXT_READLINE is not set +BR2_PACKAGE_PHP_EXT_SESSION=y + +# +# Compression extensions +# +# BR2_PACKAGE_PHP_EXT_BZIP2 is not set +# BR2_PACKAGE_PHP_EXT_PHAR is not set +# BR2_PACKAGE_PHP_EXT_ZIP is not set +BR2_PACKAGE_PHP_EXT_ZLIB=y + +# +# Cryptography extensions +# +# BR2_PACKAGE_PHP_EXT_LIBARGON2 is not set +# BR2_PACKAGE_PHP_EXT_LIBSODIUM is not set +# BR2_PACKAGE_PHP_EXT_OPENSSL is not set + +# +# Database extensions +# +# BR2_PACKAGE_PHP_EXT_DBA is not set +# BR2_PACKAGE_PHP_EXT_MYSQLI is not set +# BR2_PACKAGE_PHP_EXT_PGSQL is not set +# BR2_PACKAGE_PHP_EXT_SQLITE is not set +# BR2_PACKAGE_PHP_EXT_PDO is not set + +# +# Human language and character encoding support +# + +# +# Gettext support needs NLS enabled +# +# BR2_PACKAGE_PHP_EXT_ICONV is not set + +# +# intl support needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.9, host gcc >= 4.9 +# +# BR2_PACKAGE_PHP_EXT_MBSTRING is not set + +# +# Image processing +# +# BR2_PACKAGE_PHP_EXT_EXIF is not set +# BR2_PACKAGE_PHP_EXT_GD is not set + +# +# Mathematical extensions +# +# BR2_PACKAGE_PHP_EXT_BCMATH is not set +# BR2_PACKAGE_PHP_EXT_GMP is not set + +# +# Other basic extensions +# +# BR2_PACKAGE_PHP_EXT_TOKENIZER is not set + +# +# Other services +# +# BR2_PACKAGE_PHP_EXT_CURL is not set +# BR2_PACKAGE_PHP_EXT_FTP is not set +# BR2_PACKAGE_PHP_EXT_SNMP is not set +# BR2_PACKAGE_PHP_EXT_SOCKETS is not set + +# +# Process Control +# +# BR2_PACKAGE_PHP_EXT_PCNTL is not set +BR2_PACKAGE_PHP_EXT_POSIX=y +# BR2_PACKAGE_PHP_EXT_SHMOP is not set +# BR2_PACKAGE_PHP_EXT_SYSVMSG is not set +# BR2_PACKAGE_PHP_EXT_SYSVSEM is not set +# BR2_PACKAGE_PHP_EXT_SYSVSHM is not set + +# +# Variable and Type related +# +# BR2_PACKAGE_PHP_EXT_CTYPE is not set +# BR2_PACKAGE_PHP_EXT_FILTER is not set + +# +# Web services +# +# BR2_PACKAGE_PHP_EXT_SOAP is not set + +# +# XML manipulation +# +# BR2_PACKAGE_PHP_EXT_DOM is not set +# BR2_PACKAGE_PHP_EXT_LIBXML2 is not set +# BR2_PACKAGE_PHP_EXT_SIMPLEXML is not set +# BR2_PACKAGE_PHP_EXT_XML is not set +# BR2_PACKAGE_PHP_EXT_XMLREADER is not set +# BR2_PACKAGE_PHP_EXT_XMLWRITER is not set +# BR2_PACKAGE_PHP_EXT_XSL is not set +# BR2_PACKAGE_PHP_EXT_FFI is not set + +# +# External php extensions +# +# BR2_PACKAGE_PHP_AMQP is not set +# BR2_PACKAGE_PHP_APCU is not set +# BR2_PACKAGE_PHP_GEOIP is not set +# BR2_PACKAGE_PHP_GNUPG is not set +# BR2_PACKAGE_PHP_IMAGICK is not set + +# +# php-lua needs the lua interpreter +# + +# +# php-memcached needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_PHP_PAM is not set +# BR2_PACKAGE_PHP_PECL_DBUS is not set +# BR2_PACKAGE_PHP_SSH2 is not set +# BR2_PACKAGE_PHP_XDEBUG is not set +# BR2_PACKAGE_PHP_YAML is not set + +# +# php-zmq needs a toolchain w/ C++, threads +# BR2_PACKAGE_PYTHON3=y # BR2_PACKAGE_PYTHON3_PY_ONLY is not set BR2_PACKAGE_PYTHON3_PYC_ONLY=y @@ -2195,7 +2466,7 @@ BR2_PACKAGE_PYTHON_WERKZEUG=y # python-zopfli needs a toolchain w/ C++ # # BR2_PACKAGE_QUICKJS is not set -# BR2_PACKAGE_RUBY is not set +BR2_PACKAGE_RUBY=y BR2_PACKAGE_SWIPL_ARCH_SUPPORTS=y # BR2_PACKAGE_SWIPL is not set # BR2_PACKAGE_TCL is not set @@ -2553,8 +2824,8 @@ BR2_PACKAGE_SQLITE=y # # exiv2 needs a uClibc or glibc toolchain w/ C++, wchar, dynamic library, threads # -# BR2_PACKAGE_FONTCONFIG is not set -# BR2_PACKAGE_FREETYPE is not set +BR2_PACKAGE_FONTCONFIG=y +BR2_PACKAGE_FREETYPE=y # BR2_PACKAGE_GD is not set # BR2_PACKAGE_GDK_PIXBUF is not set # BR2_PACKAGE_GIFLIB is not set @@ -2587,7 +2858,11 @@ BR2_PACKAGE_SQLITE=y # # BR2_PACKAGE_JASPER is not set # BR2_PACKAGE_JBIG2DEC is not set -# BR2_PACKAGE_JPEG is not set +BR2_PACKAGE_JPEG=y +BR2_PACKAGE_LIBJPEG=y +# BR2_PACKAGE_JPEG_TURBO is not set +BR2_PACKAGE_HAS_JPEG=y +BR2_PACKAGE_PROVIDES_JPEG="libjpeg" # # kms++ needs a toolchain w/ threads, C++, gcc >= 4.8, headers >= 4.11, wchar @@ -2660,7 +2935,7 @@ BR2_PACKAGE_SQLITE=y # # BR2_PACKAGE_LIBMEDIAART is not set # BR2_PACKAGE_LIBMNG is not set -# BR2_PACKAGE_LIBPNG is not set +BR2_PACKAGE_LIBPNG=y # BR2_PACKAGE_LIBQRENCODE is not set # @@ -2716,7 +2991,9 @@ BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=y # # webkitgtk needs libgtk3 or libgtk4 and a toolchain w/ C++, wchar, NPTL, dynamic library, gcc >= 11, host gcc >= 4.9 # -# BR2_PACKAGE_WEBP is not set +BR2_PACKAGE_WEBP=y +BR2_PACKAGE_WEBP_DEMUX=y +BR2_PACKAGE_WEBP_MUX=y # # wlroots needs udev, EGL, OpenGL ES and GBM support @@ -2873,7 +3150,7 @@ BR2_PACKAGE_MRAA_ARCH_SUPPORTS=y # benejson needs a toolchain w/ C++ # # BR2_PACKAGE_CJSON is not set -# BR2_PACKAGE_EXPAT is not set +BR2_PACKAGE_EXPAT=y # BR2_PACKAGE_JANSSON is not set # BR2_PACKAGE_JOSE is not set # BR2_PACKAGE_JSMN is not set @@ -3766,7 +4043,11 @@ BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO="" # BR2_PACKAGE_NEWT is not set # BR2_PACKAGE_ONIGURUMA is not set # BR2_PACKAGE_PCRE is not set -# BR2_PACKAGE_PCRE2 is not set +BR2_PACKAGE_PCRE2=y +# BR2_PACKAGE_PCRE2_16 is not set +# BR2_PACKAGE_PCRE2_32 is not set +BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_PCRE2_JIT is not set # BR2_PACKAGE_POPT is not set # @@ -3993,7 +4274,7 @@ BR2_PACKAGE_DROPBEAR_LOCALOPTIONS_FILE="" # # gerbera needs a toolchain w/ C++, dynamic library, threads, wchar, gcc >= 8 # -# BR2_PACKAGE_GESFTPSERVER is not set +BR2_PACKAGE_GESFTPSERVER=y # # gloox needs a toolchain w/ C++ @@ -4042,7 +4323,7 @@ BR2_PACKAGE_IFUPDOWN_SCRIPTS=y # iperf needs a toolchain w/ C++ # # BR2_PACKAGE_IPERF3 is not set -# BR2_PACKAGE_IPROUTE2 is not set +BR2_PACKAGE_IPROUTE2=y # BR2_PACKAGE_IPSET is not set # BR2_PACKAGE_IPTABLES is not set # BR2_PACKAGE_IPTRAF_NG is not set @@ -4115,7 +4396,7 @@ BR2_PACKAGE_LYNX=y # BR2_PACKAGE_NBD is not set # BR2_PACKAGE_NCFTP is not set # BR2_PACKAGE_NDISC6 is not set -BR2_PACKAGE_NET_TOOLS=y +# BR2_PACKAGE_NET_TOOLS is not set # BR2_PACKAGE_NETATALK is not set # BR2_PACKAGE_NETCALC is not set BR2_PACKAGE_NETCAT=y @@ -4215,7 +4496,7 @@ BR2_PACKAGE_NFTABLES_PYTHON=y # # snort3 needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.9 # -# BR2_PACKAGE_SOCAT is not set +BR2_PACKAGE_SOCAT=y # BR2_PACKAGE_SOCKETCAND is not set # BR2_PACKAGE_SOFTETHER is not set # BR2_PACKAGE_SPAWN_FCGI is not set @@ -4667,7 +4948,8 @@ BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_MC is not set # BR2_PACKAGE_MG is not set # BR2_PACKAGE_MOST is not set -# BR2_PACKAGE_NANO is not set +BR2_PACKAGE_NANO=y +BR2_PACKAGE_NANO_TINY=y # BR2_PACKAGE_UEMACS is not set BR2_PACKAGE_VIM=y BR2_PACKAGE_VIM_RUNTIME=y diff --git a/README.md b/README.md index 0d77184..def98fa 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ disk installer (`mentalnet-install`). ## Current release -**R1 "FirstStorm"** — named after DECO*27's -*Chūlán ~First Storm~* (初嵐~First Storm~). +**R1 "LovePara"** — named after DECO*27's *ラブパラ (Love Para)*, +feat. Hatsune Miku. ## Versioning @@ -27,7 +27,8 @@ disk installer (`mentalnet-install`). | Release | Codename | Song | Notes | |---------|----------|------|-------| | R1 | Mesmerizer | *Mesmerizer* — 32ki (Hatsune Miku & Kasane Teto) | Initial release | -| R1 | **FirstStorm** | *Chūlán ~First Storm~ (初嵐~First Storm~)* — DECO*27 | **Current** — swap-free installer, true i586 support, terminal/input hardening, interrupt-storm fixes | +| R1 | FirstStorm | *Chūlán ~First Storm~ (初嵐~First Storm~)* — DECO*27 | Swap-free installer, true i586 support, terminal/input hardening, interrupt-storm fixes | +| R1 | **LovePara** | *ラブパラ (Love Para)* — DECO*27 feat. Hatsune Miku | **Current** — app-server stack (PHP/Ruby/Perl, php-fpm, lighttpd `/proxy/` → port 1337), tcc on-target C dev with glibc headers, gesftpserver, SiS 900 / VIA Rhine / Tigon3 NICs, fastfetch, nano, en_US.UTF-8 locale | ## Quick facts diff --git a/board/mentalnet/linux-slim.config b/board/mentalnet/linux-slim.config index df10e6d..1822f01 100644 --- a/board/mentalnet/linux-slim.config +++ b/board/mentalnet/linux-slim.config @@ -15,6 +15,15 @@ CONFIG_E1000=y CONFIG_E1000E=y CONFIG_NET_VENDOR_REALTEK=y CONFIG_8139TOO=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_TIGON3=y # Broadcom Gigabit (Essential for 2000s Dells/HPs) + +CONFIG_NET_VENDOR_VIA=y +CONFIG_VIA_RHINE=y # VIA Rhine 10/100 (Essential for early eMachines) + +CONFIG_NET_VENDOR_SIS=y +CONFIG_SIS900=y # SiS 900 10/100 (Common on bargain-bin 90s clone towers) + # QEMU/Proxmox present their rtl8139 emulation as an enhanced 8139C+ # chip (rev 0x20); 8139too defers those to the 8139cp driver. CONFIG_8139CP=y @@ -87,7 +96,6 @@ CONFIG_VGA_CONSOLE=y # CONFIG_NET_VENDOR_ARC is not set # CONFIG_NET_VENDOR_ASIX is not set # CONFIG_NET_VENDOR_ATHEROS is not set -# CONFIG_NET_VENDOR_BROADCOM is not set # CONFIG_NET_VENDOR_BROCADE is not set # CONFIG_NET_VENDOR_CADENCE is not set # CONFIG_NET_VENDOR_CAVIUM is not set @@ -128,7 +136,6 @@ CONFIG_VGA_CONSOLE=y # CONFIG_NET_VENDOR_SAMSUNG is not set # CONFIG_NET_VENDOR_SEEQ is not set # CONFIG_NET_VENDOR_SILAN is not set -# CONFIG_NET_VENDOR_SIS is not set # CONFIG_NET_VENDOR_SMSC is not set # CONFIG_NET_VENDOR_SOCIONEXT is not set # CONFIG_NET_VENDOR_SOLARFLARE is not set @@ -138,7 +145,6 @@ CONFIG_VGA_CONSOLE=y # CONFIG_NET_VENDOR_TEHUTI is not set # CONFIG_NET_VENDOR_TI is not set # CONFIG_NET_VENDOR_VERTEXCOM is not set -# CONFIG_NET_VENDOR_VIA is not set # CONFIG_NET_VENDOR_WANGXUN is not set # CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_NET_VENDOR_XILINX is not set diff --git a/board/mentalnet/overlay/etc/lighttpd/conf.d/proxy.conf b/board/mentalnet/overlay/etc/lighttpd/conf.d/proxy.conf new file mode 100644 index 0000000..96c7bce --- /dev/null +++ b/board/mentalnet/overlay/etc/lighttpd/conf.d/proxy.conf @@ -0,0 +1,16 @@ +## Copyright (C) 2026 Mark Robillard Jr (MARKMENTAL) +## SPDX-License-Identifier: GPL-3.0-or-later +# 1. You only need mod_proxy enabled for this +server.modules += ( "mod_proxy" ) + +# 2. Trap the /proxy/ prefix from the user's HTTP request, map the path, and forward it +# to the proxy passed application server +$HTTP["url"] =~ "^/proxy/" { + proxy.header = ( + "map-urlpath" => ( "/proxy/" => "/" ) + ) + proxy.server = ( + "" => ( ( "host" => "127.0.0.1", "port" => 1337 ) ) + ) +} + diff --git a/board/mentalnet/overlay/etc/lighttpd/modules.conf b/board/mentalnet/overlay/etc/lighttpd/modules.conf new file mode 100644 index 0000000..e5a0047 --- /dev/null +++ b/board/mentalnet/overlay/etc/lighttpd/modules.conf @@ -0,0 +1,176 @@ +## Copyright (C) 2026 Mark Robillard Jr (MARKMENTAL) +## SPDX-License-Identifier: GPL-3.0-or-later +####################################################################### +## +## Modules to load +## ----------------- +## +## Load only the modules needed in order to keep things simple. +## +## lighttpd automatically adds the following default modules +## to server.modules, if not explicitly listed in server.modules: +## "mod_indexfile", "mod_dirlisting", "mod_staticfile" +## +## You may disable automatic loading of default modules by setting +## server.compat-module-load = "disable" +## +## lighttpd provides many modules, and not all are listed below. Please see: +## https://wiki.lighttpd.net/Docs_ConfigurationOptions +## +## Modules, which are pulled in via conf.d/*.conf +## +## - mod_accesslog -> conf.d/access_log.conf +## - mod_deflate -> conf.d/deflate.conf +## - mod_status -> conf.d/status.conf +## - mod_webdav -> conf.d/webdav.conf +## - mod_evhost -> conf.d/evhost.conf +## - mod_simple_vhost -> conf.d/simple_vhost.conf +## - mod_userdir -> conf.d/userdir.conf +## - mod_rrdtool -> conf.d/rrdtool.conf +## - mod_ssi -> conf.d/ssi.conf +## - mod_cgi -> conf.d/cgi.conf +## - mod_scgi -> conf.d/scgi.conf +## - mod_fastcgi -> conf.d/fastcgi.conf +## - mod_proxy -> conf.d/proxy.conf +## - mod_expire -> conf.d/expire.conf +## +## NOTE: The order of modules in server.modules is important. +## +## Modules which gate requests (e.g. mod_access, mod_auth) or modify +## requests (e.g. mod_alias, mod_setenv) should be listed before +## modules which complete requests (e.g. mod_redirect, mod_rewrite), +## and which, in turn, should be listed before dynamic handlers +## (e.g. mod_cgi, mod_fastcgi, mod_proxy, mod_scgi, ...) +## +## Regardless of module order, modules operating on connections (e.g. TLS) +## operate on connections before modules which operate on requests. (There +## can be multiple requests per connection.) Similarly, regardless of module +## order, mod_rewrite and mod_extforward operate on requests before other +## request modules. +## +## DO NOT alphabetize modules. +## Alphabetizing may break expected functionality. See explanation above. +## + +server.modules += ( +# "mod_rewrite", + "mod_access", +# "mod_auth", +# "mod_authn_file", +# "mod_redirect", +# "mod_setenv", +# "mod_alias", +) + +## +####################################################################### + +####################################################################### +## +## Config for various Modules +## + +## +## TLS/SSL configuration +## +#include conf_dir + "/conf.d/tls.conf" + +## +## mod_expire +## +#include conf_dir + "/conf.d/expire.conf" + +## +## mod_deflate +## +#include conf_dir + "/conf.d/deflate.conf" + +## +## mod_magnet +## +#include conf_dir + "/conf.d/magnet.conf" + +## +## mod_ssi +## +#include conf_dir + "/conf.d/ssi.conf" + +## +## mod_status +## +#include conf_dir + "/conf.d/status.conf" + +## +## mod_webdav +## +#include conf_dir + "/conf.d/webdav.conf" + +## +## mod_userdir +## +#include conf_dir + "/conf.d/userdir.conf" + +## +## mod_rrdtool +## +#include conf_dir + "/conf.d/rrdtool.conf" + +## +####################################################################### + +####################################################################### +## +## CGI/proxy modules +## + +## +## mod_proxy +## +include conf_dir + "/conf.d/proxy.conf" + +## +## SCGI (mod_scgi) +## +#include conf_dir + "/conf.d/scgi.conf" + +## +## FastCGI (mod_fastcgi) +## +#include conf_dir + "/conf.d/fastcgi.conf" + +## +## plain old CGI (mod_cgi) +## +#include conf_dir + "/conf.d/cgi.conf" + +## +####################################################################### + +####################################################################### +## +## VHost Modules +## +## options to support many vhosts +## - none; virtual hosts (vhosts) are natively supported in lighttpd via +## lighttpd.conf conditionals $HTTP["host"] == "..." { ... } +## - mod_evhost +## - mod_simple_vhost +## - mod_vhostdb +## mod_vhostdb_dbi, mod_vhostdb_ldap, mod_vhostdb_mysql, mod_vhostdb_pgsql +## +## https://wiki.lighttpd.net/Docs_ConfigurationOptions +## + +## +## mod_evhost +## +#include conf_dir + "/conf.d/evhost.conf" + +## +## mod_simple_vhost +## +#include conf_dir + "/conf.d/simple_vhost.conf" + +## +####################################################################### + diff --git a/board/mentalnet/overlay/usr/bin/fastfetch b/board/mentalnet/overlay/usr/bin/fastfetch new file mode 100755 index 0000000000000000000000000000000000000000..56b67cccfc8b3a6735fab508440b643d22580950 GIT binary patch literal 2459768 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%0D~C9Vhm#hqgaBaSdJA~i7~9g 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 _5B)Qm)n=~O^vv}R&Gl;U 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

6G*``*V4Cy1&$ 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

u)3 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 iGYYG8RhT{hK2yLxU=&zVG!kF`Kc9g1aD$= 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

=EaB4p%T>D?rJ!)tUe!)Ih1{% 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�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

a{JyX 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%0Dcu>2A!KNICKBw5`fZ&Hq4 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 literal 0 HcmV?d00001 diff --git a/board/mentalnet/overlay/usr/include/a.out.h b/board/mentalnet/overlay/usr/include/a.out.h new file mode 100644 index 0000000..79df485 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/a.out.h @@ -0,0 +1,138 @@ +#ifndef __A_OUT_GNU_H__ +#define __A_OUT_GNU_H__ + +#include + +#define __GNU_EXEC_MACROS__ + +struct exec +{ + unsigned long a_info; /* Use macros N_MAGIC, etc for access. */ + unsigned int a_text; /* Length of text, in bytes. */ + unsigned int a_data; /* Length of data, in bytes. */ + unsigned int a_bss; /* Length of uninitialized data area for file, in bytes. */ + unsigned int a_syms; /* Length of symbol table data in file, in bytes. */ + unsigned int a_entry; /* Start address. */ + unsigned int a_trsize;/* Length of relocation info for text, in bytes. */ + unsigned int a_drsize;/* Length of relocation info for data, in bytes. */ +}; + +enum machine_type +{ + M_OLDSUN2 = 0, + M_68010 = 1, + M_68020 = 2, + M_SPARC = 3, + M_386 = 100, + M_MIPS1 = 151, + M_MIPS2 = 152 +}; + +#define N_MAGIC(exec) ((exec).a_info & 0xffff) +#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) +#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) +#define N_SET_INFO(exec, magic, type, flags) \ + ((exec).a_info = ((magic) & 0xffff) \ + | (((int)(type) & 0xff) << 16) \ + | (((flags) & 0xff) << 24)) +#define N_SET_MAGIC(exec, magic) \ + ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff)) +#define N_SET_MACHTYPE(exec, machtype) \ + ((exec).a_info = \ + ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) +#define N_SET_FLAGS(exec, flags) \ + ((exec).a_info = \ + ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) + +/* Code indicating object file or impure executable. */ +#define OMAGIC 0407 +/* Code indicating pure executable. */ +#define NMAGIC 0410 +/* Code indicating demand-paged executable. */ +#define ZMAGIC 0413 +/* This indicates a demand-paged executable with the header in the text. + The first page is unmapped to help trap NULL pointer references. */ +#define QMAGIC 0314 +/* Code indicating core file. */ +#define CMAGIC 0421 + +#define N_TRSIZE(a) ((a).a_trsize) +#define N_DRSIZE(a) ((a).a_drsize) +#define N_SYMSIZE(a) ((a).a_syms) +#define N_BADMAG(x) \ + (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC) +#define _N_HDROFF(x) (1024 - sizeof (struct exec)) +#define N_TXTOFF(x) \ + (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) \ + : (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec))) +#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) +#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) +#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) +#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) +#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) + +/* Address of text segment in memory after it is loaded. */ +#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? 4096 : 0) + +/* Address of data segment in memory after it is loaded. */ +#define SEGMENT_SIZE 1024 + +#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) +#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) + +#define N_DATADDR(x) \ + (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ + : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) +#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) + +#if !defined (N_NLIST_DECLARED) +struct nlist +{ + union + { + char *n_name; + struct nlist *n_next; + long n_strx; + } n_un; + unsigned char n_type; + char n_other; + short n_desc; + unsigned long n_value; +}; +#endif /* no N_NLIST_DECLARED. */ + +#define N_UNDF 0 +#define N_ABS 2 +#define N_TEXT 4 +#define N_DATA 6 +#define N_BSS 8 +#define N_FN 15 +#define N_EXT 1 +#define N_TYPE 036 +#define N_STAB 0340 +#define N_INDR 0xa +#define N_SETA 0x14 /* Absolute set element symbol. */ +#define N_SETT 0x16 /* Text set element symbol. */ +#define N_SETD 0x18 /* Data set element symbol. */ +#define N_SETB 0x1A /* Bss set element symbol. */ +#define N_SETV 0x1C /* Pointer to set vector in data area. */ + +#if !defined (N_RELOCATION_INFO_DECLARED) +/* This structure describes a single relocation to be performed. + The text-relocation section of the file is a vector of these structures, + all of which apply to the text section. + Likewise, the data-relocation section applies to the data section. */ + +struct relocation_info +{ + int r_address; + unsigned int r_symbolnum:24; + unsigned int r_pcrel:1; + unsigned int r_length:2; + unsigned int r_extern:1; + unsigned int r_pad:4; +}; +#endif /* no N_RELOCATION_INFO_DECLARED. */ + +#endif /* __A_OUT_GNU_H__ */ diff --git a/board/mentalnet/overlay/usr/include/aio.h b/board/mentalnet/overlay/usr/include/aio.h new file mode 100644 index 0000000..85db058 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/aio.h @@ -0,0 +1,253 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO/IEC 9945-1:1996 6.7: Asynchronous Input and Output + */ + +#ifndef _AIO_H +#define _AIO_H 1 + +#include +#include +#include +#include +#include + +__BEGIN_DECLS + +/* Asynchronous I/O control block. */ +struct aiocb +{ + int aio_fildes; /* File descriptor. */ + int aio_lio_opcode; /* Operation to be performed. */ + int aio_reqprio; /* Request priority offset. */ + volatile void *aio_buf; /* Location of buffer. */ + size_t aio_nbytes; /* Length of transfer. */ + struct sigevent aio_sigevent; /* Signal number and value. */ + + /* Internal members. */ + struct aiocb *__next_prio; + int __abs_prio; + int __policy; + int __error_code; + __ssize_t __return_value; + +#ifndef __USE_FILE_OFFSET64 + __off_t aio_offset; /* File offset. */ + char __pad[sizeof (__off64_t) - sizeof (__off_t)]; +#else + __off64_t aio_offset; /* File offset. */ +#endif + char __glibc_reserved[32]; +}; + +/* The same for the 64bit offsets. Please note that the members aio_fildes + to __return_value have to be the same in aiocb and aiocb64. */ +#ifdef __USE_LARGEFILE64 +struct aiocb64 +{ + int aio_fildes; /* File descriptor. */ + int aio_lio_opcode; /* Operation to be performed. */ + int aio_reqprio; /* Request priority offset. */ + volatile void *aio_buf; /* Location of buffer. */ + size_t aio_nbytes; /* Length of transfer. */ + struct sigevent aio_sigevent; /* Signal number and value. */ + + /* Internal members. */ + struct aiocb *__next_prio; + int __abs_prio; + int __policy; + int __error_code; + __ssize_t __return_value; + + __off64_t aio_offset; /* File offset. */ + char __glibc_reserved[32]; +}; +#endif + + +#ifdef __USE_GNU +/* To optimize the implementation one can use the following struct. */ +struct aioinit + { + int aio_threads; /* Maximum number of threads. */ + int aio_num; /* Number of expected simultaneous requests. */ + int aio_locks; /* Not used. */ + int aio_usedba; /* Not used. */ + int aio_debug; /* Not used. */ + int aio_numusers; /* Not used. */ + int aio_idle_time; /* Number of seconds before idle thread + terminates. */ + int aio_reserved; + }; +#endif + + +/* Return values of the aio_cancel function. */ +enum +{ + AIO_CANCELED, +#define AIO_CANCELED AIO_CANCELED + AIO_NOTCANCELED, +#define AIO_NOTCANCELED AIO_NOTCANCELED + AIO_ALLDONE +#define AIO_ALLDONE AIO_ALLDONE +}; + + +/* Operation codes for `aio_lio_opcode'. */ +enum +{ + LIO_READ, +#define LIO_READ LIO_READ + LIO_WRITE, +#define LIO_WRITE LIO_WRITE + LIO_NOP +#define LIO_NOP LIO_NOP +}; + + +/* Synchronization options for `lio_listio' function. */ +enum +{ + LIO_WAIT, +#define LIO_WAIT LIO_WAIT + LIO_NOWAIT +#define LIO_NOWAIT LIO_NOWAIT +}; + + +/* Allow user to specify optimization. */ +#ifdef __USE_GNU +extern void aio_init (const struct aioinit *__init) __THROW __nonnull ((1)); +#endif + + +#ifndef __USE_FILE_OFFSET64 +/* Enqueue read request for given number of bytes and the given priority. */ +extern int aio_read (struct aiocb *__aiocbp) __THROW __nonnull ((1)); +/* Enqueue write request for given number of bytes and the given priority. */ +extern int aio_write (struct aiocb *__aiocbp) __THROW __nonnull ((1)); + +/* Initiate list of I/O requests. */ +extern int lio_listio (int __mode, + struct aiocb *const __list[__restrict_arr], + int __nent, struct sigevent *__restrict __sig) + __THROW __nonnull ((2)); + +/* Retrieve error status associated with AIOCBP. */ +extern int aio_error (const struct aiocb *__aiocbp) __THROW __nonnull ((1)); +/* Return status associated with AIOCBP. */ +extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW __nonnull ((1)); + +/* Try to cancel asynchronous I/O requests outstanding against file + descriptor FILDES. */ +extern int aio_cancel (int __fildes, struct aiocb *__aiocbp) __THROW; + +/* Suspend calling thread until at least one of the asynchronous I/O + operations referenced by LIST has completed. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int aio_suspend (const struct aiocb *const __list[], int __nent, + const struct timespec *__restrict __timeout) + __nonnull ((1)); + +/* Force all operations associated with file descriptor described by + `aio_fildes' member of AIOCBP. */ +extern int aio_fsync (int __operation, struct aiocb *__aiocbp) + __THROW __nonnull ((2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64) + __nonnull ((1)); +extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64) + __nonnull ((1)); + +extern int __REDIRECT_NTH (lio_listio, + (int __mode, + struct aiocb *const __list[__restrict_arr], + int __nent, struct sigevent *__restrict __sig), + lio_listio64) __nonnull ((2)); + +extern int __REDIRECT_NTH (aio_error, (const struct aiocb *__aiocbp), + aio_error64) __nonnull ((1)); +extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp), + aio_return64) __nonnull ((1)); + +extern int __REDIRECT_NTH (aio_cancel, + (int __fildes, struct aiocb *__aiocbp), + aio_cancel64); +# ifdef __USE_TIME64_REDIRECTS +extern int __REDIRECT_NTH (aio_suspend, + (const struct aiocb *const __list[], int __nent, + const struct timespec *__restrict __timeout), + __aio_suspend_time64) __nonnull ((1)); +# else +extern int __REDIRECT_NTH (aio_suspend, + (const struct aiocb *const __list[], int __nent, + const struct timespec *__restrict __timeout), + aio_suspend64) __nonnull ((1)); +# endif +extern int __REDIRECT_NTH (aio_fsync, + (int __operation, struct aiocb *__aiocbp), + aio_fsync64) __nonnull ((2)); + +# else +# define aio_read aio_read64 +# define aio_write aio_write64 +# define lio_listio lio_listio64 +# define aio_error aio_error64 +# define aio_return aio_return64 +# define aio_cancel aio_cancel64 +# ifdef __USE_TIME64_REDIRECTS +# define aio_suspend __aio_suspend_time64 +# else +# define aio_suspend aio_suspend64 +# endif +# define aio_fsync aio_fsync64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1)); +extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1)); + +extern int lio_listio64 (int __mode, + struct aiocb64 *const __list[__restrict_arr], + int __nent, struct sigevent *__restrict __sig) + __THROW __nonnull ((2)); + +extern int aio_error64 (const struct aiocb64 *__aiocbp) + __THROW __nonnull ((1)); +extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp) + __THROW __nonnull ((1)); + +extern int aio_cancel64 (int __fildes, struct aiocb64 *__aiocbp) __THROW; + +extern int aio_suspend64 (const struct aiocb64 *const __list[], int __nent, + const struct timespec *__restrict __timeout) + __THROW __nonnull ((1)); + +extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp) + __THROW __nonnull ((2)); +#endif + +__END_DECLS + +#endif /* aio.h */ diff --git a/board/mentalnet/overlay/usr/include/aliases.h b/board/mentalnet/overlay/usr/include/aliases.h new file mode 100644 index 0000000..3b6b45a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/aliases.h @@ -0,0 +1,63 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ALIASES_H +#define _ALIASES_H 1 + +#include + +#include + + +__BEGIN_DECLS + +/* Structure to represent one entry of the alias database. */ +struct aliasent + { + char *alias_name; + size_t alias_members_len; + char **alias_members; + int alias_local; + }; + + +/* Open alias data base files. */ +extern void setaliasent (void) __THROW; + +/* Close alias database files. */ +extern void endaliasent (void) __THROW; + +/* Get the next entry from the alias database. */ +extern struct aliasent *getaliasent (void) __THROW; + +/* Get the next entry from the alias database and put it in RESULT_BUF. */ +extern int getaliasent_r (struct aliasent *__restrict __result_buf, + char *__restrict __buffer, size_t __buflen, + struct aliasent **__restrict __result) __THROW; + +/* Get alias entry corresponding to NAME. */ +extern struct aliasent *getaliasbyname (const char *__name) __THROW; + +/* Get alias entry corresponding to NAME and put it in RESULT_BUF. */ +extern int getaliasbyname_r (const char *__restrict __name, + struct aliasent *__restrict __result_buf, + char *__restrict __buffer, size_t __buflen, + struct aliasent **__restrict __result) __THROW; + +__END_DECLS + +#endif /* aliases.h */ diff --git a/board/mentalnet/overlay/usr/include/alloca.h b/board/mentalnet/overlay/usr/include/alloca.h new file mode 100644 index 0000000..ec36f82 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/alloca.h @@ -0,0 +1,40 @@ +/* Copyright (C) 1992-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ALLOCA_H +#define _ALLOCA_H 1 + +#include + +#define __need_size_t +#include + +__BEGIN_DECLS + +/* Remove any previous definition. */ +#undef alloca + +/* Allocate a block that will be freed when the calling function exits. */ +extern void *alloca (size_t __size) __THROW; + +#ifdef __GNUC__ +# define alloca(size) __builtin_alloca (size) +#endif /* GCC. */ + +__END_DECLS + +#endif /* alloca.h */ diff --git a/board/mentalnet/overlay/usr/include/ar.h b/board/mentalnet/overlay/usr/include/ar.h new file mode 100644 index 0000000..b7286a7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/ar.h @@ -0,0 +1,47 @@ +/* Header describing `ar' archive file format. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _AR_H +#define _AR_H 1 + +#include + +/* Archive files start with the ARMAG identifying string. Then follows a + `struct ar_hdr', and as many bytes of member file data as its `ar_size' + member indicates, for each member file. */ + +#define ARMAG "!\n" /* String that begins an archive file. */ +#define SARMAG 8 /* Size of that string. */ + +#define ARFMAG "`\n" /* String in ar_fmag at end of each header. */ + +__BEGIN_DECLS + +struct ar_hdr + { + char ar_name[16]; /* Member file name, sometimes / terminated. */ + char ar_date[12]; /* File date, decimal seconds since Epoch. */ + char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */ + char ar_mode[8]; /* File mode, in ASCII octal. */ + char ar_size[10]; /* File size, in ASCII decimal. */ + char ar_fmag[2]; /* Always contains ARFMAG. */ + }; + +__END_DECLS + +#endif /* ar.h */ diff --git a/board/mentalnet/overlay/usr/include/argp.h b/board/mentalnet/overlay/usr/include/argp.h new file mode 100644 index 0000000..4967c87 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/argp.h @@ -0,0 +1,564 @@ +/* Hierarchical argument parsing, layered over getopt. + Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ARGP_H +#define _ARGP_H + +#include +#include +#include +#include +#include + +__BEGIN_DECLS + +/* error_t may or may not be available from errno.h, depending on the + operating system. */ +#ifndef __error_t_defined +# define __error_t_defined 1 +typedef int error_t; +#endif + +/* A description of a particular option. A pointer to an array of + these is passed in the OPTIONS field of an argp structure. Each option + entry can correspond to one long option and/or one short option; more + names for the same option can be added by following an entry in an option + array with options having the OPTION_ALIAS flag set. */ +struct argp_option +{ + /* The long option name. For more than one name for the same option, you + can use following options with the OPTION_ALIAS flag set. */ + const char *name; + + /* What key is returned for this option. If > 0 and printable, then it's + also accepted as a short option. */ + int key; + + /* If non-NULL, this is the name of the argument associated with this + option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ + const char *arg; + + /* OPTION_ flags. */ + int flags; + + /* The doc string for this option. If both NAME and KEY are 0, This string + will be printed outdented from the normal option column, making it + useful as a group header (it will be the first thing printed in its + group); in this usage, it's conventional to end the string with a `:'. */ + const char *doc; + + /* The group this option is in. In a long help message, options are sorted + alphabetically within each group, and the groups presented in the order + 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with + if this field 0 will inherit the group number of the previous entry, or + zero if it's the first one, unless its a group header (NAME and KEY both + 0), in which case, the previous entry + 1 is the default. Automagic + options such as --help are put into group -1. */ + int group; +}; + +/* The argument associated with this option is optional. */ +#define OPTION_ARG_OPTIONAL 0x1 + +/* This option isn't displayed in any help messages. */ +#define OPTION_HIDDEN 0x2 + +/* This option is an alias for the closest previous non-alias option. This + means that it will be displayed in the same help entry, and will inherit + fields other than NAME and KEY from the aliased option. */ +#define OPTION_ALIAS 0x4 + +/* This option isn't actually an option (and so should be ignored by the + actual option parser), but rather an arbitrary piece of documentation that + should be displayed in much the same manner as the options. If this flag + is set, then the option NAME field is displayed unmodified (e.g., no `--' + prefix is added) at the left-margin (where a *short* option would normally + be displayed), and the documentation string in the normal place. For + purposes of sorting, any leading whitespace and punctuation is ignored, + except that if the first non-whitespace character is not `-', this entry + is displayed after all options (and OPTION_DOC entries with a leading `-') + in the same group. */ +#define OPTION_DOC 0x8 + +/* This option shouldn't be included in `long' usage messages (but is still + included in help messages). This is mainly intended for options that are + completely documented in an argp's ARGS_DOC field, in which case including + the option in the generic usage list would be redundant. For instance, + if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to + distinguish these two cases, -x should probably be marked + OPTION_NO_USAGE. */ +#define OPTION_NO_USAGE 0x10 + +struct argp; /* fwd declare this type */ +struct argp_state; /* " */ +struct argp_child; /* " */ + +/* The type of a pointer to an argp parsing function. */ +typedef error_t (*argp_parser_t) (int __key, char *__arg, + struct argp_state *__state); + +/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such + returns will simply be ignored. For user keys, this error will be turned + into EINVAL (if the call to argp_parse is such that errors are propagated + back to the user instead of exiting); returning EINVAL itself would result + in an immediate stop to parsing in *all* cases. */ +#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ + +/* Special values for the KEY argument to an argument parsing function. + ARGP_ERR_UNKNOWN should be returned if they aren't understood. + + The sequence of keys to a parsing function is either (where each + uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key): + + INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all + or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed + or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized + + The third case is where every parser returned ARGP_KEY_UNKNOWN for an + argument, in which case parsing stops at that argument (returning the + unparsed arguments to the caller of argp_parse if requested, or stopping + with an error message if not). + + If an error occurs (either detected by argp, or because the parsing + function returned an error value), then the parser is called with + ARGP_KEY_ERROR, and no further calls are made. */ + +/* This is not an option at all, but rather a command line argument. If a + parser receiving this key returns success, the fact is recorded, and the + ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the + argument, a parser function decrements the NEXT field of the state it's + passed, the option won't be considered processed; this is to allow you to + actually modify the argument (perhaps into an option), and have it + processed again. */ +#define ARGP_KEY_ARG 0 +/* There are remaining arguments not parsed by any parser, which may be found + starting at (STATE->argv + STATE->next). If success is returned, but + STATE->next left untouched, it's assumed that all arguments were consume, + otherwise, the parser should adjust STATE->next to reflect any arguments + consumed. */ +#define ARGP_KEY_ARGS 0x1000006 +/* There are no more command line arguments at all. */ +#define ARGP_KEY_END 0x1000001 +/* Because it's common to want to do some special processing if there aren't + any non-option args, user parsers are called with this key if they didn't + successfully process any non-option arguments. Called just before + ARGP_KEY_END (where more general validity checks on previously parsed + arguments can take place). */ +#define ARGP_KEY_NO_ARGS 0x1000002 +/* Passed in before any parsing is done. Afterwards, the values of each + element of the CHILD_INPUT field, if any, in the state structure is + copied to each child's state to be the initial value of the INPUT field. */ +#define ARGP_KEY_INIT 0x1000003 +/* Use after all other keys, including SUCCESS & END. */ +#define ARGP_KEY_FINI 0x1000007 +/* Passed in when parsing has successfully been completed (even if there are + still arguments remaining). */ +#define ARGP_KEY_SUCCESS 0x1000004 +/* Passed in if an error occurs. */ +#define ARGP_KEY_ERROR 0x1000005 + +/* An argp structure contains a set of options declarations, a function to + deal with parsing one, documentation string, a possible vector of child + argp's, and perhaps a function to filter help output. When actually + parsing options, getopt is called with the union of all the argp + structures chained together through their CHILD pointers, with conflicts + being resolved in favor of the first occurrence in the chain. */ +struct argp +{ + /* An array of argp_option structures, terminated by an entry with both + NAME and KEY having a value of 0. */ + const struct argp_option *options; + + /* What to do with an option from this structure. KEY is the key + associated with the option, and ARG is any associated argument (NULL if + none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be + returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then + parsing is stopped immediately, and that value is returned from + argp_parse(). For special (non-user-supplied) values of KEY, see the + ARGP_KEY_ definitions below. */ + argp_parser_t parser; + + /* A string describing what other arguments are wanted by this program. It + is only used by argp_usage to print the `Usage:' message. If it + contains newlines, the strings separated by them are considered + alternative usage patterns, and printed on separate lines (lines after + the first are prefix by ` or: ' instead of `Usage:'). */ + const char *args_doc; + + /* If non-NULL, a string containing extra text to be printed before and + after the options in a long help message (separated by a vertical tab + `\v' character). */ + const char *doc; + + /* A vector of argp_children structures, terminated by a member with a 0 + argp field, pointing to child argps should be parsed with this one. Any + conflicts are resolved in favor of this argp, or early argps in the + CHILDREN list. This field is useful if you use libraries that supply + their own argp structure, which you want to use in conjunction with your + own. */ + const struct argp_child *children; + + /* If non-zero, this should be a function to filter the output of help + messages. KEY is either a key from an option, in which case TEXT is + that option's help text, or a special key from the ARGP_KEY_HELP_ + defines, below, describing which other help text TEXT is. The function + should return either TEXT, if it should be used as-is, a replacement + string, which should be malloced, and will be freed by argp, or NULL, + meaning `print nothing'. The value for TEXT is *after* any translation + has been done, so if any of the replacement text also needs translation, + that should be done by the filter function. INPUT is either the input + supplied to argp_parse, or NULL, if argp_help was called directly. */ + char *(*help_filter) (int __key, const char *__text, void *__input); + + /* If non-zero the strings used in the argp library are translated using + the domain described by this string. Otherwise the currently installed + default domain is used. */ + const char *argp_domain; +}; + +/* Possible KEY arguments to a help filter function. */ +#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ +#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ +#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ +#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; + TEXT is NULL for this key. */ +/* Explanatory note emitted when duplicate option arguments have been + suppressed. */ +#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 +#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ + +/* When an argp has a non-zero CHILDREN field, it should point to a vector of + argp_child structures, each of which describes a subsidiary argp. */ +struct argp_child +{ + /* The child parser. */ + const struct argp *argp; + + /* Flags for this child. */ + int flags; + + /* If non-zero, an optional header to be printed in help output before the + child options. As a side-effect, a non-zero value forces the child + options to be grouped together; to achieve this effect without actually + printing a header string, use a value of "". */ + const char *header; + + /* Where to group the child options relative to the other (`consolidated') + options in the parent argp; the values are the same as the GROUP field + in argp_option structs, but all child-groupings follow parent options at + a particular group level. If both this field and HEADER are zero, then + they aren't grouped at all, but rather merged with the parent options + (merging the child's grouping levels with the parents). */ + int group; +}; + +/* Parsing state. This is provided to parsing functions called by argp, + which may examine and, as noted, modify fields. */ +struct argp_state +{ + /* The top level ARGP being parsed. */ + const struct argp *root_argp; + + /* The argument vector being parsed. May be modified. */ + int argc; + char **argv; + + /* The index in ARGV of the next arg that to be parsed. May be modified. */ + int next; + + /* The flags supplied to argp_parse. May be modified. */ + unsigned flags; + + /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the + number of the current arg, starting at zero, and incremented after each + such call returns. At all other times, this is the number of such + arguments that have been processed. */ + unsigned arg_num; + + /* If non-zero, the index in ARGV of the first argument following a special + `--' argument (which prevents anything following being interpreted as an + option). Only set once argument parsing has proceeded past this point. */ + int quoted; + + /* An arbitrary pointer passed in from the user. */ + void *input; + /* Values to pass to child parsers. This vector will be the same length as + the number of children for the current parser. */ + void **child_inputs; + + /* For the parser's use. Initialized to 0. */ + void *hook; + + /* The name used when printing messages. This is initialized to ARGV[0], + or PROGRAM_INVOCATION_NAME if that is unavailable. */ + char *name; + + /* Streams used when argp prints something. */ + FILE *err_stream; /* For errors; initialized to stderr. */ + FILE *out_stream; /* For information; initialized to stdout. */ + + void *pstate; /* Private, for use by argp. */ +}; + +/* Flags for argp_parse (note that the defaults are those that are + convenient for program command line parsing): */ + +/* Don't ignore the first element of ARGV. Normally (and always unless + ARGP_NO_ERRS is set) the first element of the argument vector is + skipped for option parsing purposes, as it corresponds to the program name + in a command line. */ +#define ARGP_PARSE_ARGV0 0x01 + +/* Don't print error messages for unknown options to stderr; unless this flag + is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program + name in the error messages. This flag implies ARGP_NO_EXIT (on the + assumption that silent exiting upon errors is bad behaviour). */ +#define ARGP_NO_ERRS 0x02 + +/* Don't parse any non-option args. Normally non-option args are parsed by + calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg + as the value. Since it's impossible to know which parse function wants to + handle it, each one is called in turn, until one returns 0 or an error + other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the + argp_parse returns prematurely (but with a return value of 0). If all + args have been parsed without error, all parsing functions are called one + last time with a key of ARGP_KEY_END. This flag needn't normally be set, + as the normal behavior is to stop parsing as soon as some argument can't + be handled. */ +#define ARGP_NO_ARGS 0x04 + +/* Parse options and arguments in the same order they occur on the command + line -- normally they're rearranged so that all options come first. */ +#define ARGP_IN_ORDER 0x08 + +/* Don't provide the standard long option --help, which causes usage and + option help information to be output to stdout, and exit (0) called. */ +#define ARGP_NO_HELP 0x10 + +/* Don't exit on errors (they may still result in error messages). */ +#define ARGP_NO_EXIT 0x20 + +/* Use the gnu getopt `long-only' rules for parsing arguments. */ +#define ARGP_LONG_ONLY 0x40 + +/* Turns off any message-printing/exiting options. */ +#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) + +/* Parse the options strings in ARGC & ARGV according to the options in ARGP. + FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the + index in ARGV of the first unparsed option is returned in it. If an + unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser + routine returned a non-zero value, it is returned; otherwise 0 is + returned. This function may also call exit unless the ARGP_NO_HELP flag + is set. INPUT is a pointer to a value to be passed in to the parser. */ +extern error_t argp_parse (const struct argp *__restrict __argp, + int __argc, char **__restrict __argv, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); +extern error_t __argp_parse (const struct argp *__restrict __argp, + int __argc, char **__restrict __argv, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); + +/* Global variables. */ + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + will print this string followed by a newline and exit (unless the + ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ +extern const char *argp_program_version; + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + calls this function with a stream to print the version to and a pointer to + the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is + used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ +extern void (*argp_program_version_hook) (FILE *__restrict __stream, + struct argp_state *__restrict + __state); + +/* If defined or set by the user program, it should point to string that is + the bug-reporting address for the program. It will be printed by + argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various + standard help messages), embedded in a sentence that says something like + `Report bugs to ADDR.'. */ +extern const char *argp_program_bug_address; + +/* The exit status that argp will use when exiting due to a parsing error. + If not defined or set by the user program, this defaults to EX_USAGE from + . */ +extern error_t argp_err_exit_status; + +/* Flags for argp_help. */ +#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ +#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ +#define ARGP_HELP_SEE 0x04 /* a `Try ... for more help' message. */ +#define ARGP_HELP_LONG 0x08 /* a long help message. */ +#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ +#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ +#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) +#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ +#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to + reflect ARGP_LONG_ONLY mode. */ + +/* These ARGP_HELP flags are only understood by argp_state_help. */ +#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ +#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ + +/* The standard thing to do after a program command line parsing error, if an + error message has already been printed. */ +#define ARGP_HELP_STD_ERR \ + (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do after a program command line parsing error, if no + more specific error message has been printed. */ +#define ARGP_HELP_STD_USAGE \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do in response to a --help option. */ +#define ARGP_HELP_STD_HELP \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ + | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) + +/* Output a usage message for ARGP to STREAM. FLAGS are from the set + ARGP_HELP_*. */ +extern void argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, + unsigned __flags, char *__restrict __name); +extern void __argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, unsigned __flags, + char *__name); + +/* The following routines are intended to be called from within an argp + parsing routine (thus taking an argp_state structure as the first + argument). They may or may not print an error message and exit, depending + on the flags in STATE -- in any case, the caller should be prepared for + them *not* to exit, and should return an appropriate error after calling + them. [argp_usage & argp_error should probably be called argp_state_..., + but they're used often enough that they should be short] */ + +/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are + from the set ARGP_HELP_*. */ +extern void argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); +extern void __argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); + +/* Possibly output the standard usage message for ARGP to stderr and exit. */ +extern void argp_usage (const struct argp_state *__state); +extern void __argp_usage (const struct argp_state *__state); + +/* If appropriate, print the printf string FMT and following args, preceded + by the program name and `:', to stderr, and followed by a `Try ... --help' + message, then exit (1). */ +extern void argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +extern void __argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + +/* Similar to the standard gnu error-reporting function error(), but will + respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print + to STATE->err_stream. This is useful for argument parsing code that is + shared between program startup (when exiting is desired) and runtime + option parsing (when typically an error code is returned instead). The + difference between this function and argp_error is that the latter is for + *parsing errors*, and the former is for other problems that occur during + parsing but don't reflect a (syntactic) problem with the input. */ +extern void argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 4, 5))); +extern void __argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 4, 5))); + +/* Returns true if the option OPT is a valid short option. */ +extern int _option_is_short (const struct argp_option *__opt) __THROW; +extern int __option_is_short (const struct argp_option *__opt) __THROW; + +/* Returns true if the option OPT is in fact the last (unused) entry in an + options array. */ +extern int _option_is_end (const struct argp_option *__opt) __THROW; +extern int __option_is_end (const struct argp_option *__opt) __THROW; + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +extern void *_argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; +extern void *__argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; + +#ifdef __USE_EXTERN_INLINES + +# if !(defined _LIBC && _LIBC) +# define __argp_usage argp_usage +# define __argp_state_help argp_state_help +# define __option_is_short _option_is_short +# define __option_is_end _option_is_end +# endif + +# ifndef ARGP_EI +# define ARGP_EI __extern_inline +# endif + +ARGP_EI void +__argp_usage (const struct argp_state *__state) +{ + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); +} + +ARGP_EI int +__NTH (__option_is_short (const struct argp_option *__opt)) +{ + if (__opt->flags & OPTION_DOC) + return 0; + else + { + int __key = __opt->key; + return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } +} + +ARGP_EI int +__NTH (__option_is_end (const struct argp_option *__opt)) +{ + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; +} + +# if !(defined _LIBC && _LIBC) +# undef __argp_usage +# undef __argp_state_help +# undef __option_is_short +# undef __option_is_end +# endif +#endif /* Use extern inlines. */ + +#include +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +__END_DECLS + +#endif /* argp.h */ diff --git a/board/mentalnet/overlay/usr/include/argz.h b/board/mentalnet/overlay/usr/include/argz.h new file mode 100644 index 0000000..57300ec --- /dev/null +++ b/board/mentalnet/overlay/usr/include/argz.h @@ -0,0 +1,156 @@ +/* Routines for dealing with '\0' separated arg vectors. + Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ARGZ_H +#define _ARGZ_H 1 + +#include +#include +#include /* Need size_t, and strchr is called below. */ + +__BEGIN_DECLS + +/* error_t may or may not be available from errno.h, depending on the + operating system. */ +#ifndef __error_t_defined +# define __error_t_defined 1 +typedef int error_t; +#endif + +/* Make a '\0' separated arg vector from a unix argv vector, returning it in + ARGZ, and the total length in LEN. If a memory allocation error occurs, + ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ +extern error_t __argz_create (char *const __argv[], char **__restrict __argz, + size_t *__restrict __len) __THROW; +extern error_t argz_create (char *const __argv[], char **__restrict __argz, + size_t *__restrict __len) __THROW; + +/* Make a '\0' separated arg vector from a SEP separated list in + STRING, returning it in ARGZ, and the total length in LEN. If a + memory allocation error occurs, ENOMEM is returned, otherwise 0. + The result can be destroyed using free. */ +extern error_t argz_create_sep (const char *__restrict __string, + int __sep, char **__restrict __argz, + size_t *__restrict __len) __THROW; + +/* Returns the number of strings in ARGZ. */ +extern size_t __argz_count (const char *__argz, size_t __len) + __THROW __attribute_pure__; +extern size_t argz_count (const char *__argz, size_t __len) + __THROW __attribute_pure__; + +/* Puts pointers to each string in ARGZ into ARGV, which must be large enough + to hold them all. */ +extern void __argz_extract (const char *__restrict __argz, size_t __len, + char **__restrict __argv) __THROW; +extern void argz_extract (const char *__restrict __argz, size_t __len, + char **__restrict __argv) __THROW; + +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into the character SEP. */ +extern void __argz_stringify (char *__argz, size_t __len, int __sep) __THROW; +extern void argz_stringify (char *__argz, size_t __len, int __sep) __THROW; + +/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ +extern error_t argz_append (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __buf, size_t __buf_len) + __THROW; + +/* Append STR to the argz vector in ARGZ & ARGZ_LEN. */ +extern error_t argz_add (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __str) __THROW; + +/* Append SEP separated list in STRING to the argz vector in ARGZ & + ARGZ_LEN. */ +extern error_t argz_add_sep (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __string, int __delim) + __THROW; + +/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there. */ +extern void argz_delete (char **__restrict __argz, + size_t *__restrict __argz_len, + char *__restrict __entry) __THROW; + +/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an + existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. + Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, + ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not + in ARGZ, EINVAL is returned, else if memory can't be allocated for the new + ARGZ, ENOMEM is returned, else 0. */ +extern error_t argz_insert (char **__restrict __argz, + size_t *__restrict __argz_len, + char *__restrict __before, + const char *__restrict __entry) __THROW; + +/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating + ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be + incremented by number of replacements performed. */ +extern error_t argz_replace (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __str, + const char *__restrict __with, + unsigned int *__restrict __replace_count); + +/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there + are no more. If entry is NULL, then the first entry is returned. This + behavior allows two convenient iteration styles: + + char *entry = 0; + while ((entry = argz_next (argz, argz_len, entry))) + ...; + + or + + char *entry; + for (entry = argz; entry; entry = argz_next (argz, argz_len, entry)) + ...; +*/ +extern char *__argz_next (const char *__restrict __argz, size_t __argz_len, + const char *__restrict __entry) __THROW; +extern char *argz_next (const char *__restrict __argz, size_t __argz_len, + const char *__restrict __entry) __THROW; + +#ifdef __USE_EXTERN_INLINES +__extern_inline char * +__NTH (__argz_next (const char *__argz, size_t __argz_len, + const char *__entry)) +{ + if (__entry) + { + if (__entry < __argz + __argz_len) + __entry = strchr (__entry, '\0') + 1; + + return __entry >= __argz + __argz_len ? (char *) NULL : (char *) __entry; + } + else + return __argz_len > 0 ? (char *) __argz : NULL; +} +__extern_inline char * +__NTH (argz_next (const char *__argz, size_t __argz_len, + const char *__entry)) +{ + return __argz_next (__argz, __argz_len, __entry); +} +#endif /* Use extern inlines. */ + +__END_DECLS + +#endif /* argz.h */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/auxvec.h b/board/mentalnet/overlay/usr/include/asm-generic/auxvec.h new file mode 100644 index 0000000..b99573b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/auxvec.h @@ -0,0 +1,8 @@ +#ifndef __ASM_GENERIC_AUXVEC_H +#define __ASM_GENERIC_AUXVEC_H +/* + * Not all architectures need their own auxvec.h, the most + * common definitions are already in linux/auxvec.h. + */ + +#endif /* __ASM_GENERIC_AUXVEC_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/bitsperlong.h b/board/mentalnet/overlay/usr/include/asm-generic/bitsperlong.h new file mode 100644 index 0000000..1fb4f0c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/bitsperlong.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_BITS_PER_LONG +#define __ASM_GENERIC_BITS_PER_LONG + +#ifndef __BITS_PER_LONG +/* + * In order to keep safe and avoid regression, only unify uapi + * bitsperlong.h for some archs which are using newer toolchains + * that have the definitions of __CHAR_BIT__ and __SIZEOF_LONG__. + * See the following link for more info: + * https://lore.kernel.org/linux-arch/b9624545-2c80-49a1-ac3c-39264a591f7b@app.fastmail.com/ + */ +#if defined(__CHAR_BIT__) && defined(__SIZEOF_LONG__) +#define __BITS_PER_LONG (__CHAR_BIT__ * __SIZEOF_LONG__) +#else +/* + * There seems to be no way of detecting this automatically from user + * space, so 64 bit architectures should override this in their + * bitsperlong.h. In particular, an architecture that supports + * both 32 and 64 bit user space must not rely on CONFIG_64BIT + * to decide it, but rather check a compiler provided macro. + */ +#define __BITS_PER_LONG 32 +#endif +#endif + +#ifndef __BITS_PER_LONG_LONG +#define __BITS_PER_LONG_LONG 64 +#endif + +#endif /* __ASM_GENERIC_BITS_PER_LONG */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/bpf_perf_event.h b/board/mentalnet/overlay/usr/include/asm-generic/bpf_perf_event.h new file mode 100644 index 0000000..29fbc11 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/bpf_perf_event.h @@ -0,0 +1,9 @@ +#ifndef __ASM_GENERIC_BPF_PERF_EVENT_H__ +#define __ASM_GENERIC_BPF_PERF_EVENT_H__ + +#include + +/* Export kernel pt_regs structure */ +typedef struct pt_regs bpf_user_pt_regs_t; + +#endif /* __ASM_GENERIC_BPF_PERF_EVENT_H__ */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/errno-base.h b/board/mentalnet/overlay/usr/include/asm-generic/errno-base.h new file mode 100644 index 0000000..9653140 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/errno-base.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_ERRNO_BASE_H +#define _ASM_GENERIC_ERRNO_BASE_H + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Argument list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ + +#endif diff --git a/board/mentalnet/overlay/usr/include/asm-generic/errno.h b/board/mentalnet/overlay/usr/include/asm-generic/errno.h new file mode 100644 index 0000000..cf9c51a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/errno.h @@ -0,0 +1,123 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_ERRNO_H +#define _ASM_GENERIC_ERRNO_H + +#include + +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ + +/* + * This error code is special: arch syscall entry code will return + * -ENOSYS if users try to call a syscall that doesn't exist. To keep + * failures of syscalls that really do exist distinguishable from + * failures due to attempts to use a nonexistent syscall, syscall + * implementations should refrain from returning -ENOSYS. + */ +#define ENOSYS 38 /* Invalid system call number */ + +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ +#define ECANCELED 125 /* Operation Canceled */ +#define ENOKEY 126 /* Required key not available */ +#define EKEYEXPIRED 127 /* Key has expired */ +#define EKEYREVOKED 128 /* Key has been revoked */ +#define EKEYREJECTED 129 /* Key was rejected by service */ + +/* for robust mutexes */ +#define EOWNERDEAD 130 /* Owner died */ +#define ENOTRECOVERABLE 131 /* State not recoverable */ + +#define ERFKILL 132 /* Operation not possible due to RF-kill */ + +#define EHWPOISON 133 /* Memory page has hardware error */ + +#endif diff --git a/board/mentalnet/overlay/usr/include/asm-generic/fcntl.h b/board/mentalnet/overlay/usr/include/asm-generic/fcntl.h new file mode 100644 index 0000000..80f37a0 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/fcntl.h @@ -0,0 +1,221 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_FCNTL_H +#define _ASM_GENERIC_FCNTL_H + +#include + +/* + * FMODE_EXEC is 0x20 + * FMODE_NONOTIFY is 0x4000000 + * These cannot be used by userspace O_* until internal and external open + * flags are split. + * -Eric Paris + */ + +/* + * When introducing new O_* bits, please check its uniqueness in fcntl_init(). + */ + +#define O_ACCMODE 00000003 +#define O_RDONLY 00000000 +#define O_WRONLY 00000001 +#define O_RDWR 00000002 +#ifndef O_CREAT +#define O_CREAT 00000100 /* not fcntl */ +#endif +#ifndef O_EXCL +#define O_EXCL 00000200 /* not fcntl */ +#endif +#ifndef O_NOCTTY +#define O_NOCTTY 00000400 /* not fcntl */ +#endif +#ifndef O_TRUNC +#define O_TRUNC 00001000 /* not fcntl */ +#endif +#ifndef O_APPEND +#define O_APPEND 00002000 +#endif +#ifndef O_NONBLOCK +#define O_NONBLOCK 00004000 +#endif +#ifndef O_DSYNC +#define O_DSYNC 00010000 /* used to be O_SYNC, see below */ +#endif +#ifndef FASYNC +#define FASYNC 00020000 /* fcntl, for BSD compatibility */ +#endif +#ifndef O_DIRECT +#define O_DIRECT 00040000 /* direct disk access hint */ +#endif +#ifndef O_LARGEFILE +#define O_LARGEFILE 00100000 +#endif +#ifndef O_DIRECTORY +#define O_DIRECTORY 00200000 /* must be a directory */ +#endif +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 00400000 /* don't follow links */ +#endif +#ifndef O_NOATIME +#define O_NOATIME 01000000 +#endif +#ifndef O_CLOEXEC +#define O_CLOEXEC 02000000 /* set close_on_exec */ +#endif + +/* + * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using + * the O_SYNC flag. We continue to use the existing numerical value + * for O_DSYNC semantics now, but using the correct symbolic name for it. + * This new value is used to request true Posix O_SYNC semantics. It is + * defined in this strange way to make sure applications compiled against + * new headers get at least O_DSYNC semantics on older kernels. + * + * This has the nice side-effect that we can simply test for O_DSYNC + * wherever we do not care if O_DSYNC or O_SYNC is used. + * + * Note: __O_SYNC must never be used directly. + */ +#ifndef O_SYNC +#define __O_SYNC 04000000 +#define O_SYNC (__O_SYNC|O_DSYNC) +#endif + +#ifndef O_PATH +#define O_PATH 010000000 +#endif + +#ifndef __O_TMPFILE +#define __O_TMPFILE 020000000 +#endif + +/* a horrid kludge trying to make sure that this will fail on old kernels */ +#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) + +#ifndef O_NDELAY +#define O_NDELAY O_NONBLOCK +#endif + +#define F_DUPFD 0 /* dup */ +#define F_GETFD 1 /* get close_on_exec */ +#define F_SETFD 2 /* set/clear close_on_exec */ +#define F_GETFL 3 /* get file->f_flags */ +#define F_SETFL 4 /* set file->f_flags */ +#ifndef F_GETLK +#define F_GETLK 5 +#define F_SETLK 6 +#define F_SETLKW 7 +#endif +#ifndef F_SETOWN +#define F_SETOWN 8 /* for sockets. */ +#define F_GETOWN 9 /* for sockets. */ +#endif +#ifndef F_SETSIG +#define F_SETSIG 10 /* for sockets. */ +#define F_GETSIG 11 /* for sockets. */ +#endif + +#if __BITS_PER_LONG == 32 || defined(__KERNEL__) +#ifndef F_GETLK64 +#define F_GETLK64 12 /* using 'struct flock64' */ +#define F_SETLK64 13 +#define F_SETLKW64 14 +#endif +#endif /* __BITS_PER_LONG == 32 || defined(__KERNEL__) */ + +#ifndef F_SETOWN_EX +#define F_SETOWN_EX 15 +#define F_GETOWN_EX 16 +#endif + +#ifndef F_GETOWNER_UIDS +#define F_GETOWNER_UIDS 17 +#endif + +/* + * Open File Description Locks + * + * Usually record locks held by a process are released on *any* close and are + * not inherited across a fork(). + * + * These cmd values will set locks that conflict with process-associated + * record locks, but are "owned" by the open file description, not the + * process. This means that they are inherited across fork() like BSD (flock) + * locks, and they are only released automatically when the last reference to + * the the open file against which they were acquired is put. + */ +#define F_OFD_GETLK 36 +#define F_OFD_SETLK 37 +#define F_OFD_SETLKW 38 + +#define F_OWNER_TID 0 +#define F_OWNER_PID 1 +#define F_OWNER_PGRP 2 + +struct f_owner_ex { + int type; + __kernel_pid_t pid; +}; + +/* for F_[GET|SET]FL */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* for posix fcntl() and lockf() */ +#ifndef F_RDLCK +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 +#endif + +/* for old implementation of bsd flock () */ +#ifndef F_EXLCK +#define F_EXLCK 4 /* or 3 */ +#define F_SHLCK 8 /* or 4 */ +#endif + +/* operations for bsd flock(), also used by the kernel implementation */ +#define LOCK_SH 1 /* shared lock */ +#define LOCK_EX 2 /* exclusive lock */ +#define LOCK_NB 4 /* or'd with one of the above to prevent + blocking */ +#define LOCK_UN 8 /* remove lock */ + +/* + * LOCK_MAND support has been removed from the kernel. We leave the symbols + * here to not break legacy builds, but these should not be used in new code. + */ +#define LOCK_MAND 32 /* This is a mandatory flock ... */ +#define LOCK_READ 64 /* which allows concurrent read operations */ +#define LOCK_WRITE 128 /* which allows concurrent write operations */ +#define LOCK_RW 192 /* which allows concurrent read & write ops */ + +#define F_LINUX_SPECIFIC_BASE 1024 + +#ifndef HAVE_ARCH_STRUCT_FLOCK +struct flock { + short l_type; + short l_whence; + __kernel_off_t l_start; + __kernel_off_t l_len; + __kernel_pid_t l_pid; +#ifdef __ARCH_FLOCK_EXTRA_SYSID + __ARCH_FLOCK_EXTRA_SYSID +#endif +#ifdef __ARCH_FLOCK_PAD + __ARCH_FLOCK_PAD +#endif +}; + +struct flock64 { + short l_type; + short l_whence; + __kernel_loff_t l_start; + __kernel_loff_t l_len; + __kernel_pid_t l_pid; +#ifdef __ARCH_FLOCK64_PAD + __ARCH_FLOCK64_PAD +#endif +}; +#endif /* HAVE_ARCH_STRUCT_FLOCK */ + +#endif /* _ASM_GENERIC_FCNTL_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/hugetlb_encode.h b/board/mentalnet/overlay/usr/include/asm-generic/hugetlb_encode.h new file mode 100644 index 0000000..de68700 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/hugetlb_encode.h @@ -0,0 +1,37 @@ +#ifndef _ASM_GENERIC_HUGETLB_ENCODE_H_ +#define _ASM_GENERIC_HUGETLB_ENCODE_H_ + +/* + * Several system calls take a flag to request "hugetlb" huge pages. + * Without further specification, these system calls will use the + * system's default huge page size. If a system supports multiple + * huge page sizes, the desired huge page size can be specified in + * bits [26:31] of the flag arguments. The value in these 6 bits + * will encode the log2 of the huge page size. + * + * The following definitions are associated with this huge page size + * encoding in flag arguments. System call specific header files + * that use this encoding should include this file. They can then + * provide definitions based on these with their own specific prefix. + * for example: + * #define MAP_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT + */ + +#define HUGETLB_FLAG_ENCODE_SHIFT 26 +#define HUGETLB_FLAG_ENCODE_MASK 0x3f + +#define HUGETLB_FLAG_ENCODE_16KB (14U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_32MB (25U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512MB (29U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) + +#endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/int-l64.h b/board/mentalnet/overlay/usr/include/asm-generic/int-l64.h new file mode 100644 index 0000000..845e2de --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/int-l64.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * asm-generic/int-l64.h + * + * Integer declarations for architectures which use "long" + * for 64-bit types. + */ + +#ifndef _ASM_GENERIC_INT_L64_H +#define _ASM_GENERIC_INT_L64_H + +#include + +#ifndef __ASSEMBLY__ +/* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the + * header files exported to user space + */ + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +typedef __signed__ long __s64; +typedef unsigned long __u64; + +#endif /* __ASSEMBLY__ */ + + +#endif /* _ASM_GENERIC_INT_L64_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/int-ll64.h b/board/mentalnet/overlay/usr/include/asm-generic/int-ll64.h new file mode 100644 index 0000000..db61e81 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/int-ll64.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * asm-generic/int-ll64.h + * + * Integer declarations for architectures which use "long long" + * for 64-bit types. + */ + +#ifndef _ASM_GENERIC_INT_LL64_H +#define _ASM_GENERIC_INT_LL64_H + +#include + +#ifndef __ASSEMBLY__ +/* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the + * header files exported to user space + */ + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +#ifdef __GNUC__ +__extension__ typedef __signed__ long long __s64; +__extension__ typedef unsigned long long __u64; +#else +typedef __signed__ long long __s64; +typedef unsigned long long __u64; +#endif + +#endif /* __ASSEMBLY__ */ + + +#endif /* _ASM_GENERIC_INT_LL64_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/ioctl.h b/board/mentalnet/overlay/usr/include/asm-generic/ioctl.h new file mode 100644 index 0000000..8cbb364 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/ioctl.h @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_IOCTL_H +#define _ASM_GENERIC_IOCTL_H + +/* ioctl command encoding: 32 bits total, command in lower 16 bits, + * size of the parameter structure in the lower 14 bits of the + * upper 16 bits. + * Encoding the size of the parameter structure in the ioctl request + * is useful for catching programs compiled with old versions + * and to avoid overwriting user space outside the user buffer area. + * The highest 2 bits are reserved for indicating the ``access mode''. + * NOTE: This limits the max parameter size to 16kB -1 ! + */ + +/* + * The following is for compatibility across the various Linux + * platforms. The generic ioctl numbering scheme doesn't really enforce + * a type field. De facto, however, the top 8 bits of the lower 16 + * bits are indeed used as a type field, so we might just as well make + * this explicit here. Please be sure to use the decoding macros + * below from now on. + */ +#define _IOC_NRBITS 8 +#define _IOC_TYPEBITS 8 + +/* + * Let any architecture override either of the following before + * including this file. + */ + +#ifndef _IOC_SIZEBITS +# define _IOC_SIZEBITS 14 +#endif + +#ifndef _IOC_DIRBITS +# define _IOC_DIRBITS 2 +#endif + +#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) +#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) +#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1) +#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1) + +#define _IOC_NRSHIFT 0 +#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) +#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) +#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) + +/* + * Direction bits, which any architecture can choose to override + * before including this file. + * + * NOTE: _IOC_WRITE means userland is writing and kernel is + * reading. _IOC_READ means userland is reading and kernel is writing. + */ + +#ifndef _IOC_NONE +# define _IOC_NONE 0U +#endif + +#ifndef _IOC_WRITE +# define _IOC_WRITE 1U +#endif + +#ifndef _IOC_READ +# define _IOC_READ 2U +#endif + +#define _IOC(dir,type,nr,size) \ + (((dir) << _IOC_DIRSHIFT) | \ + ((type) << _IOC_TYPESHIFT) | \ + ((nr) << _IOC_NRSHIFT) | \ + ((size) << _IOC_SIZESHIFT)) + +#define _IOC_TYPECHECK(t) (sizeof(t)) + +/* + * Used to create numbers. + * + * NOTE: _IOW means userland is writing and kernel is reading. _IOR + * means userland is reading and kernel is writing. + */ +#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) +#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) +#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) + +/* used to decode ioctl numbers.. */ +#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) +#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) +#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) +#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) + +/* ...and for the drivers/sound files... */ + +#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) +#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) +#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) +#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) +#define IOCSIZE_SHIFT (_IOC_SIZESHIFT) + +#endif /* _ASM_GENERIC_IOCTL_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/ioctls.h b/board/mentalnet/overlay/usr/include/asm-generic/ioctls.h new file mode 100644 index 0000000..ab5479a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/ioctls.h @@ -0,0 +1,121 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_IOCTLS_H +#define __ASM_GENERIC_IOCTLS_H + +#include + +/* + * These are the most common definitions for tty ioctl numbers. + * Most of them do not use the recommended _IOC(), but there is + * probably some source code out there hardcoding the number, + * so we might as well use them for all new platforms. + * + * The architectures that use different values here typically + * try to be compatible with some Unix variants for the same + * architecture. + */ + +/* 0x54 is just a magic number to make these relatively unique ('T') */ + +#define TCGETS 0x5401 +#define TCSETS 0x5402 +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +#define FIONREAD 0x541B +#define TIOCINQ FIONREAD +#define TIOCLINUX 0x541C +#define TIOCCONS 0x541D +#define TIOCGSERIAL 0x541E +#define TIOCSSERIAL 0x541F +#define TIOCPKT 0x5420 +#define FIONBIO 0x5421 +#define TIOCNOTTY 0x5422 +#define TIOCSETD 0x5423 +#define TIOCGETD 0x5424 +#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ +#define TIOCSBRK 0x5427 /* BSD compatibility */ +#define TIOCCBRK 0x5428 /* BSD compatibility */ +#define TIOCGSID 0x5429 /* Return the session ID of FD */ +#define TCGETS2 _IOR('T', 0x2A, struct termios2) +#define TCSETS2 _IOW('T', 0x2B, struct termios2) +#define TCSETSW2 _IOW('T', 0x2C, struct termios2) +#define TCSETSF2 _IOW('T', 0x2D, struct termios2) +#define TIOCGRS485 0x542E +#ifndef TIOCSRS485 +#define TIOCSRS485 0x542F +#endif +#define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ +#define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ +#define TIOCGDEV _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */ +#define TCGETX 0x5432 /* SYS5 TCGETX compatibility */ +#define TCSETX 0x5433 +#define TCSETXF 0x5434 +#define TCSETXW 0x5435 +#define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */ +#define TIOCVHANGUP 0x5437 +#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ +#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ +#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ +#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */ +#define TIOCGISO7816 _IOR('T', 0x42, struct serial_iso7816) +#define TIOCSISO7816 _IOWR('T', 0x43, struct serial_iso7816) + +#define FIONCLEX 0x5450 +#define FIOCLEX 0x5451 +#define FIOASYNC 0x5452 +#define TIOCSERCONFIG 0x5453 +#define TIOCSERGWILD 0x5454 +#define TIOCSERSWILD 0x5455 +#define TIOCGLCKTRMIOS 0x5456 +#define TIOCSLCKTRMIOS 0x5457 +#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ +#define TIOCSERGETLSR 0x5459 /* Get line status register */ +#define TIOCSERGETMULTI 0x545A /* Get multiport config */ +#define TIOCSERSETMULTI 0x545B /* Set multiport config */ + +#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ +#define TIOCGICOUNT 0x545D /* read serial port __inline__ interrupt counts */ + +/* + * Some arches already define FIOQSIZE due to a historical + * conflict with a Hayes modem-specific ioctl value. + */ +#ifndef FIOQSIZE +# define FIOQSIZE 0x5460 +#endif + +/* Used for packet mode */ +#define TIOCPKT_DATA 0 +#define TIOCPKT_FLUSHREAD 1 +#define TIOCPKT_FLUSHWRITE 2 +#define TIOCPKT_STOP 4 +#define TIOCPKT_START 8 +#define TIOCPKT_NOSTOP 16 +#define TIOCPKT_DOSTOP 32 +#define TIOCPKT_IOCTL 64 + +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ + +#endif /* __ASM_GENERIC_IOCTLS_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/ipcbuf.h b/board/mentalnet/overlay/usr/include/asm-generic/ipcbuf.h new file mode 100644 index 0000000..41a01b4 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/ipcbuf.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_IPCBUF_H +#define __ASM_GENERIC_IPCBUF_H + +#include + +/* + * The generic ipc64_perm structure: + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * ipc64_perm was originally meant to be architecture specific, but + * everyone just ended up making identical copies without specific + * optimizations, so we may just as well all use the same one. + * + * Pad space is left for: + * - 32-bit mode_t on architectures that only had 16 bit + * - 32-bit seq + * - 2 miscellaneous 32-bit values + */ + +struct ipc64_perm { + __kernel_key_t key; + __kernel_uid32_t uid; + __kernel_gid32_t gid; + __kernel_uid32_t cuid; + __kernel_gid32_t cgid; + __kernel_mode_t mode; + /* pad if mode_t is u16: */ + unsigned char __pad1[4 - sizeof(__kernel_mode_t)]; + unsigned short seq; + unsigned short __pad2; + __kernel_ulong_t __unused1; + __kernel_ulong_t __unused2; +}; + +#endif /* __ASM_GENERIC_IPCBUF_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/kvm_para.h b/board/mentalnet/overlay/usr/include/asm-generic/kvm_para.h new file mode 100644 index 0000000..486f0af --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/kvm_para.h @@ -0,0 +1,4 @@ +/* + * There isn't anything here, but the file must not be empty or patch + * will delete it. + */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/mman-common.h b/board/mentalnet/overlay/usr/include/asm-generic/mman-common.h new file mode 100644 index 0000000..6ce1f1c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/mman-common.h @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_MMAN_COMMON_H +#define __ASM_GENERIC_MMAN_COMMON_H + +/* + Author: Michael S. Tsirkin , Mellanox Technologies Ltd. + Based on: asm-xxx/mman.h +*/ + +#define PROT_READ 0x1 /* page can be read */ +#define PROT_WRITE 0x2 /* page can be written */ +#define PROT_EXEC 0x4 /* page can be executed */ +#define PROT_SEM 0x8 /* page may be used for atomic ops */ +/* 0x10 reserved for arch-specific use */ +/* 0x20 reserved for arch-specific use */ +#define PROT_NONE 0x0 /* page can not be accessed */ +#define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */ +#define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */ + +/* 0x01 - 0x03 are defined in linux/mman.h */ +#define MAP_TYPE 0x0f /* Mask for type of mapping */ +#define MAP_FIXED 0x10 /* Interpret addr exactly */ +#define MAP_ANONYMOUS 0x20 /* don't use a file */ + +/* 0x0100 - 0x4000 flags are defined in asm-generic/mman.h */ +#define MAP_POPULATE 0x008000 /* populate (prefault) pagetables */ +#define MAP_NONBLOCK 0x010000 /* do not block on IO */ +#define MAP_STACK 0x020000 /* give out an address that is best suited for process/thread stacks */ +#define MAP_HUGETLB 0x040000 /* create a huge page mapping */ +#define MAP_SYNC 0x080000 /* perform synchronous page faults for the mapping */ +#define MAP_FIXED_NOREPLACE 0x100000 /* MAP_FIXED which doesn't unmap underlying mapping */ + +#define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could be + * uninitialized */ + +/* + * Flags for mlock + */ +#define MLOCK_ONFAULT 0x01 /* Lock pages in range after they are faulted in, do not prefault */ + +#define MS_ASYNC 1 /* sync memory asynchronously */ +#define MS_INVALIDATE 2 /* invalidate the caches */ +#define MS_SYNC 4 /* synchronous memory sync */ + +#define MADV_NORMAL 0 /* no further special treatment */ +#define MADV_RANDOM 1 /* expect random page references */ +#define MADV_SEQUENTIAL 2 /* expect sequential page references */ +#define MADV_WILLNEED 3 /* will need these pages */ +#define MADV_DONTNEED 4 /* don't need these pages */ + +/* common parameters: try to keep these consistent across architectures */ +#define MADV_FREE 8 /* free pages only if memory pressure */ +#define MADV_REMOVE 9 /* remove these pages & resources */ +#define MADV_DONTFORK 10 /* don't inherit across fork */ +#define MADV_DOFORK 11 /* do inherit across fork */ +#define MADV_HWPOISON 100 /* poison a page for testing */ +#define MADV_SOFT_OFFLINE 101 /* soft offline page for testing */ + +#define MADV_MERGEABLE 12 /* KSM may merge identical pages */ +#define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */ + +#define MADV_HUGEPAGE 14 /* Worth backing with hugepages */ +#define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */ + +#define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, + overrides the coredump filter bits */ +#define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag */ + +#define MADV_WIPEONFORK 18 /* Zero memory on fork, child only */ +#define MADV_KEEPONFORK 19 /* Undo MADV_WIPEONFORK */ + +#define MADV_COLD 20 /* deactivate these pages */ +#define MADV_PAGEOUT 21 /* reclaim these pages */ + +#define MADV_POPULATE_READ 22 /* populate (prefault) page tables readable */ +#define MADV_POPULATE_WRITE 23 /* populate (prefault) page tables writable */ + +#define MADV_DONTNEED_LOCKED 24 /* like DONTNEED, but drop locked pages too */ + +#define MADV_COLLAPSE 25 /* Synchronous hugepage collapse */ + +/* compatibility flags */ +#define MAP_FILE 0 + +#define PKEY_DISABLE_ACCESS 0x1 +#define PKEY_DISABLE_WRITE 0x2 +#define PKEY_ACCESS_MASK (PKEY_DISABLE_ACCESS |\ + PKEY_DISABLE_WRITE) + +#endif /* __ASM_GENERIC_MMAN_COMMON_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/mman.h b/board/mentalnet/overlay/usr/include/asm-generic/mman.h new file mode 100644 index 0000000..57e8195 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/mman.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_MMAN_H +#define __ASM_GENERIC_MMAN_H + +#include + +#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ +#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ +#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ +#define MAP_LOCKED 0x2000 /* pages are locked */ +#define MAP_NORESERVE 0x4000 /* don't check for reservations */ + +/* + * Bits [26:31] are reserved, see asm-generic/hugetlb_encode.h + * for MAP_HUGETLB usage + */ + +#define MCL_CURRENT 1 /* lock all current mappings */ +#define MCL_FUTURE 2 /* lock all future mappings */ +#define MCL_ONFAULT 4 /* lock all pages that are faulted in */ + +#endif /* __ASM_GENERIC_MMAN_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/msgbuf.h b/board/mentalnet/overlay/usr/include/asm-generic/msgbuf.h new file mode 100644 index 0000000..6504d7b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/msgbuf.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_MSGBUF_H +#define __ASM_GENERIC_MSGBUF_H + +#include +#include + +/* + * generic msqid64_ds structure. + * + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * msqid64_ds was originally meant to be architecture specific, but + * everyone just ended up making identical copies without specific + * optimizations, so we may just as well all use the same one. + * + * 64 bit architectures use a 64-bit long time field here, while + * 32 bit architectures have a pair of unsigned long values. + * On big-endian systems, the lower half is in the wrong place. + * + * Pad space is left for: + * - 2 miscellaneous 32-bit values + */ + +struct msqid64_ds { + struct ipc64_perm msg_perm; +#if __BITS_PER_LONG == 64 + long msg_stime; /* last msgsnd time */ + long msg_rtime; /* last msgrcv time */ + long msg_ctime; /* last change time */ +#else + unsigned long msg_stime; /* last msgsnd time */ + unsigned long msg_stime_high; + unsigned long msg_rtime; /* last msgrcv time */ + unsigned long msg_rtime_high; + unsigned long msg_ctime; /* last change time */ + unsigned long msg_ctime_high; +#endif + unsigned long msg_cbytes; /* current number of bytes on queue */ + unsigned long msg_qnum; /* number of messages in queue */ + unsigned long msg_qbytes; /* max number of bytes on queue */ + __kernel_pid_t msg_lspid; /* pid of last msgsnd */ + __kernel_pid_t msg_lrpid; /* last receive pid */ + unsigned long __unused4; + unsigned long __unused5; +}; + +#endif /* __ASM_GENERIC_MSGBUF_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/param.h b/board/mentalnet/overlay/usr/include/asm-generic/param.h new file mode 100644 index 0000000..1ced72d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/param.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_PARAM_H +#define __ASM_GENERIC_PARAM_H + +#ifndef HZ +#define HZ 100 +#endif + +#ifndef EXEC_PAGESIZE +#define EXEC_PAGESIZE 4096 +#endif + +#ifndef NOGROUP +#define NOGROUP (-1) +#endif + +#define MAXHOSTNAMELEN 64 /* max length of hostname */ + + +#endif /* __ASM_GENERIC_PARAM_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/poll.h b/board/mentalnet/overlay/usr/include/asm-generic/poll.h new file mode 100644 index 0000000..69ab39b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/poll.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_POLL_H +#define __ASM_GENERIC_POLL_H + +/* These are specified by iBCS2 */ +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +/* The rest seem to be more-or-less nonstandard. Check them! */ +#define POLLRDNORM 0x0040 +#define POLLRDBAND 0x0080 +#ifndef POLLWRNORM +#define POLLWRNORM 0x0100 +#endif +#ifndef POLLWRBAND +#define POLLWRBAND 0x0200 +#endif +#ifndef POLLMSG +#define POLLMSG 0x0400 +#endif +#ifndef POLLREMOVE +#define POLLREMOVE 0x1000 +#endif +#ifndef POLLRDHUP +#define POLLRDHUP 0x2000 +#endif + +#define POLLFREE (__poll_t)0x4000 + +#define POLL_BUSY_LOOP (__poll_t)0x8000 + +struct pollfd { + int fd; + short events; + short revents; +}; + +#endif /* __ASM_GENERIC_POLL_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/posix_types.h b/board/mentalnet/overlay/usr/include/asm-generic/posix_types.h new file mode 100644 index 0000000..2f9c805 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/posix_types.h @@ -0,0 +1,99 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_POSIX_TYPES_H +#define __ASM_GENERIC_POSIX_TYPES_H + +#include +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc. + * + * First the types that are often defined in different ways across + * architectures, so that you can override them. + */ + +#ifndef __kernel_long_t +typedef long __kernel_long_t; +typedef unsigned long __kernel_ulong_t; +#endif + +#ifndef __kernel_ino_t +typedef __kernel_ulong_t __kernel_ino_t; +#endif + +#ifndef __kernel_mode_t +typedef unsigned int __kernel_mode_t; +#endif + +#ifndef __kernel_pid_t +typedef int __kernel_pid_t; +#endif + +#ifndef __kernel_ipc_pid_t +typedef int __kernel_ipc_pid_t; +#endif + +#ifndef __kernel_uid_t +typedef unsigned int __kernel_uid_t; +typedef unsigned int __kernel_gid_t; +#endif + +#ifndef __kernel_suseconds_t +typedef __kernel_long_t __kernel_suseconds_t; +#endif + +#ifndef __kernel_daddr_t +typedef int __kernel_daddr_t; +#endif + +#ifndef __kernel_uid32_t +typedef unsigned int __kernel_uid32_t; +typedef unsigned int __kernel_gid32_t; +#endif + +#ifndef __kernel_old_uid_t +typedef __kernel_uid_t __kernel_old_uid_t; +typedef __kernel_gid_t __kernel_old_gid_t; +#endif + +#ifndef __kernel_old_dev_t +typedef unsigned int __kernel_old_dev_t; +#endif + +/* + * Most 32 bit architectures use "unsigned int" size_t, + * and all 64 bit architectures use "unsigned long" size_t. + */ +#ifndef __kernel_size_t +#if __BITS_PER_LONG != 64 +typedef unsigned int __kernel_size_t; +typedef int __kernel_ssize_t; +typedef int __kernel_ptrdiff_t; +#else +typedef __kernel_ulong_t __kernel_size_t; +typedef __kernel_long_t __kernel_ssize_t; +typedef __kernel_long_t __kernel_ptrdiff_t; +#endif +#endif + +#ifndef __kernel_fsid_t +typedef struct { + int val[2]; +} __kernel_fsid_t; +#endif + +/* + * anything below here should be completely generic + */ +typedef __kernel_long_t __kernel_off_t; +typedef long long __kernel_loff_t; +typedef __kernel_long_t __kernel_old_time_t; +typedef __kernel_long_t __kernel_time_t; +typedef long long __kernel_time64_t; +typedef __kernel_long_t __kernel_clock_t; +typedef int __kernel_timer_t; +typedef int __kernel_clockid_t; +typedef char * __kernel_caddr_t; +typedef unsigned short __kernel_uid16_t; +typedef unsigned short __kernel_gid16_t; + +#endif /* __ASM_GENERIC_POSIX_TYPES_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/resource.h b/board/mentalnet/overlay/usr/include/asm-generic/resource.h new file mode 100644 index 0000000..2b8f2c2 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/resource.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_RESOURCE_H +#define _ASM_GENERIC_RESOURCE_H + +/* + * Resource limit IDs + * + * ( Compatibility detail: there are architectures that have + * a different rlimit ID order in the 5-9 range and want + * to keep that order for binary compatibility. The reasons + * are historic and all new rlimits are identical across all + * arches. If an arch has such special order for some rlimits + * then it defines them prior including asm-generic/resource.h. ) + */ + +#define RLIMIT_CPU 0 /* CPU time in sec */ +#define RLIMIT_FSIZE 1 /* Maximum filesize */ +#define RLIMIT_DATA 2 /* max data size */ +#define RLIMIT_STACK 3 /* max stack size */ +#define RLIMIT_CORE 4 /* max core file size */ + +#ifndef RLIMIT_RSS +# define RLIMIT_RSS 5 /* max resident set size */ +#endif + +#ifndef RLIMIT_NPROC +# define RLIMIT_NPROC 6 /* max number of processes */ +#endif + +#ifndef RLIMIT_NOFILE +# define RLIMIT_NOFILE 7 /* max number of open files */ +#endif + +#ifndef RLIMIT_MEMLOCK +# define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */ +#endif + +#ifndef RLIMIT_AS +# define RLIMIT_AS 9 /* address space limit */ +#endif + +#define RLIMIT_LOCKS 10 /* maximum file locks held */ +#define RLIMIT_SIGPENDING 11 /* max number of pending signals */ +#define RLIMIT_MSGQUEUE 12 /* maximum bytes in POSIX mqueues */ +#define RLIMIT_NICE 13 /* max nice prio allowed to raise to + 0-39 for nice level 19 .. -20 */ +#define RLIMIT_RTPRIO 14 /* maximum realtime priority */ +#define RLIMIT_RTTIME 15 /* timeout for RT tasks in us */ +#define RLIM_NLIMITS 16 + +/* + * SuS says limits have to be unsigned. + * Which makes a ton more sense anyway. + * + * Some architectures override this (for compatibility reasons): + */ +#ifndef RLIM_INFINITY +# define RLIM_INFINITY (~0UL) +#endif + + +#endif /* _ASM_GENERIC_RESOURCE_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/sembuf.h b/board/mentalnet/overlay/usr/include/asm-generic/sembuf.h new file mode 100644 index 0000000..f54e48f --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/sembuf.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SEMBUF_H +#define __ASM_GENERIC_SEMBUF_H + +#include +#include + +/* + * The semid64_ds structure for most architectures (though it came from x86_32 + * originally). Note extra padding because this structure is passed back and + * forth between kernel and user space. + * + * semid64_ds was originally meant to be architecture specific, but + * everyone just ended up making identical copies without specific + * optimizations, so we may just as well all use the same one. + * + * 64 bit architectures use a 64-bit long time field here, while + * 32 bit architectures have a pair of unsigned long values. + * + * On big-endian systems, the padding is in the wrong place for + * historic reasons, so user space has to reconstruct a time_t + * value using + * + * user_semid_ds.sem_otime = kernel_semid64_ds.sem_otime + + * ((long long)kernel_semid64_ds.sem_otime_high << 32) + * + * Pad space is left for 2 miscellaneous 32-bit values + */ +struct semid64_ds { + struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ +#if __BITS_PER_LONG == 64 + long sem_otime; /* last semop time */ + long sem_ctime; /* last change time */ +#else + unsigned long sem_otime; /* last semop time */ + unsigned long sem_otime_high; + unsigned long sem_ctime; /* last change time */ + unsigned long sem_ctime_high; +#endif + unsigned long sem_nsems; /* no. of semaphores in array */ + unsigned long __unused3; + unsigned long __unused4; +}; + +#endif /* __ASM_GENERIC_SEMBUF_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/setup.h b/board/mentalnet/overlay/usr/include/asm-generic/setup.h new file mode 100644 index 0000000..88ac510 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/setup.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SETUP_H +#define __ASM_GENERIC_SETUP_H + +#define COMMAND_LINE_SIZE 512 + +#endif /* __ASM_GENERIC_SETUP_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/shmbuf.h b/board/mentalnet/overlay/usr/include/asm-generic/shmbuf.h new file mode 100644 index 0000000..2979b6d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/shmbuf.h @@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SHMBUF_H +#define __ASM_GENERIC_SHMBUF_H + +#include +#include +#include + +/* + * The shmid64_ds structure for x86 architecture. + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * shmid64_ds was originally meant to be architecture specific, but + * everyone just ended up making identical copies without specific + * optimizations, so we may just as well all use the same one. + * + * 64 bit architectures use a 64-bit long time field here, while + * 32 bit architectures have a pair of unsigned long values. + * On big-endian systems, the lower half is in the wrong place. + * + * + * Pad space is left for: + * - 2 miscellaneous 32-bit values + */ + +struct shmid64_ds { + struct ipc64_perm shm_perm; /* operation perms */ + __kernel_size_t shm_segsz; /* size of segment (bytes) */ +#if __BITS_PER_LONG == 64 + long shm_atime; /* last attach time */ + long shm_dtime; /* last detach time */ + long shm_ctime; /* last change time */ +#else + unsigned long shm_atime; /* last attach time */ + unsigned long shm_atime_high; + unsigned long shm_dtime; /* last detach time */ + unsigned long shm_dtime_high; + unsigned long shm_ctime; /* last change time */ + unsigned long shm_ctime_high; +#endif + __kernel_pid_t shm_cpid; /* pid of creator */ + __kernel_pid_t shm_lpid; /* pid of last operator */ + unsigned long shm_nattch; /* no. of current attaches */ + unsigned long __unused4; + unsigned long __unused5; +}; + +struct shminfo64 { + unsigned long shmmax; + unsigned long shmmin; + unsigned long shmmni; + unsigned long shmseg; + unsigned long shmall; + unsigned long __unused1; + unsigned long __unused2; + unsigned long __unused3; + unsigned long __unused4; +}; + +#endif /* __ASM_GENERIC_SHMBUF_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/siginfo.h b/board/mentalnet/overlay/usr/include/asm-generic/siginfo.h new file mode 100644 index 0000000..41a37c9 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/siginfo.h @@ -0,0 +1,356 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_SIGINFO_H +#define _ASM_GENERIC_SIGINFO_H + + +#include + +typedef union sigval { + int sival_int; + void *sival_ptr; +} sigval_t; + +#define SI_MAX_SIZE 128 + +/* + * The default "si_band" type is "long", as specified by POSIX. + * However, some architectures want to override this to "int" + * for historical compatibility reasons, so we allow that. + */ +#ifndef __ARCH_SI_BAND_T +#define __ARCH_SI_BAND_T long +#endif + +#ifndef __ARCH_SI_CLOCK_T +#define __ARCH_SI_CLOCK_T __kernel_clock_t +#endif + +#ifndef __ARCH_SI_ATTRIBUTES +#define __ARCH_SI_ATTRIBUTES +#endif + +/* + * Be careful when extending this union. On 32bit siginfo_t is 32bit + * aligned. Which means that a 64bit field or any other field that + * would increase the alignment of siginfo_t will break the ABI. + */ +union __sifields { + /* kill() */ + struct { + __kernel_pid_t _pid; /* sender's pid */ + __kernel_uid32_t _uid; /* sender's uid */ + } _kill; + + /* POSIX.1b timers */ + struct { + __kernel_timer_t _tid; /* timer id */ + int _overrun; /* overrun count */ + sigval_t _sigval; /* same as below */ + int _sys_private; /* not to be passed to user */ + } _timer; + + /* POSIX.1b signals */ + struct { + __kernel_pid_t _pid; /* sender's pid */ + __kernel_uid32_t _uid; /* sender's uid */ + sigval_t _sigval; + } _rt; + + /* SIGCHLD */ + struct { + __kernel_pid_t _pid; /* which child */ + __kernel_uid32_t _uid; /* sender's uid */ + int _status; /* exit code */ + __ARCH_SI_CLOCK_T _utime; + __ARCH_SI_CLOCK_T _stime; + } _sigchld; + + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */ + struct { + void *_addr; /* faulting insn/memory ref. */ + +#define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? \ + sizeof(short) : __alignof__(void *)) + union { + /* used on alpha and sparc */ + int _trapno; /* TRAP # which caused the signal */ + /* + * used when si_code=BUS_MCEERR_AR or + * used when si_code=BUS_MCEERR_AO + */ + short _addr_lsb; /* LSB of the reported address */ + /* used when si_code=SEGV_BNDERR */ + struct { + char _dummy_bnd[__ADDR_BND_PKEY_PAD]; + void *_lower; + void *_upper; + } _addr_bnd; + /* used when si_code=SEGV_PKUERR */ + struct { + char _dummy_pkey[__ADDR_BND_PKEY_PAD]; + __u32 _pkey; + } _addr_pkey; + /* used when si_code=TRAP_PERF */ + struct { + unsigned long _data; + __u32 _type; + __u32 _flags; + } _perf; + }; + } _sigfault; + + /* SIGPOLL */ + struct { + __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */ + int _fd; + } _sigpoll; + + /* SIGSYS */ + struct { + void *_call_addr; /* calling user insn */ + int _syscall; /* triggering system call number */ + unsigned int _arch; /* AUDIT_ARCH_* of syscall */ + } _sigsys; +}; + +#ifndef __ARCH_HAS_SWAPPED_SIGINFO +#define __SIGINFO \ +struct { \ + int si_signo; \ + int si_errno; \ + int si_code; \ + union __sifields _sifields; \ +} +#else +#define __SIGINFO \ +struct { \ + int si_signo; \ + int si_code; \ + int si_errno; \ + union __sifields _sifields; \ +} +#endif /* __ARCH_HAS_SWAPPED_SIGINFO */ + +typedef struct siginfo { + union { + __SIGINFO; + int _si_pad[SI_MAX_SIZE/sizeof(int)]; + }; +} __ARCH_SI_ATTRIBUTES siginfo_t; + +/* + * How these fields are to be accessed. + */ +#define si_pid _sifields._kill._pid +#define si_uid _sifields._kill._uid +#define si_tid _sifields._timer._tid +#define si_overrun _sifields._timer._overrun +#define si_sys_private _sifields._timer._sys_private +#define si_status _sifields._sigchld._status +#define si_utime _sifields._sigchld._utime +#define si_stime _sifields._sigchld._stime +#define si_value _sifields._rt._sigval +#define si_int _sifields._rt._sigval.sival_int +#define si_ptr _sifields._rt._sigval.sival_ptr +#define si_addr _sifields._sigfault._addr +#define si_trapno _sifields._sigfault._trapno +#define si_addr_lsb _sifields._sigfault._addr_lsb +#define si_lower _sifields._sigfault._addr_bnd._lower +#define si_upper _sifields._sigfault._addr_bnd._upper +#define si_pkey _sifields._sigfault._addr_pkey._pkey +#define si_perf_data _sifields._sigfault._perf._data +#define si_perf_type _sifields._sigfault._perf._type +#define si_perf_flags _sifields._sigfault._perf._flags +#define si_band _sifields._sigpoll._band +#define si_fd _sifields._sigpoll._fd +#define si_call_addr _sifields._sigsys._call_addr +#define si_syscall _sifields._sigsys._syscall +#define si_arch _sifields._sigsys._arch + +/* + * si_code values + * Digital reserves positive values for kernel-generated signals. + */ +#define SI_USER 0 /* sent by kill, sigsend, raise */ +#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */ +#define SI_QUEUE -1 /* sent by sigqueue */ +#define SI_TIMER -2 /* sent by timer expiration */ +#define SI_MESGQ -3 /* sent by real time mesq state change */ +#define SI_ASYNCIO -4 /* sent by AIO completion */ +#define SI_SIGIO -5 /* sent by queued SIGIO */ +#define SI_TKILL -6 /* sent by tkill system call */ +#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */ +#define SI_ASYNCNL -60 /* sent by glibc async name lookup completion */ + +#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0) +#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0) + +/* + * SIGILL si_codes + */ +#define ILL_ILLOPC 1 /* illegal opcode */ +#define ILL_ILLOPN 2 /* illegal operand */ +#define ILL_ILLADR 3 /* illegal addressing mode */ +#define ILL_ILLTRP 4 /* illegal trap */ +#define ILL_PRVOPC 5 /* privileged opcode */ +#define ILL_PRVREG 6 /* privileged register */ +#define ILL_COPROC 7 /* coprocessor error */ +#define ILL_BADSTK 8 /* internal stack error */ +#define ILL_BADIADDR 9 /* unimplemented instruction address */ +#define __ILL_BREAK 10 /* illegal break */ +#define __ILL_BNDMOD 11 /* bundle-update (modification) in progress */ +#define NSIGILL 11 + +/* + * SIGFPE si_codes + */ +#define FPE_INTDIV 1 /* integer divide by zero */ +#define FPE_INTOVF 2 /* integer overflow */ +#define FPE_FLTDIV 3 /* floating point divide by zero */ +#define FPE_FLTOVF 4 /* floating point overflow */ +#define FPE_FLTUND 5 /* floating point underflow */ +#define FPE_FLTRES 6 /* floating point inexact result */ +#define FPE_FLTINV 7 /* floating point invalid operation */ +#define FPE_FLTSUB 8 /* subscript out of range */ +#define __FPE_DECOVF 9 /* decimal overflow */ +#define __FPE_DECDIV 10 /* decimal division by zero */ +#define __FPE_DECERR 11 /* packed decimal error */ +#define __FPE_INVASC 12 /* invalid ASCII digit */ +#define __FPE_INVDEC 13 /* invalid decimal digit */ +#define FPE_FLTUNK 14 /* undiagnosed floating-point exception */ +#define FPE_CONDTRAP 15 /* trap on condition */ +#define NSIGFPE 15 + +/* + * SIGSEGV si_codes + */ +#define SEGV_MAPERR 1 /* address not mapped to object */ +#define SEGV_ACCERR 2 /* invalid permissions for mapped object */ +#define SEGV_BNDERR 3 /* failed address bound checks */ +#ifdef __ia64__ +# define __SEGV_PSTKOVF 4 /* paragraph stack overflow */ +#else +# define SEGV_PKUERR 4 /* failed protection key checks */ +#endif +#define SEGV_ACCADI 5 /* ADI not enabled for mapped object */ +#define SEGV_ADIDERR 6 /* Disrupting MCD error */ +#define SEGV_ADIPERR 7 /* Precise MCD exception */ +#define SEGV_MTEAERR 8 /* Asynchronous ARM MTE error */ +#define SEGV_MTESERR 9 /* Synchronous ARM MTE exception */ +#define SEGV_CPERR 10 /* Control protection fault */ +#define NSIGSEGV 10 + +/* + * SIGBUS si_codes + */ +#define BUS_ADRALN 1 /* invalid address alignment */ +#define BUS_ADRERR 2 /* non-existent physical address */ +#define BUS_OBJERR 3 /* object specific hardware error */ +/* hardware memory error consumed on a machine check: action required */ +#define BUS_MCEERR_AR 4 +/* hardware memory error detected in process but not consumed: action optional*/ +#define BUS_MCEERR_AO 5 +#define NSIGBUS 5 + +/* + * SIGTRAP si_codes + */ +#define TRAP_BRKPT 1 /* process breakpoint */ +#define TRAP_TRACE 2 /* process trace trap */ +#define TRAP_BRANCH 3 /* process taken branch trap */ +#define TRAP_HWBKPT 4 /* hardware breakpoint/watchpoint */ +#define TRAP_UNK 5 /* undiagnosed trap */ +#define TRAP_PERF 6 /* perf event with sigtrap=1 */ +#define NSIGTRAP 6 + +/* + * There is an additional set of SIGTRAP si_codes used by ptrace + * that are of the form: ((PTRACE_EVENT_XXX << 8) | SIGTRAP) + */ + +/* + * Flags for si_perf_flags if SIGTRAP si_code is TRAP_PERF. + */ +#define TRAP_PERF_FLAG_ASYNC (1u << 0) + +/* + * SIGCHLD si_codes + */ +#define CLD_EXITED 1 /* child has exited */ +#define CLD_KILLED 2 /* child was killed */ +#define CLD_DUMPED 3 /* child terminated abnormally */ +#define CLD_TRAPPED 4 /* traced child has trapped */ +#define CLD_STOPPED 5 /* child has stopped */ +#define CLD_CONTINUED 6 /* stopped child has continued */ +#define NSIGCHLD 6 + +/* + * SIGPOLL (or any other signal without signal specific si_codes) si_codes + */ +#define POLL_IN 1 /* data input available */ +#define POLL_OUT 2 /* output buffers available */ +#define POLL_MSG 3 /* input message available */ +#define POLL_ERR 4 /* i/o error */ +#define POLL_PRI 5 /* high priority input available */ +#define POLL_HUP 6 /* device disconnected */ +#define NSIGPOLL 6 + +/* + * SIGSYS si_codes + */ +#define SYS_SECCOMP 1 /* seccomp triggered */ +#define SYS_USER_DISPATCH 2 /* syscall user dispatch triggered */ +#define NSIGSYS 2 + +/* + * SIGEMT si_codes + */ +#define EMT_TAGOVF 1 /* tag overflow */ +#define NSIGEMT 1 + +/* + * sigevent definitions + * + * It seems likely that SIGEV_THREAD will have to be handled from + * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the + * thread manager then catches and does the appropriate nonsense. + * However, everything is written out here so as to not get lost. + */ +#define SIGEV_SIGNAL 0 /* notify via signal */ +#define SIGEV_NONE 1 /* other notification: meaningless */ +#define SIGEV_THREAD 2 /* deliver via thread creation */ +#define SIGEV_THREAD_ID 4 /* deliver to thread */ + +/* + * This works because the alignment is ok on all current architectures + * but we leave open this being overridden in the future + */ +#ifndef __ARCH_SIGEV_PREAMBLE_SIZE +#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(int) * 2 + sizeof(sigval_t)) +#endif + +#define SIGEV_MAX_SIZE 64 +#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE) \ + / sizeof(int)) + +typedef struct sigevent { + sigval_t sigev_value; + int sigev_signo; + int sigev_notify; + union { + int _pad[SIGEV_PAD_SIZE]; + int _tid; + + struct { + void (*_function)(sigval_t); + void *_attribute; /* really pthread_attr_t */ + } _sigev_thread; + } _sigev_un; +} sigevent_t; + +#define sigev_notify_function _sigev_un._sigev_thread._function +#define sigev_notify_attributes _sigev_un._sigev_thread._attribute +#define sigev_notify_thread_id _sigev_un._tid + + +#endif /* _ASM_GENERIC_SIGINFO_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/signal-defs.h b/board/mentalnet/overlay/usr/include/asm-generic/signal-defs.h new file mode 100644 index 0000000..08c3efd --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/signal-defs.h @@ -0,0 +1,93 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SIGNAL_DEFS_H +#define __ASM_GENERIC_SIGNAL_DEFS_H + + + +/* + * SA_FLAGS values: + * + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. + * SA_SIGINFO delivers the signal with SIGINFO structs. + * SA_ONSTACK indicates that a registered stack_t will be used. + * SA_RESTART flag to get restarting signals (which were the default long ago) + * SA_NODEFER prevents the current signal from being masked in the handler. + * SA_RESETHAND clears the handler when the signal is delivered. + * SA_UNSUPPORTED is a flag bit that will never be supported. Kernels from + * before the introduction of SA_UNSUPPORTED did not clear unknown bits from + * sa_flags when read using the oldact argument to sigaction and rt_sigaction, + * so this bit allows flag bit support to be detected from userspace while + * allowing an old kernel to be distinguished from a kernel that supports every + * flag bit. + * SA_EXPOSE_TAGBITS exposes an architecture-defined set of tag bits in + * siginfo.si_addr. + * + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single + * Unix names RESETHAND and NODEFER respectively. + */ +#ifndef SA_NOCLDSTOP +#define SA_NOCLDSTOP 0x00000001 +#endif +#ifndef SA_NOCLDWAIT +#define SA_NOCLDWAIT 0x00000002 +#endif +#ifndef SA_SIGINFO +#define SA_SIGINFO 0x00000004 +#endif +/* 0x00000008 used on alpha, mips, parisc */ +/* 0x00000010 used on alpha, parisc */ +/* 0x00000020 used on alpha, parisc, sparc */ +/* 0x00000040 used on alpha, parisc */ +/* 0x00000080 used on parisc */ +/* 0x00000100 used on sparc */ +/* 0x00000200 used on sparc */ +#define SA_UNSUPPORTED 0x00000400 +#define SA_EXPOSE_TAGBITS 0x00000800 +/* 0x00010000 used on mips */ +/* 0x00800000 used for internal SA_IMMUTABLE */ +/* 0x01000000 used on x86 */ +/* 0x02000000 used on x86 */ +/* + * New architectures should not define the obsolete + * SA_RESTORER 0x04000000 + */ +#ifndef SA_ONSTACK +#define SA_ONSTACK 0x08000000 +#endif +#ifndef SA_RESTART +#define SA_RESTART 0x10000000 +#endif +#ifndef SA_NODEFER +#define SA_NODEFER 0x40000000 +#endif +#ifndef SA_RESETHAND +#define SA_RESETHAND 0x80000000 +#endif + +#define SA_NOMASK SA_NODEFER +#define SA_ONESHOT SA_RESETHAND + +#ifndef SIG_BLOCK +#define SIG_BLOCK 0 /* for blocking signals */ +#endif +#ifndef SIG_UNBLOCK +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#endif +#ifndef SIG_SETMASK +#define SIG_SETMASK 2 /* for setting the signal mask */ +#endif + +#ifndef __ASSEMBLY__ +typedef void __signalfn_t(int); +typedef __signalfn_t *__sighandler_t; + +typedef void __restorefn_t(void); +typedef __restorefn_t *__sigrestore_t; + +#define SIG_DFL ((__sighandler_t)0) /* default signal handling */ +#define SIG_IGN ((__sighandler_t)1) /* ignore signal */ +#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */ +#endif + +#endif /* __ASM_GENERIC_SIGNAL_DEFS_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/signal.h b/board/mentalnet/overlay/usr/include/asm-generic/signal.h new file mode 100644 index 0000000..219c078 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/signal.h @@ -0,0 +1,91 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SIGNAL_H +#define __ASM_GENERIC_SIGNAL_H + +#include + +#define _NSIG 64 +#define _NSIG_BPW __BITS_PER_LONG +#define _NSIG_WORDS (_NSIG / _NSIG_BPW) + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT 6 +#define SIGBUS 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGUSR1 10 +#define SIGSEGV 11 +#define SIGUSR2 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 +#define SIGURG 23 +#define SIGXCPU 24 +#define SIGXFSZ 25 +#define SIGVTALRM 26 +#define SIGPROF 27 +#define SIGWINCH 28 +#define SIGIO 29 +#define SIGPOLL SIGIO +/* +#define SIGLOST 29 +*/ +#define SIGPWR 30 +#define SIGSYS 31 +#define SIGUNUSED 31 + +/* These should not be considered constants from userland. */ +#define SIGRTMIN 32 +#ifndef SIGRTMAX +#define SIGRTMAX _NSIG +#endif + +#if !defined MINSIGSTKSZ || !defined SIGSTKSZ +#define MINSIGSTKSZ 2048 +#define SIGSTKSZ 8192 +#endif + +#ifndef __ASSEMBLY__ +typedef struct { + unsigned long sig[_NSIG_WORDS]; +} sigset_t; + +/* not actually used, but required for linux/syscalls.h */ +typedef unsigned long old_sigset_t; + +#include + +#ifdef SA_RESTORER +#define __ARCH_HAS_SA_RESTORER +#endif + +struct sigaction { + __sighandler_t sa_handler; + unsigned long sa_flags; +#ifdef SA_RESTORER + __sigrestore_t sa_restorer; +#endif + sigset_t sa_mask; /* mask last for extensibility */ +}; + +typedef struct sigaltstack { + void *ss_sp; + int ss_flags; + __kernel_size_t ss_size; +} stack_t; + +#endif /* __ASSEMBLY__ */ + +#endif /* __ASM_GENERIC_SIGNAL_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/socket.h b/board/mentalnet/overlay/usr/include/asm-generic/socket.h new file mode 100644 index 0000000..adbc690 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/socket.h @@ -0,0 +1,167 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SOCKET_H +#define __ASM_GENERIC_SOCKET_H + +#include +#include + +/* For setsockopt(2) */ +#define SOL_SOCKET 1 + +#define SO_DEBUG 1 +#define SO_REUSEADDR 2 +#define SO_TYPE 3 +#define SO_ERROR 4 +#define SO_DONTROUTE 5 +#define SO_BROADCAST 6 +#define SO_SNDBUF 7 +#define SO_RCVBUF 8 +#define SO_SNDBUFFORCE 32 +#define SO_RCVBUFFORCE 33 +#define SO_KEEPALIVE 9 +#define SO_OOBINLINE 10 +#define SO_NO_CHECK 11 +#define SO_PRIORITY 12 +#define SO_LINGER 13 +#define SO_BSDCOMPAT 14 +#define SO_REUSEPORT 15 +#ifndef SO_PASSCRED /* powerpc only differs in these */ +#define SO_PASSCRED 16 +#define SO_PEERCRED 17 +#define SO_RCVLOWAT 18 +#define SO_SNDLOWAT 19 +#define SO_RCVTIMEO_OLD 20 +#define SO_SNDTIMEO_OLD 21 +#endif + +/* Security levels - as per NRL IPv6 - don't actually do anything */ +#define SO_SECURITY_AUTHENTICATION 22 +#define SO_SECURITY_ENCRYPTION_TRANSPORT 23 +#define SO_SECURITY_ENCRYPTION_NETWORK 24 + +#define SO_BINDTODEVICE 25 + +/* Socket filtering */ +#define SO_ATTACH_FILTER 26 +#define SO_DETACH_FILTER 27 +#define SO_GET_FILTER SO_ATTACH_FILTER + +#define SO_PEERNAME 28 + +#define SO_ACCEPTCONN 30 + +#define SO_PEERSEC 31 +#define SO_PASSSEC 34 + +#define SO_MARK 36 + +#define SO_PROTOCOL 38 +#define SO_DOMAIN 39 + +#define SO_RXQ_OVFL 40 + +#define SO_WIFI_STATUS 41 +#define SCM_WIFI_STATUS SO_WIFI_STATUS +#define SO_PEEK_OFF 42 + +/* Instruct lower device to use last 4-bytes of skb data as FCS */ +#define SO_NOFCS 43 + +#define SO_LOCK_FILTER 44 + +#define SO_SELECT_ERR_QUEUE 45 + +#define SO_BUSY_POLL 46 + +#define SO_MAX_PACING_RATE 47 + +#define SO_BPF_EXTENSIONS 48 + +#define SO_INCOMING_CPU 49 + +#define SO_ATTACH_BPF 50 +#define SO_DETACH_BPF SO_DETACH_FILTER + +#define SO_ATTACH_REUSEPORT_CBPF 51 +#define SO_ATTACH_REUSEPORT_EBPF 52 + +#define SO_CNX_ADVICE 53 + +#define SCM_TIMESTAMPING_OPT_STATS 54 + +#define SO_MEMINFO 55 + +#define SO_INCOMING_NAPI_ID 56 + +#define SO_COOKIE 57 + +#define SCM_TIMESTAMPING_PKTINFO 58 + +#define SO_PEERGROUPS 59 + +#define SO_ZEROCOPY 60 + +#define SO_TXTIME 61 +#define SCM_TXTIME SO_TXTIME + +#define SO_BINDTOIFINDEX 62 + +#define SO_TIMESTAMP_OLD 29 +#define SO_TIMESTAMPNS_OLD 35 +#define SO_TIMESTAMPING_OLD 37 + +#define SO_TIMESTAMP_NEW 63 +#define SO_TIMESTAMPNS_NEW 64 +#define SO_TIMESTAMPING_NEW 65 + +#define SO_RCVTIMEO_NEW 66 +#define SO_SNDTIMEO_NEW 67 + +#define SO_DETACH_REUSEPORT_BPF 68 + +#define SO_PREFER_BUSY_POLL 69 +#define SO_BUSY_POLL_BUDGET 70 + +#define SO_NETNS_COOKIE 71 + +#define SO_BUF_LOCK 72 + +#define SO_RESERVE_MEM 73 + +#define SO_TXREHASH 74 + +#define SO_RCVMARK 75 + +#define SO_PASSPIDFD 76 +#define SO_PEERPIDFD 77 + +#define SO_DEVMEM_LINEAR 78 +#define SCM_DEVMEM_LINEAR SO_DEVMEM_LINEAR +#define SO_DEVMEM_DMABUF 79 +#define SCM_DEVMEM_DMABUF SO_DEVMEM_DMABUF +#define SO_DEVMEM_DONTNEED 80 + + +#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__)) +/* on 64-bit and x32, avoid the ?: operator */ +#define SO_TIMESTAMP SO_TIMESTAMP_OLD +#define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD +#define SO_TIMESTAMPING SO_TIMESTAMPING_OLD + +#define SO_RCVTIMEO SO_RCVTIMEO_OLD +#define SO_SNDTIMEO SO_SNDTIMEO_OLD +#else +#define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW) +#define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW) +#define SO_TIMESTAMPING (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPING_OLD : SO_TIMESTAMPING_NEW) + +#define SO_RCVTIMEO (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_RCVTIMEO_OLD : SO_RCVTIMEO_NEW) +#define SO_SNDTIMEO (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_SNDTIMEO_OLD : SO_SNDTIMEO_NEW) +#endif + +#define SCM_TIMESTAMP SO_TIMESTAMP +#define SCM_TIMESTAMPNS SO_TIMESTAMPNS +#define SCM_TIMESTAMPING SO_TIMESTAMPING + + +#endif /* __ASM_GENERIC_SOCKET_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/sockios.h b/board/mentalnet/overlay/usr/include/asm-generic/sockios.h new file mode 100644 index 0000000..44fa3ed --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/sockios.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_SOCKIOS_H +#define __ASM_GENERIC_SOCKIOS_H + +/* Socket-level I/O control calls. */ +#define FIOSETOWN 0x8901 +#define SIOCSPGRP 0x8902 +#define FIOGETOWN 0x8903 +#define SIOCGPGRP 0x8904 +#define SIOCATMARK 0x8905 +#define SIOCGSTAMP_OLD 0x8906 /* Get stamp (timeval) */ +#define SIOCGSTAMPNS_OLD 0x8907 /* Get stamp (timespec) */ + +#endif /* __ASM_GENERIC_SOCKIOS_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/stat.h b/board/mentalnet/overlay/usr/include/asm-generic/stat.h new file mode 100644 index 0000000..0d962ec --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/stat.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_STAT_H +#define __ASM_GENERIC_STAT_H + +/* + * Everybody gets this wrong and has to stick with it for all + * eternity. Hopefully, this version gets used by new architectures + * so they don't fall into the same traps. + * + * stat64 is copied from powerpc64, with explicit padding added. + * stat is the same structure layout on 64-bit, without the 'long long' + * types. + * + * By convention, 64 bit architectures use the stat interface, while + * 32 bit architectures use the stat64 interface. Note that we don't + * provide an __old_kernel_stat here, which new architecture should + * not have to start with. + */ + +#include + +#define STAT_HAVE_NSEC 1 + +struct stat { + unsigned long st_dev; /* Device. */ + unsigned long st_ino; /* File serial number. */ + unsigned int st_mode; /* File mode. */ + unsigned int st_nlink; /* Link count. */ + unsigned int st_uid; /* User ID of the file's owner. */ + unsigned int st_gid; /* Group ID of the file's group. */ + unsigned long st_rdev; /* Device number, if device. */ + unsigned long __pad1; + long st_size; /* Size of file, in bytes. */ + int st_blksize; /* Optimal block size for I/O. */ + int __pad2; + long st_blocks; /* Number 512-byte blocks allocated. */ + long st_atime; /* Time of last access. */ + unsigned long st_atime_nsec; + long st_mtime; /* Time of last modification. */ + unsigned long st_mtime_nsec; + long st_ctime; /* Time of last status change. */ + unsigned long st_ctime_nsec; + unsigned int __unused4; + unsigned int __unused5; +}; + +/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */ +#if __BITS_PER_LONG != 64 || defined(__ARCH_WANT_STAT64) +struct stat64 { + unsigned long long st_dev; /* Device. */ + unsigned long long st_ino; /* File serial number. */ + unsigned int st_mode; /* File mode. */ + unsigned int st_nlink; /* Link count. */ + unsigned int st_uid; /* User ID of the file's owner. */ + unsigned int st_gid; /* Group ID of the file's group. */ + unsigned long long st_rdev; /* Device number, if device. */ + unsigned long long __pad1; + long long st_size; /* Size of file, in bytes. */ + int st_blksize; /* Optimal block size for I/O. */ + int __pad2; + long long st_blocks; /* Number 512-byte blocks allocated. */ + int st_atime; /* Time of last access. */ + unsigned int st_atime_nsec; + int st_mtime; /* Time of last modification. */ + unsigned int st_mtime_nsec; + int st_ctime; /* Time of last status change. */ + unsigned int st_ctime_nsec; + unsigned int __unused4; + unsigned int __unused5; +}; +#endif + +#endif /* __ASM_GENERIC_STAT_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/statfs.h b/board/mentalnet/overlay/usr/include/asm-generic/statfs.h new file mode 100644 index 0000000..9749431 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/statfs.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _GENERIC_STATFS_H +#define _GENERIC_STATFS_H + +#include + + +/* + * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'. + * Yes, they differ in signedness as well as size. + * Special cases can override it for themselves -- except for S390x, which + * is just a little too special for us. And MIPS, which I'm not touching + * with a 10' pole. + */ +#ifndef __statfs_word +#if __BITS_PER_LONG == 64 +#define __statfs_word __kernel_long_t +#else +#define __statfs_word __u32 +#endif +#endif + +struct statfs { + __statfs_word f_type; + __statfs_word f_bsize; + __statfs_word f_blocks; + __statfs_word f_bfree; + __statfs_word f_bavail; + __statfs_word f_files; + __statfs_word f_ffree; + __kernel_fsid_t f_fsid; + __statfs_word f_namelen; + __statfs_word f_frsize; + __statfs_word f_flags; + __statfs_word f_spare[4]; +}; + +/* + * ARM needs to avoid the 32-bit padding at the end, for consistency + * between EABI and OABI + */ +#ifndef ARCH_PACK_STATFS64 +#define ARCH_PACK_STATFS64 +#endif + +struct statfs64 { + __statfs_word f_type; + __statfs_word f_bsize; + __u64 f_blocks; + __u64 f_bfree; + __u64 f_bavail; + __u64 f_files; + __u64 f_ffree; + __kernel_fsid_t f_fsid; + __statfs_word f_namelen; + __statfs_word f_frsize; + __statfs_word f_flags; + __statfs_word f_spare[4]; +} ARCH_PACK_STATFS64; + +/* + * IA64 and x86_64 need to avoid the 32-bit padding at the end, + * to be compatible with the i386 ABI + */ +#ifndef ARCH_PACK_COMPAT_STATFS64 +#define ARCH_PACK_COMPAT_STATFS64 +#endif + +struct compat_statfs64 { + __u32 f_type; + __u32 f_bsize; + __u64 f_blocks; + __u64 f_bfree; + __u64 f_bavail; + __u64 f_files; + __u64 f_ffree; + __kernel_fsid_t f_fsid; + __u32 f_namelen; + __u32 f_frsize; + __u32 f_flags; + __u32 f_spare[4]; +} ARCH_PACK_COMPAT_STATFS64; + +#endif /* _GENERIC_STATFS_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/swab.h b/board/mentalnet/overlay/usr/include/asm-generic/swab.h new file mode 100644 index 0000000..f2da4e4 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/swab.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_SWAB_H +#define _ASM_GENERIC_SWAB_H + +#include + +/* + * 32 bit architectures typically (but not always) want to + * set __SWAB_64_THRU_32__. In user space, this is only + * valid if the compiler supports 64 bit data types. + */ + +#if __BITS_PER_LONG == 32 +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__) +#define __SWAB_64_THRU_32__ +#endif +#endif + +#endif /* _ASM_GENERIC_SWAB_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/termbits-common.h b/board/mentalnet/overlay/usr/include/asm-generic/termbits-common.h new file mode 100644 index 0000000..4a6a79f --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/termbits-common.h @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_TERMBITS_COMMON_H +#define __ASM_GENERIC_TERMBITS_COMMON_H + +typedef unsigned char cc_t; +typedef unsigned int speed_t; + +/* c_iflag bits */ +#define IGNBRK 0x001 /* Ignore break condition */ +#define BRKINT 0x002 /* Signal interrupt on break */ +#define IGNPAR 0x004 /* Ignore characters with parity errors */ +#define PARMRK 0x008 /* Mark parity and framing errors */ +#define INPCK 0x010 /* Enable input parity check */ +#define ISTRIP 0x020 /* Strip 8th bit off characters */ +#define INLCR 0x040 /* Map NL to CR on input */ +#define IGNCR 0x080 /* Ignore CR */ +#define ICRNL 0x100 /* Map CR to NL on input */ +#define IXANY 0x800 /* Any character will restart after stop */ + +/* c_oflag bits */ +#define OPOST 0x01 /* Perform output processing */ +#define OCRNL 0x08 +#define ONOCR 0x10 +#define ONLRET 0x20 +#define OFILL 0x40 +#define OFDEL 0x80 + +/* c_cflag bit meaning */ +/* Common CBAUD rates */ +#define B0 0x00000000 /* hang up */ +#define B50 0x00000001 +#define B75 0x00000002 +#define B110 0x00000003 +#define B134 0x00000004 +#define B150 0x00000005 +#define B200 0x00000006 +#define B300 0x00000007 +#define B600 0x00000008 +#define B1200 0x00000009 +#define B1800 0x0000000a +#define B2400 0x0000000b +#define B4800 0x0000000c +#define B9600 0x0000000d +#define B19200 0x0000000e +#define B38400 0x0000000f +#define EXTA B19200 +#define EXTB B38400 + +#define ADDRB 0x20000000 /* address bit */ +#define CMSPAR 0x40000000 /* mark or space (stick) parity */ +#define CRTSCTS 0x80000000 /* flow control */ + +#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ + +/* tcflow() ACTION argument and TCXONC use these */ +#define TCOOFF 0 /* Suspend output */ +#define TCOON 1 /* Restart suspended output */ +#define TCIOFF 2 /* Send a STOP character */ +#define TCION 3 /* Send a START character */ + +/* tcflush() QUEUE_SELECTOR argument and TCFLSH use these */ +#define TCIFLUSH 0 /* Discard data received but not yet read */ +#define TCOFLUSH 1 /* Discard data written but not yet sent */ +#define TCIOFLUSH 2 /* Discard all pending data */ + +#endif /* __ASM_GENERIC_TERMBITS_COMMON_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/termbits.h b/board/mentalnet/overlay/usr/include/asm-generic/termbits.h new file mode 100644 index 0000000..890ef29 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/termbits.h @@ -0,0 +1,149 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_TERMBITS_H +#define __ASM_GENERIC_TERMBITS_H + +#include + +typedef unsigned int tcflag_t; + +#define NCCS 19 +struct termios { + tcflag_t c_iflag; /* input mode flags */ + tcflag_t c_oflag; /* output mode flags */ + tcflag_t c_cflag; /* control mode flags */ + tcflag_t c_lflag; /* local mode flags */ + cc_t c_line; /* line discipline */ + cc_t c_cc[NCCS]; /* control characters */ +}; + +struct termios2 { + tcflag_t c_iflag; /* input mode flags */ + tcflag_t c_oflag; /* output mode flags */ + tcflag_t c_cflag; /* control mode flags */ + tcflag_t c_lflag; /* local mode flags */ + cc_t c_line; /* line discipline */ + cc_t c_cc[NCCS]; /* control characters */ + speed_t c_ispeed; /* input speed */ + speed_t c_ospeed; /* output speed */ +}; + +struct ktermios { + tcflag_t c_iflag; /* input mode flags */ + tcflag_t c_oflag; /* output mode flags */ + tcflag_t c_cflag; /* control mode flags */ + tcflag_t c_lflag; /* local mode flags */ + cc_t c_line; /* line discipline */ + cc_t c_cc[NCCS]; /* control characters */ + speed_t c_ispeed; /* input speed */ + speed_t c_ospeed; /* output speed */ +}; + +/* c_cc characters */ +#define VINTR 0 +#define VQUIT 1 +#define VERASE 2 +#define VKILL 3 +#define VEOF 4 +#define VTIME 5 +#define VMIN 6 +#define VSWTC 7 +#define VSTART 8 +#define VSTOP 9 +#define VSUSP 10 +#define VEOL 11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE 14 +#define VLNEXT 15 +#define VEOL2 16 + +/* c_iflag bits */ +#define IUCLC 0x0200 +#define IXON 0x0400 +#define IXOFF 0x1000 +#define IMAXBEL 0x2000 +#define IUTF8 0x4000 + +/* c_oflag bits */ +#define OLCUC 0x00002 +#define ONLCR 0x00004 +#define NLDLY 0x00100 +#define NL0 0x00000 +#define NL1 0x00100 +#define CRDLY 0x00600 +#define CR0 0x00000 +#define CR1 0x00200 +#define CR2 0x00400 +#define CR3 0x00600 +#define TABDLY 0x01800 +#define TAB0 0x00000 +#define TAB1 0x00800 +#define TAB2 0x01000 +#define TAB3 0x01800 +#define XTABS 0x01800 +#define BSDLY 0x02000 +#define BS0 0x00000 +#define BS1 0x02000 +#define VTDLY 0x04000 +#define VT0 0x00000 +#define VT1 0x04000 +#define FFDLY 0x08000 +#define FF0 0x00000 +#define FF1 0x08000 + +/* c_cflag bit meaning */ +#define CBAUD 0x0000100f +#define CSIZE 0x00000030 +#define CS5 0x00000000 +#define CS6 0x00000010 +#define CS7 0x00000020 +#define CS8 0x00000030 +#define CSTOPB 0x00000040 +#define CREAD 0x00000080 +#define PARENB 0x00000100 +#define PARODD 0x00000200 +#define HUPCL 0x00000400 +#define CLOCAL 0x00000800 +#define CBAUDEX 0x00001000 +#define BOTHER 0x00001000 +#define B57600 0x00001001 +#define B115200 0x00001002 +#define B230400 0x00001003 +#define B460800 0x00001004 +#define B500000 0x00001005 +#define B576000 0x00001006 +#define B921600 0x00001007 +#define B1000000 0x00001008 +#define B1152000 0x00001009 +#define B1500000 0x0000100a +#define B2000000 0x0000100b +#define B2500000 0x0000100c +#define B3000000 0x0000100d +#define B3500000 0x0000100e +#define B4000000 0x0000100f +#define CIBAUD 0x100f0000 /* input baud rate */ + +/* c_lflag bits */ +#define ISIG 0x00001 +#define ICANON 0x00002 +#define XCASE 0x00004 +#define ECHO 0x00008 +#define ECHOE 0x00010 +#define ECHOK 0x00020 +#define ECHONL 0x00040 +#define NOFLSH 0x00080 +#define TOSTOP 0x00100 +#define ECHOCTL 0x00200 +#define ECHOPRT 0x00400 +#define ECHOKE 0x00800 +#define FLUSHO 0x01000 +#define PENDIN 0x04000 +#define IEXTEN 0x08000 +#define EXTPROC 0x10000 + +/* tcsetattr uses these */ +#define TCSANOW 0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +#endif /* __ASM_GENERIC_TERMBITS_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/termios.h b/board/mentalnet/overlay/usr/include/asm-generic/termios.h new file mode 100644 index 0000000..8b538b9 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/termios.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_TERMIOS_H +#define _ASM_GENERIC_TERMIOS_H +/* + * Most architectures have straight copies of the x86 code, with + * varying levels of bug fixes on top. Usually it's a good idea + * to use this generic version instead, but be careful to avoid + * ABI changes. + * New architectures should not provide their own version. + */ + +#include +#include + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG +#define TIOCM_OUT1 0x2000 +#define TIOCM_OUT2 0x4000 +#define TIOCM_LOOP 0x8000 + +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ + + +#endif /* _ASM_GENERIC_TERMIOS_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/types.h b/board/mentalnet/overlay/usr/include/asm-generic/types.h new file mode 100644 index 0000000..dfaa50d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/types.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_GENERIC_TYPES_H +#define _ASM_GENERIC_TYPES_H +/* + * int-ll64 is used everywhere now. + */ +#include + +#endif /* _ASM_GENERIC_TYPES_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/ucontext.h b/board/mentalnet/overlay/usr/include/asm-generic/ucontext.h new file mode 100644 index 0000000..351868a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/ucontext.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_GENERIC_UCONTEXT_H +#define __ASM_GENERIC_UCONTEXT_H + +struct ucontext { + unsigned long uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + struct sigcontext uc_mcontext; + sigset_t uc_sigmask; /* mask last for extensibility */ +}; + +#endif /* __ASM_GENERIC_UCONTEXT_H */ diff --git a/board/mentalnet/overlay/usr/include/asm-generic/unistd.h b/board/mentalnet/overlay/usr/include/asm-generic/unistd.h new file mode 100644 index 0000000..5bf6148 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm-generic/unistd.h @@ -0,0 +1,893 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#include + +/* + * This file contains the system call numbers, based on the + * layout of the x86-64 architecture, which embeds the + * pointer to the syscall in the table. + * + * As a basic principle, no duplication of functionality + * should be added, e.g. we don't use lseek when llseek + * is present. New architectures should use this file + * and implement the less feature-full calls in user space. + */ + +#ifndef __SYSCALL +#define __SYSCALL(x, y) +#endif + +#if __BITS_PER_LONG == 32 || defined(__SYSCALL_COMPAT) +#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32) +#else +#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) +#endif + +#ifdef __SYSCALL_COMPAT +#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp) +#define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp) +#else +#define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys) +#define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64) +#endif + +#define __NR_io_setup 0 +__SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup) +#define __NR_io_destroy 1 +__SYSCALL(__NR_io_destroy, sys_io_destroy) +#define __NR_io_submit 2 +__SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit) +#define __NR_io_cancel 3 +__SYSCALL(__NR_io_cancel, sys_io_cancel) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_io_getevents 4 +__SC_3264(__NR_io_getevents, sys_io_getevents_time32, sys_io_getevents) +#endif + +#define __NR_setxattr 5 +__SYSCALL(__NR_setxattr, sys_setxattr) +#define __NR_lsetxattr 6 +__SYSCALL(__NR_lsetxattr, sys_lsetxattr) +#define __NR_fsetxattr 7 +__SYSCALL(__NR_fsetxattr, sys_fsetxattr) +#define __NR_getxattr 8 +__SYSCALL(__NR_getxattr, sys_getxattr) +#define __NR_lgetxattr 9 +__SYSCALL(__NR_lgetxattr, sys_lgetxattr) +#define __NR_fgetxattr 10 +__SYSCALL(__NR_fgetxattr, sys_fgetxattr) +#define __NR_listxattr 11 +__SYSCALL(__NR_listxattr, sys_listxattr) +#define __NR_llistxattr 12 +__SYSCALL(__NR_llistxattr, sys_llistxattr) +#define __NR_flistxattr 13 +__SYSCALL(__NR_flistxattr, sys_flistxattr) +#define __NR_removexattr 14 +__SYSCALL(__NR_removexattr, sys_removexattr) +#define __NR_lremovexattr 15 +__SYSCALL(__NR_lremovexattr, sys_lremovexattr) +#define __NR_fremovexattr 16 +__SYSCALL(__NR_fremovexattr, sys_fremovexattr) +#define __NR_getcwd 17 +__SYSCALL(__NR_getcwd, sys_getcwd) +#define __NR_lookup_dcookie 18 +__SYSCALL(__NR_lookup_dcookie, sys_ni_syscall) +#define __NR_eventfd2 19 +__SYSCALL(__NR_eventfd2, sys_eventfd2) +#define __NR_epoll_create1 20 +__SYSCALL(__NR_epoll_create1, sys_epoll_create1) +#define __NR_epoll_ctl 21 +__SYSCALL(__NR_epoll_ctl, sys_epoll_ctl) +#define __NR_epoll_pwait 22 +__SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait) +#define __NR_dup 23 +__SYSCALL(__NR_dup, sys_dup) +#define __NR_dup3 24 +__SYSCALL(__NR_dup3, sys_dup3) +#define __NR3264_fcntl 25 +__SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64) +#define __NR_inotify_init1 26 +__SYSCALL(__NR_inotify_init1, sys_inotify_init1) +#define __NR_inotify_add_watch 27 +__SYSCALL(__NR_inotify_add_watch, sys_inotify_add_watch) +#define __NR_inotify_rm_watch 28 +__SYSCALL(__NR_inotify_rm_watch, sys_inotify_rm_watch) +#define __NR_ioctl 29 +__SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl) +#define __NR_ioprio_set 30 +__SYSCALL(__NR_ioprio_set, sys_ioprio_set) +#define __NR_ioprio_get 31 +__SYSCALL(__NR_ioprio_get, sys_ioprio_get) +#define __NR_flock 32 +__SYSCALL(__NR_flock, sys_flock) +#define __NR_mknodat 33 +__SYSCALL(__NR_mknodat, sys_mknodat) +#define __NR_mkdirat 34 +__SYSCALL(__NR_mkdirat, sys_mkdirat) +#define __NR_unlinkat 35 +__SYSCALL(__NR_unlinkat, sys_unlinkat) +#define __NR_symlinkat 36 +__SYSCALL(__NR_symlinkat, sys_symlinkat) +#define __NR_linkat 37 +__SYSCALL(__NR_linkat, sys_linkat) + +#ifdef __ARCH_WANT_RENAMEAT +/* renameat is superseded with flags by renameat2 */ +#define __NR_renameat 38 +__SYSCALL(__NR_renameat, sys_renameat) +#endif /* __ARCH_WANT_RENAMEAT */ + +#define __NR_umount2 39 +__SYSCALL(__NR_umount2, sys_umount) +#define __NR_mount 40 +__SYSCALL(__NR_mount, sys_mount) +#define __NR_pivot_root 41 +__SYSCALL(__NR_pivot_root, sys_pivot_root) +#define __NR_nfsservctl 42 +__SYSCALL(__NR_nfsservctl, sys_ni_syscall) +#define __NR3264_statfs 43 +__SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \ + compat_sys_statfs64) +#define __NR3264_fstatfs 44 +__SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \ + compat_sys_fstatfs64) +#define __NR3264_truncate 45 +__SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \ + compat_sys_truncate64) +#define __NR3264_ftruncate 46 +__SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \ + compat_sys_ftruncate64) +#define __NR_fallocate 47 +__SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate) +#define __NR_faccessat 48 +__SYSCALL(__NR_faccessat, sys_faccessat) +#define __NR_chdir 49 +__SYSCALL(__NR_chdir, sys_chdir) +#define __NR_fchdir 50 +__SYSCALL(__NR_fchdir, sys_fchdir) +#define __NR_chroot 51 +__SYSCALL(__NR_chroot, sys_chroot) +#define __NR_fchmod 52 +__SYSCALL(__NR_fchmod, sys_fchmod) +#define __NR_fchmodat 53 +__SYSCALL(__NR_fchmodat, sys_fchmodat) +#define __NR_fchownat 54 +__SYSCALL(__NR_fchownat, sys_fchownat) +#define __NR_fchown 55 +__SYSCALL(__NR_fchown, sys_fchown) +#define __NR_openat 56 +__SYSCALL(__NR_openat, sys_openat) +#define __NR_close 57 +__SYSCALL(__NR_close, sys_close) +#define __NR_vhangup 58 +__SYSCALL(__NR_vhangup, sys_vhangup) +#define __NR_pipe2 59 +__SYSCALL(__NR_pipe2, sys_pipe2) +#define __NR_quotactl 60 +__SYSCALL(__NR_quotactl, sys_quotactl) +#define __NR_getdents64 61 +__SYSCALL(__NR_getdents64, sys_getdents64) +#define __NR3264_lseek 62 +__SC_3264(__NR3264_lseek, sys_llseek, sys_lseek) +#define __NR_read 63 +__SYSCALL(__NR_read, sys_read) +#define __NR_write 64 +__SYSCALL(__NR_write, sys_write) +#define __NR_readv 65 +__SC_COMP(__NR_readv, sys_readv, sys_readv) +#define __NR_writev 66 +__SC_COMP(__NR_writev, sys_writev, sys_writev) +#define __NR_pread64 67 +__SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64) +#define __NR_pwrite64 68 +__SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64) +#define __NR_preadv 69 +__SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv) +#define __NR_pwritev 70 +__SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev) +#define __NR3264_sendfile 71 +__SYSCALL(__NR3264_sendfile, sys_sendfile64) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_pselect6 72 +__SC_COMP_3264(__NR_pselect6, sys_pselect6_time32, sys_pselect6, compat_sys_pselect6_time32) +#define __NR_ppoll 73 +__SC_COMP_3264(__NR_ppoll, sys_ppoll_time32, sys_ppoll, compat_sys_ppoll_time32) +#endif + +#define __NR_signalfd4 74 +__SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4) +#define __NR_vmsplice 75 +__SYSCALL(__NR_vmsplice, sys_vmsplice) +#define __NR_splice 76 +__SYSCALL(__NR_splice, sys_splice) +#define __NR_tee 77 +__SYSCALL(__NR_tee, sys_tee) +#define __NR_readlinkat 78 +__SYSCALL(__NR_readlinkat, sys_readlinkat) + +#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64) +#define __NR3264_fstatat 79 +__SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat) +#define __NR3264_fstat 80 +__SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat) +#endif + +#define __NR_sync 81 +__SYSCALL(__NR_sync, sys_sync) +#define __NR_fsync 82 +__SYSCALL(__NR_fsync, sys_fsync) +#define __NR_fdatasync 83 +__SYSCALL(__NR_fdatasync, sys_fdatasync) + +#ifdef __ARCH_WANT_SYNC_FILE_RANGE2 +#define __NR_sync_file_range2 84 +__SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \ + compat_sys_sync_file_range2) +#else +#define __NR_sync_file_range 84 +__SC_COMP(__NR_sync_file_range, sys_sync_file_range, \ + compat_sys_sync_file_range) +#endif + +#define __NR_timerfd_create 85 +__SYSCALL(__NR_timerfd_create, sys_timerfd_create) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_timerfd_settime 86 +__SC_3264(__NR_timerfd_settime, sys_timerfd_settime32, \ + sys_timerfd_settime) +#define __NR_timerfd_gettime 87 +__SC_3264(__NR_timerfd_gettime, sys_timerfd_gettime32, \ + sys_timerfd_gettime) +#endif + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_utimensat 88 +__SC_3264(__NR_utimensat, sys_utimensat_time32, sys_utimensat) +#endif + +#define __NR_acct 89 +__SYSCALL(__NR_acct, sys_acct) +#define __NR_capget 90 +__SYSCALL(__NR_capget, sys_capget) +#define __NR_capset 91 +__SYSCALL(__NR_capset, sys_capset) +#define __NR_personality 92 +__SYSCALL(__NR_personality, sys_personality) +#define __NR_exit 93 +__SYSCALL(__NR_exit, sys_exit) +#define __NR_exit_group 94 +__SYSCALL(__NR_exit_group, sys_exit_group) +#define __NR_waitid 95 +__SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid) +#define __NR_set_tid_address 96 +__SYSCALL(__NR_set_tid_address, sys_set_tid_address) +#define __NR_unshare 97 +__SYSCALL(__NR_unshare, sys_unshare) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_futex 98 +__SC_3264(__NR_futex, sys_futex_time32, sys_futex) +#endif + +#define __NR_set_robust_list 99 +__SC_COMP(__NR_set_robust_list, sys_set_robust_list, \ + compat_sys_set_robust_list) +#define __NR_get_robust_list 100 +__SC_COMP(__NR_get_robust_list, sys_get_robust_list, \ + compat_sys_get_robust_list) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_nanosleep 101 +__SC_3264(__NR_nanosleep, sys_nanosleep_time32, sys_nanosleep) +#endif + +#define __NR_getitimer 102 +__SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer) +#define __NR_setitimer 103 +__SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer) +#define __NR_kexec_load 104 +__SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load) +#define __NR_init_module 105 +__SYSCALL(__NR_init_module, sys_init_module) +#define __NR_delete_module 106 +__SYSCALL(__NR_delete_module, sys_delete_module) +#define __NR_timer_create 107 +__SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_timer_gettime 108 +__SC_3264(__NR_timer_gettime, sys_timer_gettime32, sys_timer_gettime) +#endif + +#define __NR_timer_getoverrun 109 +__SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_timer_settime 110 +__SC_3264(__NR_timer_settime, sys_timer_settime32, sys_timer_settime) +#endif + +#define __NR_timer_delete 111 +__SYSCALL(__NR_timer_delete, sys_timer_delete) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_clock_settime 112 +__SC_3264(__NR_clock_settime, sys_clock_settime32, sys_clock_settime) +#define __NR_clock_gettime 113 +__SC_3264(__NR_clock_gettime, sys_clock_gettime32, sys_clock_gettime) +#define __NR_clock_getres 114 +__SC_3264(__NR_clock_getres, sys_clock_getres_time32, sys_clock_getres) +#define __NR_clock_nanosleep 115 +__SC_3264(__NR_clock_nanosleep, sys_clock_nanosleep_time32, \ + sys_clock_nanosleep) +#endif + +#define __NR_syslog 116 +__SYSCALL(__NR_syslog, sys_syslog) +#define __NR_ptrace 117 +__SC_COMP(__NR_ptrace, sys_ptrace, compat_sys_ptrace) +#define __NR_sched_setparam 118 +__SYSCALL(__NR_sched_setparam, sys_sched_setparam) +#define __NR_sched_setscheduler 119 +__SYSCALL(__NR_sched_setscheduler, sys_sched_setscheduler) +#define __NR_sched_getscheduler 120 +__SYSCALL(__NR_sched_getscheduler, sys_sched_getscheduler) +#define __NR_sched_getparam 121 +__SYSCALL(__NR_sched_getparam, sys_sched_getparam) +#define __NR_sched_setaffinity 122 +__SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \ + compat_sys_sched_setaffinity) +#define __NR_sched_getaffinity 123 +__SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \ + compat_sys_sched_getaffinity) +#define __NR_sched_yield 124 +__SYSCALL(__NR_sched_yield, sys_sched_yield) +#define __NR_sched_get_priority_max 125 +__SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max) +#define __NR_sched_get_priority_min 126 +__SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_sched_rr_get_interval 127 +__SC_3264(__NR_sched_rr_get_interval, sys_sched_rr_get_interval_time32, \ + sys_sched_rr_get_interval) +#endif + +#define __NR_restart_syscall 128 +__SYSCALL(__NR_restart_syscall, sys_restart_syscall) +#define __NR_kill 129 +__SYSCALL(__NR_kill, sys_kill) +#define __NR_tkill 130 +__SYSCALL(__NR_tkill, sys_tkill) +#define __NR_tgkill 131 +__SYSCALL(__NR_tgkill, sys_tgkill) +#define __NR_sigaltstack 132 +__SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack) +#define __NR_rt_sigsuspend 133 +__SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend) +#define __NR_rt_sigaction 134 +__SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction) +#define __NR_rt_sigprocmask 135 +__SC_COMP(__NR_rt_sigprocmask, sys_rt_sigprocmask, compat_sys_rt_sigprocmask) +#define __NR_rt_sigpending 136 +__SC_COMP(__NR_rt_sigpending, sys_rt_sigpending, compat_sys_rt_sigpending) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_rt_sigtimedwait 137 +__SC_COMP_3264(__NR_rt_sigtimedwait, sys_rt_sigtimedwait_time32, \ + sys_rt_sigtimedwait, compat_sys_rt_sigtimedwait_time32) +#endif + +#define __NR_rt_sigqueueinfo 138 +__SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \ + compat_sys_rt_sigqueueinfo) +#define __NR_rt_sigreturn 139 +__SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn) +#define __NR_setpriority 140 +__SYSCALL(__NR_setpriority, sys_setpriority) +#define __NR_getpriority 141 +__SYSCALL(__NR_getpriority, sys_getpriority) +#define __NR_reboot 142 +__SYSCALL(__NR_reboot, sys_reboot) +#define __NR_setregid 143 +__SYSCALL(__NR_setregid, sys_setregid) +#define __NR_setgid 144 +__SYSCALL(__NR_setgid, sys_setgid) +#define __NR_setreuid 145 +__SYSCALL(__NR_setreuid, sys_setreuid) +#define __NR_setuid 146 +__SYSCALL(__NR_setuid, sys_setuid) +#define __NR_setresuid 147 +__SYSCALL(__NR_setresuid, sys_setresuid) +#define __NR_getresuid 148 +__SYSCALL(__NR_getresuid, sys_getresuid) +#define __NR_setresgid 149 +__SYSCALL(__NR_setresgid, sys_setresgid) +#define __NR_getresgid 150 +__SYSCALL(__NR_getresgid, sys_getresgid) +#define __NR_setfsuid 151 +__SYSCALL(__NR_setfsuid, sys_setfsuid) +#define __NR_setfsgid 152 +__SYSCALL(__NR_setfsgid, sys_setfsgid) +#define __NR_times 153 +__SC_COMP(__NR_times, sys_times, compat_sys_times) +#define __NR_setpgid 154 +__SYSCALL(__NR_setpgid, sys_setpgid) +#define __NR_getpgid 155 +__SYSCALL(__NR_getpgid, sys_getpgid) +#define __NR_getsid 156 +__SYSCALL(__NR_getsid, sys_getsid) +#define __NR_setsid 157 +__SYSCALL(__NR_setsid, sys_setsid) +#define __NR_getgroups 158 +__SYSCALL(__NR_getgroups, sys_getgroups) +#define __NR_setgroups 159 +__SYSCALL(__NR_setgroups, sys_setgroups) +#define __NR_uname 160 +__SYSCALL(__NR_uname, sys_newuname) +#define __NR_sethostname 161 +__SYSCALL(__NR_sethostname, sys_sethostname) +#define __NR_setdomainname 162 +__SYSCALL(__NR_setdomainname, sys_setdomainname) + +#ifdef __ARCH_WANT_SET_GET_RLIMIT +/* getrlimit and setrlimit are superseded with prlimit64 */ +#define __NR_getrlimit 163 +__SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit) +#define __NR_setrlimit 164 +__SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit) +#endif + +#define __NR_getrusage 165 +__SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage) +#define __NR_umask 166 +__SYSCALL(__NR_umask, sys_umask) +#define __NR_prctl 167 +__SYSCALL(__NR_prctl, sys_prctl) +#define __NR_getcpu 168 +__SYSCALL(__NR_getcpu, sys_getcpu) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_gettimeofday 169 +__SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday) +#define __NR_settimeofday 170 +__SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday) +#define __NR_adjtimex 171 +__SC_3264(__NR_adjtimex, sys_adjtimex_time32, sys_adjtimex) +#endif + +#define __NR_getpid 172 +__SYSCALL(__NR_getpid, sys_getpid) +#define __NR_getppid 173 +__SYSCALL(__NR_getppid, sys_getppid) +#define __NR_getuid 174 +__SYSCALL(__NR_getuid, sys_getuid) +#define __NR_geteuid 175 +__SYSCALL(__NR_geteuid, sys_geteuid) +#define __NR_getgid 176 +__SYSCALL(__NR_getgid, sys_getgid) +#define __NR_getegid 177 +__SYSCALL(__NR_getegid, sys_getegid) +#define __NR_gettid 178 +__SYSCALL(__NR_gettid, sys_gettid) +#define __NR_sysinfo 179 +__SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo) +#define __NR_mq_open 180 +__SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open) +#define __NR_mq_unlink 181 +__SYSCALL(__NR_mq_unlink, sys_mq_unlink) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_mq_timedsend 182 +__SC_3264(__NR_mq_timedsend, sys_mq_timedsend_time32, sys_mq_timedsend) +#define __NR_mq_timedreceive 183 +__SC_3264(__NR_mq_timedreceive, sys_mq_timedreceive_time32, \ + sys_mq_timedreceive) +#endif + +#define __NR_mq_notify 184 +__SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify) +#define __NR_mq_getsetattr 185 +__SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr) +#define __NR_msgget 186 +__SYSCALL(__NR_msgget, sys_msgget) +#define __NR_msgctl 187 +__SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl) +#define __NR_msgrcv 188 +__SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv) +#define __NR_msgsnd 189 +__SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd) +#define __NR_semget 190 +__SYSCALL(__NR_semget, sys_semget) +#define __NR_semctl 191 +__SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_semtimedop 192 +__SC_3264(__NR_semtimedop, sys_semtimedop_time32, sys_semtimedop) +#endif + +#define __NR_semop 193 +__SYSCALL(__NR_semop, sys_semop) +#define __NR_shmget 194 +__SYSCALL(__NR_shmget, sys_shmget) +#define __NR_shmctl 195 +__SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl) +#define __NR_shmat 196 +__SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat) +#define __NR_shmdt 197 +__SYSCALL(__NR_shmdt, sys_shmdt) +#define __NR_socket 198 +__SYSCALL(__NR_socket, sys_socket) +#define __NR_socketpair 199 +__SYSCALL(__NR_socketpair, sys_socketpair) +#define __NR_bind 200 +__SYSCALL(__NR_bind, sys_bind) +#define __NR_listen 201 +__SYSCALL(__NR_listen, sys_listen) +#define __NR_accept 202 +__SYSCALL(__NR_accept, sys_accept) +#define __NR_connect 203 +__SYSCALL(__NR_connect, sys_connect) +#define __NR_getsockname 204 +__SYSCALL(__NR_getsockname, sys_getsockname) +#define __NR_getpeername 205 +__SYSCALL(__NR_getpeername, sys_getpeername) +#define __NR_sendto 206 +__SYSCALL(__NR_sendto, sys_sendto) +#define __NR_recvfrom 207 +__SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom) +#define __NR_setsockopt 208 +__SC_COMP(__NR_setsockopt, sys_setsockopt, sys_setsockopt) +#define __NR_getsockopt 209 +__SC_COMP(__NR_getsockopt, sys_getsockopt, sys_getsockopt) +#define __NR_shutdown 210 +__SYSCALL(__NR_shutdown, sys_shutdown) +#define __NR_sendmsg 211 +__SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg) +#define __NR_recvmsg 212 +__SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg) +#define __NR_readahead 213 +__SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead) +#define __NR_brk 214 +__SYSCALL(__NR_brk, sys_brk) +#define __NR_munmap 215 +__SYSCALL(__NR_munmap, sys_munmap) +#define __NR_mremap 216 +__SYSCALL(__NR_mremap, sys_mremap) +#define __NR_add_key 217 +__SYSCALL(__NR_add_key, sys_add_key) +#define __NR_request_key 218 +__SYSCALL(__NR_request_key, sys_request_key) +#define __NR_keyctl 219 +__SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl) +#define __NR_clone 220 +__SYSCALL(__NR_clone, sys_clone) +#define __NR_execve 221 +__SC_COMP(__NR_execve, sys_execve, compat_sys_execve) +#define __NR3264_mmap 222 +__SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) +#define __NR3264_fadvise64 223 +__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64) + +/* CONFIG_MMU only */ +#ifndef __ARCH_NOMMU +#define __NR_swapon 224 +__SYSCALL(__NR_swapon, sys_swapon) +#define __NR_swapoff 225 +__SYSCALL(__NR_swapoff, sys_swapoff) +#define __NR_mprotect 226 +__SYSCALL(__NR_mprotect, sys_mprotect) +#define __NR_msync 227 +__SYSCALL(__NR_msync, sys_msync) +#define __NR_mlock 228 +__SYSCALL(__NR_mlock, sys_mlock) +#define __NR_munlock 229 +__SYSCALL(__NR_munlock, sys_munlock) +#define __NR_mlockall 230 +__SYSCALL(__NR_mlockall, sys_mlockall) +#define __NR_munlockall 231 +__SYSCALL(__NR_munlockall, sys_munlockall) +#define __NR_mincore 232 +__SYSCALL(__NR_mincore, sys_mincore) +#define __NR_madvise 233 +__SYSCALL(__NR_madvise, sys_madvise) +#define __NR_remap_file_pages 234 +__SYSCALL(__NR_remap_file_pages, sys_remap_file_pages) +#define __NR_mbind 235 +__SYSCALL(__NR_mbind, sys_mbind) +#define __NR_get_mempolicy 236 +__SYSCALL(__NR_get_mempolicy, sys_get_mempolicy) +#define __NR_set_mempolicy 237 +__SYSCALL(__NR_set_mempolicy, sys_set_mempolicy) +#define __NR_migrate_pages 238 +__SYSCALL(__NR_migrate_pages, sys_migrate_pages) +#define __NR_move_pages 239 +__SYSCALL(__NR_move_pages, sys_move_pages) +#endif + +#define __NR_rt_tgsigqueueinfo 240 +__SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \ + compat_sys_rt_tgsigqueueinfo) +#define __NR_perf_event_open 241 +__SYSCALL(__NR_perf_event_open, sys_perf_event_open) +#define __NR_accept4 242 +__SYSCALL(__NR_accept4, sys_accept4) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_recvmmsg 243 +__SC_COMP_3264(__NR_recvmmsg, sys_recvmmsg_time32, sys_recvmmsg, compat_sys_recvmmsg_time32) +#endif + +/* + * Architectures may provide up to 16 syscalls of their own + * starting with this value. + */ +#define __NR_arch_specific_syscall 244 + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_wait4 260 +__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4) +#endif + +#define __NR_prlimit64 261 +__SYSCALL(__NR_prlimit64, sys_prlimit64) +#define __NR_fanotify_init 262 +__SYSCALL(__NR_fanotify_init, sys_fanotify_init) +#define __NR_fanotify_mark 263 +__SYSCALL(__NR_fanotify_mark, sys_fanotify_mark) +#define __NR_name_to_handle_at 264 +__SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at) +#define __NR_open_by_handle_at 265 +__SYSCALL(__NR_open_by_handle_at, sys_open_by_handle_at) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_clock_adjtime 266 +__SC_3264(__NR_clock_adjtime, sys_clock_adjtime32, sys_clock_adjtime) +#endif + +#define __NR_syncfs 267 +__SYSCALL(__NR_syncfs, sys_syncfs) +#define __NR_setns 268 +__SYSCALL(__NR_setns, sys_setns) +#define __NR_sendmmsg 269 +__SC_COMP(__NR_sendmmsg, sys_sendmmsg, compat_sys_sendmmsg) +#define __NR_process_vm_readv 270 +__SYSCALL(__NR_process_vm_readv, sys_process_vm_readv) +#define __NR_process_vm_writev 271 +__SYSCALL(__NR_process_vm_writev, sys_process_vm_writev) +#define __NR_kcmp 272 +__SYSCALL(__NR_kcmp, sys_kcmp) +#define __NR_finit_module 273 +__SYSCALL(__NR_finit_module, sys_finit_module) +#define __NR_sched_setattr 274 +__SYSCALL(__NR_sched_setattr, sys_sched_setattr) +#define __NR_sched_getattr 275 +__SYSCALL(__NR_sched_getattr, sys_sched_getattr) +#define __NR_renameat2 276 +__SYSCALL(__NR_renameat2, sys_renameat2) +#define __NR_seccomp 277 +__SYSCALL(__NR_seccomp, sys_seccomp) +#define __NR_getrandom 278 +__SYSCALL(__NR_getrandom, sys_getrandom) +#define __NR_memfd_create 279 +__SYSCALL(__NR_memfd_create, sys_memfd_create) +#define __NR_bpf 280 +__SYSCALL(__NR_bpf, sys_bpf) +#define __NR_execveat 281 +__SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) +#define __NR_userfaultfd 282 +__SYSCALL(__NR_userfaultfd, sys_userfaultfd) +#define __NR_membarrier 283 +__SYSCALL(__NR_membarrier, sys_membarrier) +#define __NR_mlock2 284 +__SYSCALL(__NR_mlock2, sys_mlock2) +#define __NR_copy_file_range 285 +__SYSCALL(__NR_copy_file_range, sys_copy_file_range) +#define __NR_preadv2 286 +__SC_COMP(__NR_preadv2, sys_preadv2, compat_sys_preadv2) +#define __NR_pwritev2 287 +__SC_COMP(__NR_pwritev2, sys_pwritev2, compat_sys_pwritev2) +#define __NR_pkey_mprotect 288 +__SYSCALL(__NR_pkey_mprotect, sys_pkey_mprotect) +#define __NR_pkey_alloc 289 +__SYSCALL(__NR_pkey_alloc, sys_pkey_alloc) +#define __NR_pkey_free 290 +__SYSCALL(__NR_pkey_free, sys_pkey_free) +#define __NR_statx 291 +__SYSCALL(__NR_statx, sys_statx) + +#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32 +#define __NR_io_pgetevents 292 +__SC_COMP_3264(__NR_io_pgetevents, sys_io_pgetevents_time32, sys_io_pgetevents, compat_sys_io_pgetevents) +#endif + +#define __NR_rseq 293 +__SYSCALL(__NR_rseq, sys_rseq) +#define __NR_kexec_file_load 294 +__SYSCALL(__NR_kexec_file_load, sys_kexec_file_load) + +/* 295 through 402 are unassigned to sync up with generic numbers, don't use */ + +#if defined(__SYSCALL_COMPAT) || __BITS_PER_LONG == 32 +#define __NR_clock_gettime64 403 +__SYSCALL(__NR_clock_gettime64, sys_clock_gettime) +#define __NR_clock_settime64 404 +__SYSCALL(__NR_clock_settime64, sys_clock_settime) +#define __NR_clock_adjtime64 405 +__SYSCALL(__NR_clock_adjtime64, sys_clock_adjtime) +#define __NR_clock_getres_time64 406 +__SYSCALL(__NR_clock_getres_time64, sys_clock_getres) +#define __NR_clock_nanosleep_time64 407 +__SYSCALL(__NR_clock_nanosleep_time64, sys_clock_nanosleep) +#define __NR_timer_gettime64 408 +__SYSCALL(__NR_timer_gettime64, sys_timer_gettime) +#define __NR_timer_settime64 409 +__SYSCALL(__NR_timer_settime64, sys_timer_settime) +#define __NR_timerfd_gettime64 410 +__SYSCALL(__NR_timerfd_gettime64, sys_timerfd_gettime) +#define __NR_timerfd_settime64 411 +__SYSCALL(__NR_timerfd_settime64, sys_timerfd_settime) +#define __NR_utimensat_time64 412 +__SYSCALL(__NR_utimensat_time64, sys_utimensat) +#define __NR_pselect6_time64 413 +__SC_COMP(__NR_pselect6_time64, sys_pselect6, compat_sys_pselect6_time64) +#define __NR_ppoll_time64 414 +__SC_COMP(__NR_ppoll_time64, sys_ppoll, compat_sys_ppoll_time64) +#define __NR_io_pgetevents_time64 416 +__SC_COMP(__NR_io_pgetevents_time64, sys_io_pgetevents, compat_sys_io_pgetevents_time64) +#define __NR_recvmmsg_time64 417 +__SC_COMP(__NR_recvmmsg_time64, sys_recvmmsg, compat_sys_recvmmsg_time64) +#define __NR_mq_timedsend_time64 418 +__SYSCALL(__NR_mq_timedsend_time64, sys_mq_timedsend) +#define __NR_mq_timedreceive_time64 419 +__SYSCALL(__NR_mq_timedreceive_time64, sys_mq_timedreceive) +#define __NR_semtimedop_time64 420 +__SYSCALL(__NR_semtimedop_time64, sys_semtimedop) +#define __NR_rt_sigtimedwait_time64 421 +__SC_COMP(__NR_rt_sigtimedwait_time64, sys_rt_sigtimedwait, compat_sys_rt_sigtimedwait_time64) +#define __NR_futex_time64 422 +__SYSCALL(__NR_futex_time64, sys_futex) +#define __NR_sched_rr_get_interval_time64 423 +__SYSCALL(__NR_sched_rr_get_interval_time64, sys_sched_rr_get_interval) +#endif + +#define __NR_pidfd_send_signal 424 +__SYSCALL(__NR_pidfd_send_signal, sys_pidfd_send_signal) +#define __NR_io_uring_setup 425 +__SYSCALL(__NR_io_uring_setup, sys_io_uring_setup) +#define __NR_io_uring_enter 426 +__SYSCALL(__NR_io_uring_enter, sys_io_uring_enter) +#define __NR_io_uring_register 427 +__SYSCALL(__NR_io_uring_register, sys_io_uring_register) +#define __NR_open_tree 428 +__SYSCALL(__NR_open_tree, sys_open_tree) +#define __NR_move_mount 429 +__SYSCALL(__NR_move_mount, sys_move_mount) +#define __NR_fsopen 430 +__SYSCALL(__NR_fsopen, sys_fsopen) +#define __NR_fsconfig 431 +__SYSCALL(__NR_fsconfig, sys_fsconfig) +#define __NR_fsmount 432 +__SYSCALL(__NR_fsmount, sys_fsmount) +#define __NR_fspick 433 +__SYSCALL(__NR_fspick, sys_fspick) +#define __NR_pidfd_open 434 +__SYSCALL(__NR_pidfd_open, sys_pidfd_open) +#define __NR_clone3 435 +__SYSCALL(__NR_clone3, sys_clone3) +#define __NR_close_range 436 +__SYSCALL(__NR_close_range, sys_close_range) +#define __NR_openat2 437 +__SYSCALL(__NR_openat2, sys_openat2) +#define __NR_pidfd_getfd 438 +__SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd) +#define __NR_faccessat2 439 +__SYSCALL(__NR_faccessat2, sys_faccessat2) +#define __NR_process_madvise 440 +__SYSCALL(__NR_process_madvise, sys_process_madvise) +#define __NR_epoll_pwait2 441 +__SC_COMP(__NR_epoll_pwait2, sys_epoll_pwait2, compat_sys_epoll_pwait2) +#define __NR_mount_setattr 442 +__SYSCALL(__NR_mount_setattr, sys_mount_setattr) +#define __NR_quotactl_fd 443 +__SYSCALL(__NR_quotactl_fd, sys_quotactl_fd) +#define __NR_landlock_create_ruleset 444 +__SYSCALL(__NR_landlock_create_ruleset, sys_landlock_create_ruleset) +#define __NR_landlock_add_rule 445 +__SYSCALL(__NR_landlock_add_rule, sys_landlock_add_rule) +#define __NR_landlock_restrict_self 446 +__SYSCALL(__NR_landlock_restrict_self, sys_landlock_restrict_self) + +#ifdef __ARCH_WANT_MEMFD_SECRET +#define __NR_memfd_secret 447 +__SYSCALL(__NR_memfd_secret, sys_memfd_secret) +#endif + +#define __NR_process_mrelease 448 +__SYSCALL(__NR_process_mrelease, sys_process_mrelease) +#define __NR_futex_waitv 449 +__SYSCALL(__NR_futex_waitv, sys_futex_waitv) +#define __NR_set_mempolicy_home_node 450 +__SYSCALL(__NR_set_mempolicy_home_node, sys_set_mempolicy_home_node) +#define __NR_cachestat 451 +__SYSCALL(__NR_cachestat, sys_cachestat) +#define __NR_fchmodat2 452 +__SYSCALL(__NR_fchmodat2, sys_fchmodat2) +#define __NR_map_shadow_stack 453 +__SYSCALL(__NR_map_shadow_stack, sys_map_shadow_stack) +#define __NR_futex_wake 454 +__SYSCALL(__NR_futex_wake, sys_futex_wake) +#define __NR_futex_wait 455 +__SYSCALL(__NR_futex_wait, sys_futex_wait) +#define __NR_futex_requeue 456 +__SYSCALL(__NR_futex_requeue, sys_futex_requeue) + +#define __NR_statmount 457 +__SYSCALL(__NR_statmount, sys_statmount) + +#define __NR_listmount 458 +__SYSCALL(__NR_listmount, sys_listmount) + +#define __NR_lsm_get_self_attr 459 +__SYSCALL(__NR_lsm_get_self_attr, sys_lsm_get_self_attr) +#define __NR_lsm_set_self_attr 460 +__SYSCALL(__NR_lsm_set_self_attr, sys_lsm_set_self_attr) +#define __NR_lsm_list_modules 461 +__SYSCALL(__NR_lsm_list_modules, sys_lsm_list_modules) + +#define __NR_mseal 462 +__SYSCALL(__NR_mseal, sys_mseal) + +#undef __NR_syscalls +#define __NR_syscalls 463 + +/* + * 32 bit systems traditionally used different + * syscalls for off_t and loff_t arguments, while + * 64 bit systems only need the off_t version. + * For new 32 bit platforms, there is no need to + * implement the old 32 bit off_t syscalls, so + * they take different names. + * Here we map the numbers so that both versions + * use the same syscall table layout. + */ +#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT) +#define __NR_fcntl __NR3264_fcntl +#define __NR_statfs __NR3264_statfs +#define __NR_fstatfs __NR3264_fstatfs +#define __NR_truncate __NR3264_truncate +#define __NR_ftruncate __NR3264_ftruncate +#define __NR_lseek __NR3264_lseek +#define __NR_sendfile __NR3264_sendfile +#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64) +#define __NR_newfstatat __NR3264_fstatat +#define __NR_fstat __NR3264_fstat +#endif +#define __NR_mmap __NR3264_mmap +#define __NR_fadvise64 __NR3264_fadvise64 +#ifdef __NR3264_stat +#define __NR_stat __NR3264_stat +#define __NR_lstat __NR3264_lstat +#endif +#else +#define __NR_fcntl64 __NR3264_fcntl +#define __NR_statfs64 __NR3264_statfs +#define __NR_fstatfs64 __NR3264_fstatfs +#define __NR_truncate64 __NR3264_truncate +#define __NR_ftruncate64 __NR3264_ftruncate +#define __NR_llseek __NR3264_lseek +#define __NR_sendfile64 __NR3264_sendfile +#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64) +#define __NR_fstatat64 __NR3264_fstatat +#define __NR_fstat64 __NR3264_fstat +#endif +#define __NR_mmap2 __NR3264_mmap +#define __NR_fadvise64_64 __NR3264_fadvise64 +#ifdef __NR3264_stat +#define __NR_stat64 __NR3264_stat +#define __NR_lstat64 __NR3264_lstat +#endif +#endif diff --git a/board/mentalnet/overlay/usr/include/asm/a.out.h b/board/mentalnet/overlay/usr/include/asm/a.out.h new file mode 100644 index 0000000..094c49d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm/a.out.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_X86_A_OUT_H +#define _ASM_X86_A_OUT_H + +struct exec +{ + unsigned int a_info; /* Use macros N_MAGIC, etc for access */ + unsigned a_text; /* length of text, in bytes */ + unsigned a_data; /* length of data, in bytes */ + unsigned a_bss; /* length of uninitialized data area for file, in bytes */ + unsigned a_syms; /* length of symbol table data in file, in bytes */ + unsigned a_entry; /* start address */ + unsigned a_trsize; /* length of relocation info for text, in bytes */ + unsigned a_drsize; /* length of relocation info for data, in bytes */ +}; + +#define N_TRSIZE(a) ((a).a_trsize) +#define N_DRSIZE(a) ((a).a_drsize) +#define N_SYMSIZE(a) ((a).a_syms) + +#endif /* _ASM_X86_A_OUT_H */ diff --git a/board/mentalnet/overlay/usr/include/asm/amd_hsmp.h b/board/mentalnet/overlay/usr/include/asm/amd_hsmp.h new file mode 100644 index 0000000..0d5f6d6 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm/amd_hsmp.h @@ -0,0 +1,416 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ + +#ifndef _ASM_X86_AMD_HSMP_H_ +#define _ASM_X86_AMD_HSMP_H_ + +#include + +#pragma pack(4) + +#define HSMP_MAX_MSG_LEN 8 + +/* + * HSMP Messages supported + */ +enum hsmp_message_ids { + HSMP_TEST = 1, /* 01h Increments input value by 1 */ + HSMP_GET_SMU_VER, /* 02h SMU FW version */ + HSMP_GET_PROTO_VER, /* 03h HSMP interface version */ + HSMP_GET_SOCKET_POWER, /* 04h average package power consumption */ + HSMP_SET_SOCKET_POWER_LIMIT, /* 05h Set the socket power limit */ + HSMP_GET_SOCKET_POWER_LIMIT, /* 06h Get current socket power limit */ + HSMP_GET_SOCKET_POWER_LIMIT_MAX,/* 07h Get maximum socket power value */ + HSMP_SET_BOOST_LIMIT, /* 08h Set a core maximum frequency limit */ + HSMP_SET_BOOST_LIMIT_SOCKET, /* 09h Set socket maximum frequency level */ + HSMP_GET_BOOST_LIMIT, /* 0Ah Get current frequency limit */ + HSMP_GET_PROC_HOT, /* 0Bh Get PROCHOT status */ + HSMP_SET_XGMI_LINK_WIDTH, /* 0Ch Set max and min width of xGMI Link */ + HSMP_SET_DF_PSTATE, /* 0Dh Alter APEnable/Disable messages behavior */ + HSMP_SET_AUTO_DF_PSTATE, /* 0Eh Enable DF P-State Performance Boost algorithm */ + HSMP_GET_FCLK_MCLK, /* 0Fh Get FCLK and MEMCLK for current socket */ + HSMP_GET_CCLK_THROTTLE_LIMIT, /* 10h Get CCLK frequency limit in socket */ + HSMP_GET_C0_PERCENT, /* 11h Get average C0 residency in socket */ + HSMP_SET_NBIO_DPM_LEVEL, /* 12h Set max/min LCLK DPM Level for a given NBIO */ + HSMP_GET_NBIO_DPM_LEVEL, /* 13h Get LCLK DPM level min and max for a given NBIO */ + HSMP_GET_DDR_BANDWIDTH, /* 14h Get theoretical maximum and current DDR Bandwidth */ + HSMP_GET_TEMP_MONITOR, /* 15h Get socket temperature */ + HSMP_GET_DIMM_TEMP_RANGE, /* 16h Get per-DIMM temperature range and refresh rate */ + HSMP_GET_DIMM_POWER, /* 17h Get per-DIMM power consumption */ + HSMP_GET_DIMM_THERMAL, /* 18h Get per-DIMM thermal sensors */ + HSMP_GET_SOCKET_FREQ_LIMIT, /* 19h Get current active frequency per socket */ + HSMP_GET_CCLK_CORE_LIMIT, /* 1Ah Get CCLK frequency limit per core */ + HSMP_GET_RAILS_SVI, /* 1Bh Get SVI-based Telemetry for all rails */ + HSMP_GET_SOCKET_FMAX_FMIN, /* 1Ch Get Fmax and Fmin per socket */ + HSMP_GET_IOLINK_BANDWITH, /* 1Dh Get current bandwidth on IO Link */ + HSMP_GET_XGMI_BANDWITH, /* 1Eh Get current bandwidth on xGMI Link */ + HSMP_SET_GMI3_WIDTH, /* 1Fh Set max and min GMI3 Link width */ + HSMP_SET_PCI_RATE, /* 20h Control link rate on PCIe devices */ + HSMP_SET_POWER_MODE, /* 21h Select power efficiency profile policy */ + HSMP_SET_PSTATE_MAX_MIN, /* 22h Set the max and min DF P-State */ + HSMP_GET_METRIC_TABLE_VER, /* 23h Get metrics table version */ + HSMP_GET_METRIC_TABLE, /* 24h Get metrics table */ + HSMP_GET_METRIC_TABLE_DRAM_ADDR,/* 25h Get metrics table dram address */ + HSMP_MSG_ID_MAX, +}; + +struct hsmp_message { + __u32 msg_id; /* Message ID */ + __u16 num_args; /* Number of input argument words in message */ + __u16 response_sz; /* Number of expected output/response words */ + __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ + __u16 sock_ind; /* socket number */ +}; + +enum hsmp_msg_type { + HSMP_RSVD = -1, + HSMP_SET = 0, + HSMP_GET = 1, +}; + +enum hsmp_proto_versions { + HSMP_PROTO_VER2 = 2, + HSMP_PROTO_VER3, + HSMP_PROTO_VER4, + HSMP_PROTO_VER5, + HSMP_PROTO_VER6 +}; + +struct hsmp_msg_desc { + int num_args; + int response_sz; + enum hsmp_msg_type type; +}; + +/* + * User may use these comments as reference, please find the + * supported list of messages and message definition in the + * HSMP chapter of respective family/model PPR. + * + * Not supported messages would return -ENOMSG. + */ +static const struct hsmp_msg_desc hsmp_msg_desc_table[] = { + /* RESERVED */ + {0, 0, HSMP_RSVD}, + + /* + * HSMP_TEST, num_args = 1, response_sz = 1 + * input: args[0] = xx + * output: args[0] = xx + 1 + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_SMU_VER, num_args = 0, response_sz = 1 + * output: args[0] = smu fw ver + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_PROTO_VER, num_args = 0, response_sz = 1 + * output: args[0] = proto version + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_SOCKET_POWER, num_args = 0, response_sz = 1 + * output: args[0] = socket power in mWatts + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_SET_SOCKET_POWER_LIMIT, num_args = 1, response_sz = 0 + * input: args[0] = power limit value in mWatts + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_GET_SOCKET_POWER_LIMIT, num_args = 0, response_sz = 1 + * output: args[0] = socket power limit value in mWatts + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_SOCKET_POWER_LIMIT_MAX, num_args = 0, response_sz = 1 + * output: args[0] = maximuam socket power limit in mWatts + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_SET_BOOST_LIMIT, num_args = 1, response_sz = 0 + * input: args[0] = apic id[31:16] + boost limit value in MHz[15:0] + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_SET_BOOST_LIMIT_SOCKET, num_args = 1, response_sz = 0 + * input: args[0] = boost limit value in MHz + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_GET_BOOST_LIMIT, num_args = 1, response_sz = 1 + * input: args[0] = apic id + * output: args[0] = boost limit value in MHz + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_PROC_HOT, num_args = 0, response_sz = 1 + * output: args[0] = proc hot status + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_SET_XGMI_LINK_WIDTH, num_args = 1, response_sz = 0 + * input: args[0] = min link width[15:8] + max link width[7:0] + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_SET_DF_PSTATE, num_args = 1, response_sz = 0 + * input: args[0] = df pstate[7:0] + */ + {1, 0, HSMP_SET}, + + /* HSMP_SET_AUTO_DF_PSTATE, num_args = 0, response_sz = 0 */ + {0, 0, HSMP_SET}, + + /* + * HSMP_GET_FCLK_MCLK, num_args = 0, response_sz = 2 + * output: args[0] = fclk in MHz, args[1] = mclk in MHz + */ + {0, 2, HSMP_GET}, + + /* + * HSMP_GET_CCLK_THROTTLE_LIMIT, num_args = 0, response_sz = 1 + * output: args[0] = core clock in MHz + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_C0_PERCENT, num_args = 0, response_sz = 1 + * output: args[0] = average c0 residency + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_SET_NBIO_DPM_LEVEL, num_args = 1, response_sz = 0 + * input: args[0] = nbioid[23:16] + max dpm level[15:8] + min dpm level[7:0] + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_GET_NBIO_DPM_LEVEL, num_args = 1, response_sz = 1 + * input: args[0] = nbioid[23:16] + * output: args[0] = max dpm level[15:8] + min dpm level[7:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_DDR_BANDWIDTH, num_args = 0, response_sz = 1 + * output: args[0] = max bw in Gbps[31:20] + utilised bw in Gbps[19:8] + + * bw in percentage[7:0] + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_TEMP_MONITOR, num_args = 0, response_sz = 1 + * output: args[0] = temperature in degree celsius. [15:8] integer part + + * [7:5] fractional part + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_DIMM_TEMP_RANGE, num_args = 1, response_sz = 1 + * input: args[0] = DIMM address[7:0] + * output: args[0] = refresh rate[3] + temperature range[2:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_DIMM_POWER, num_args = 1, response_sz = 1 + * input: args[0] = DIMM address[7:0] + * output: args[0] = DIMM power in mW[31:17] + update rate in ms[16:8] + + * DIMM address[7:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_DIMM_THERMAL, num_args = 1, response_sz = 1 + * input: args[0] = DIMM address[7:0] + * output: args[0] = temperature in degree celsius[31:21] + update rate in ms[16:8] + + * DIMM address[7:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_SOCKET_FREQ_LIMIT, num_args = 0, response_sz = 1 + * output: args[0] = frequency in MHz[31:16] + frequency source[15:0] + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_CCLK_CORE_LIMIT, num_args = 1, response_sz = 1 + * input: args[0] = apic id [31:0] + * output: args[0] = frequency in MHz[31:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_RAILS_SVI, num_args = 0, response_sz = 1 + * output: args[0] = power in mW[31:0] + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_SOCKET_FMAX_FMIN, num_args = 0, response_sz = 1 + * output: args[0] = fmax in MHz[31:16] + fmin in MHz[15:0] + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_IOLINK_BANDWITH, num_args = 1, response_sz = 1 + * input: args[0] = link id[15:8] + bw type[2:0] + * output: args[0] = io bandwidth in Mbps[31:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_GET_XGMI_BANDWITH, num_args = 1, response_sz = 1 + * input: args[0] = link id[15:8] + bw type[2:0] + * output: args[0] = xgmi bandwidth in Mbps[31:0] + */ + {1, 1, HSMP_GET}, + + /* + * HSMP_SET_GMI3_WIDTH, num_args = 1, response_sz = 0 + * input: args[0] = min link width[15:8] + max link width[7:0] + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_SET_PCI_RATE, num_args = 1, response_sz = 1 + * input: args[0] = link rate control value + * output: args[0] = previous link rate control value + */ + {1, 1, HSMP_SET}, + + /* + * HSMP_SET_POWER_MODE, num_args = 1, response_sz = 0 + * input: args[0] = power efficiency mode[2:0] + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_SET_PSTATE_MAX_MIN, num_args = 1, response_sz = 0 + * input: args[0] = min df pstate[15:8] + max df pstate[7:0] + */ + {1, 0, HSMP_SET}, + + /* + * HSMP_GET_METRIC_TABLE_VER, num_args = 0, response_sz = 1 + * output: args[0] = metrics table version + */ + {0, 1, HSMP_GET}, + + /* + * HSMP_GET_METRIC_TABLE, num_args = 0, response_sz = 0 + */ + {0, 0, HSMP_GET}, + + /* + * HSMP_GET_METRIC_TABLE_DRAM_ADDR, num_args = 0, response_sz = 2 + * output: args[0] = lower 32 bits of the address + * output: args[1] = upper 32 bits of the address + */ + {0, 2, HSMP_GET}, +}; + +/* Metrics table (supported only with proto version 6) */ +struct hsmp_metric_table { + __u32 accumulation_counter; + + /* TEMPERATURE */ + __u32 max_socket_temperature; + __u32 max_vr_temperature; + __u32 max_hbm_temperature; + __u64 max_socket_temperature_acc; + __u64 max_vr_temperature_acc; + __u64 max_hbm_temperature_acc; + + /* POWER */ + __u32 socket_power_limit; + __u32 max_socket_power_limit; + __u32 socket_power; + + /* ENERGY */ + __u64 timestamp; + __u64 socket_energy_acc; + __u64 ccd_energy_acc; + __u64 xcd_energy_acc; + __u64 aid_energy_acc; + __u64 hbm_energy_acc; + + /* FREQUENCY */ + __u32 cclk_frequency_limit; + __u32 gfxclk_frequency_limit; + __u32 fclk_frequency; + __u32 uclk_frequency; + __u32 socclk_frequency[4]; + __u32 vclk_frequency[4]; + __u32 dclk_frequency[4]; + __u32 lclk_frequency[4]; + __u64 gfxclk_frequency_acc[8]; + __u64 cclk_frequency_acc[96]; + + /* FREQUENCY RANGE */ + __u32 max_cclk_frequency; + __u32 min_cclk_frequency; + __u32 max_gfxclk_frequency; + __u32 min_gfxclk_frequency; + __u32 fclk_frequency_table[4]; + __u32 uclk_frequency_table[4]; + __u32 socclk_frequency_table[4]; + __u32 vclk_frequency_table[4]; + __u32 dclk_frequency_table[4]; + __u32 lclk_frequency_table[4]; + __u32 max_lclk_dpm_range; + __u32 min_lclk_dpm_range; + + /* XGMI */ + __u32 xgmi_width; + __u32 xgmi_bitrate; + __u64 xgmi_read_bandwidth_acc[8]; + __u64 xgmi_write_bandwidth_acc[8]; + + /* ACTIVITY */ + __u32 socket_c0_residency; + __u32 socket_gfx_busy; + __u32 dram_bandwidth_utilization; + __u64 socket_c0_residency_acc; + __u64 socket_gfx_busy_acc; + __u64 dram_bandwidth_acc; + __u32 max_dram_bandwidth; + __u64 dram_bandwidth_utilization_acc; + __u64 pcie_bandwidth_acc[4]; + + /* THROTTLERS */ + __u32 prochot_residency_acc; + __u32 ppt_residency_acc; + __u32 socket_thm_residency_acc; + __u32 vr_thm_residency_acc; + __u32 hbm_thm_residency_acc; + __u32 spare; + + /* New items at the end to maintain driver compatibility */ + __u32 gfxclk_frequency[8]; +}; + +/* Reset to default packing */ +#pragma pack() + +/* Define unique ioctl command for hsmp msgs using generic _IOWR */ +#define HSMP_BASE_IOCTL_NR 0xF8 +#define HSMP_IOCTL_CMD _IOWR(HSMP_BASE_IOCTL_NR, 0, struct hsmp_message) + +#endif /*_ASM_X86_AMD_HSMP_H_*/ diff --git a/board/mentalnet/overlay/usr/include/asm/auxvec.h b/board/mentalnet/overlay/usr/include/asm/auxvec.h new file mode 100644 index 0000000..6beb55b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm/auxvec.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_X86_AUXVEC_H +#define _ASM_X86_AUXVEC_H +/* + * Architecture-neutral AT_ values in 0-17, leave some room + * for more of them, start the x86-specific ones at 32. + */ +#ifdef __i386__ +#define AT_SYSINFO 32 +#endif +#define AT_SYSINFO_EHDR 33 + +/* entries in ARCH_DLINFO: */ +#if defined(CONFIG_IA32_EMULATION) || !defined(CONFIG_X86_64) +# define AT_VECTOR_SIZE_ARCH 3 +#else /* else it's non-compat x86-64 */ +# define AT_VECTOR_SIZE_ARCH 2 +#endif + +#endif /* _ASM_X86_AUXVEC_H */ diff --git a/board/mentalnet/overlay/usr/include/asm/bitsperlong.h b/board/mentalnet/overlay/usr/include/asm/bitsperlong.h new file mode 100644 index 0000000..5d72c84 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm/bitsperlong.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef __ASM_X86_BITSPERLONG_H +#define __ASM_X86_BITSPERLONG_H + +#if defined(__x86_64__) && !defined(__ILP32__) +# define __BITS_PER_LONG 64 +#else +# define __BITS_PER_LONG 32 +#endif + +#include + +#endif /* __ASM_X86_BITSPERLONG_H */ + diff --git a/board/mentalnet/overlay/usr/include/asm/boot.h b/board/mentalnet/overlay/usr/include/asm/boot.h new file mode 100644 index 0000000..a85c77d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm/boot.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_X86_BOOT_H +#define _ASM_X86_BOOT_H + +/* Internal svga startup constants */ +#define NORMAL_VGA 0xffff /* 80x25 mode */ +#define EXTENDED_VGA 0xfffe /* 80x50 mode */ +#define ASK_VGA 0xfffd /* ask for it at bootup */ + + +#endif /* _ASM_X86_BOOT_H */ diff --git a/board/mentalnet/overlay/usr/include/asm/bootparam.h b/board/mentalnet/overlay/usr/include/asm/bootparam.h new file mode 100644 index 0000000..1297719 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/asm/bootparam.h @@ -0,0 +1,215 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _ASM_X86_BOOTPARAM_H +#define _ASM_X86_BOOTPARAM_H + +#include + +/* ram_size flags */ +#define RAMDISK_IMAGE_START_MASK 0x07FF +#define RAMDISK_PROMPT_FLAG 0x8000 +#define RAMDISK_LOAD_FLAG 0x4000 + +/* loadflags */ +#define LOADED_HIGH (1<<0) +#define KASLR_FLAG (1<<1) +#define QUIET_FLAG (1<<5) +#define KEEP_SEGMENTS (1<<6) +#define CAN_USE_HEAP (1<<7) + +/* xloadflags */ +#define XLF_KERNEL_64 (1<<0) +#define XLF_CAN_BE_LOADED_ABOVE_4G (1<<1) +#define XLF_EFI_HANDOVER_32 (1<<2) +#define XLF_EFI_HANDOVER_64 (1<<3) +#define XLF_EFI_KEXEC (1<<4) +#define XLF_5LEVEL (1<<5) +#define XLF_5LEVEL_ENABLED (1<<6) +#define XLF_MEM_ENCRYPTION (1<<7) + +#ifndef __ASSEMBLER__ + +#include +#include +#include +#include +#include +#include Fossil configuration management +** system. ^The SQLITE_SOURCE_ID macro evaluates to +** a string which identifies a particular check-in of SQLite +** within its configuration management system. ^The SQLITE_SOURCE_ID +** string contains the date and time of the check-in (UTC) and a SHA1 +** or SHA3-256 hash of the entire source tree. If the source code has +** been edited in any way since it was last checked in, then the last +** four hexadecimal digits of the hash may be modified. +** +** See also: [sqlite3_libversion()], +** [sqlite3_libversion_number()], [sqlite3_sourceid()], +** [sqlite_version()] and [sqlite_source_id()]. +*/ +#define SQLITE_VERSION "3.50.4" +#define SQLITE_VERSION_NUMBER 3050004 +#define SQLITE_SOURCE_ID "2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3" + +/* +** CAPI3REF: Run-Time Library Version Numbers +** KEYWORDS: sqlite3_version sqlite3_sourceid +** +** These interfaces provide the same information as the [SQLITE_VERSION], +** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros +** but are associated with the library instead of the header file. ^(Cautious +** programmers might include assert() statements in their application to +** verify that values returned by these interfaces match the macros in +** the header, and thus ensure that the application is +** compiled with matching library and header files. +** +**
+** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
+** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
+** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
+** 
)^ +** +** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION] +** macro. ^The sqlite3_libversion() function returns a pointer to the +** to the sqlite3_version[] string constant. The sqlite3_libversion() +** function is provided for use in DLLs since DLL users usually do not have +** direct access to string constants within the DLL. ^The +** sqlite3_libversion_number() function returns an integer equal to +** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns +** a pointer to a string constant whose value is the same as the +** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built +** using an edited copy of [the amalgamation], then the last four characters +** of the hash might be different from [SQLITE_SOURCE_ID].)^ +** +** See also: [sqlite_version()] and [sqlite_source_id()]. +*/ +SQLITE_API SQLITE_EXTERN const char sqlite3_version[]; +SQLITE_API const char *sqlite3_libversion(void); +SQLITE_API const char *sqlite3_sourceid(void); +SQLITE_API int sqlite3_libversion_number(void); + +/* +** CAPI3REF: Run-Time Library Compilation Options Diagnostics +** +** ^The sqlite3_compileoption_used() function returns 0 or 1 +** indicating whether the specified option was defined at +** compile time. ^The SQLITE_ prefix may be omitted from the +** option name passed to sqlite3_compileoption_used(). +** +** ^The sqlite3_compileoption_get() function allows iterating +** over the list of options that were defined at compile time by +** returning the N-th compile time option string. ^If N is out of range, +** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_ +** prefix is omitted from any strings returned by +** sqlite3_compileoption_get(). +** +** ^Support for the diagnostic functions sqlite3_compileoption_used() +** and sqlite3_compileoption_get() may be omitted by specifying the +** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time. +** +** See also: SQL functions [sqlite_compileoption_used()] and +** [sqlite_compileoption_get()] and the [compile_options pragma]. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +SQLITE_API int sqlite3_compileoption_used(const char *zOptName); +SQLITE_API const char *sqlite3_compileoption_get(int N); +#else +# define sqlite3_compileoption_used(X) 0 +# define sqlite3_compileoption_get(X) ((void*)0) +#endif + +/* +** CAPI3REF: Test To See If The Library Is Threadsafe +** +** ^The sqlite3_threadsafe() function returns zero if and only if +** SQLite was compiled with mutexing code omitted due to the +** [SQLITE_THREADSAFE] compile-time option being set to 0. +** +** SQLite can be compiled with or without mutexes. When +** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes +** are enabled and SQLite is threadsafe. When the +** [SQLITE_THREADSAFE] macro is 0, +** the mutexes are omitted. Without the mutexes, it is not safe +** to use SQLite concurrently from more than one thread. +** +** Enabling mutexes incurs a measurable performance penalty. +** So if speed is of utmost importance, it makes sense to disable +** the mutexes. But for maximum safety, mutexes should be enabled. +** ^The default behavior is for mutexes to be enabled. +** +** This interface can be used by an application to make sure that the +** version of SQLite that it is linking against was compiled with +** the desired setting of the [SQLITE_THREADSAFE] macro. +** +** This interface only reports on the compile-time mutex setting +** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with +** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but +** can be fully or partially disabled using a call to [sqlite3_config()] +** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD], +** or [SQLITE_CONFIG_SERIALIZED]. ^(The return value of the +** sqlite3_threadsafe() function shows only the compile-time setting of +** thread safety, not any run-time changes to that setting made by +** sqlite3_config(). In other words, the return value from sqlite3_threadsafe() +** is unchanged by calls to sqlite3_config().)^ +** +** See the [threading mode] documentation for additional information. +*/ +SQLITE_API int sqlite3_threadsafe(void); + +/* +** CAPI3REF: Database Connection Handle +** KEYWORDS: {database connection} {database connections} +** +** Each open SQLite database is represented by a pointer to an instance of +** the opaque structure named "sqlite3". It is useful to think of an sqlite3 +** pointer as an object. The [sqlite3_open()], [sqlite3_open16()], and +** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()] +** and [sqlite3_close_v2()] are its destructors. There are many other +** interfaces (such as +** [sqlite3_prepare_v2()], [sqlite3_create_function()], and +** [sqlite3_busy_timeout()] to name but three) that are methods on an +** sqlite3 object. +*/ +typedef struct sqlite3 sqlite3; + +/* +** CAPI3REF: 64-Bit Integer Types +** KEYWORDS: sqlite_int64 sqlite_uint64 +** +** Because there is no cross-platform way to specify 64-bit integer types +** SQLite includes typedefs for 64-bit signed and unsigned integers. +** +** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions. +** The sqlite_int64 and sqlite_uint64 types are supported for backwards +** compatibility only. +** +** ^The sqlite3_int64 and sqlite_int64 types can store integer values +** between -9223372036854775808 and +9223372036854775807 inclusive. ^The +** sqlite3_uint64 and sqlite_uint64 types can store integer values +** between 0 and +18446744073709551615 inclusive. +*/ +#ifdef SQLITE_INT64_TYPE + typedef SQLITE_INT64_TYPE sqlite_int64; +# ifdef SQLITE_UINT64_TYPE + typedef SQLITE_UINT64_TYPE sqlite_uint64; +# else + typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; +# endif +#elif defined(_MSC_VER) || defined(__BORLANDC__) + typedef __int64 sqlite_int64; + typedef unsigned __int64 sqlite_uint64; +#else + typedef long long int sqlite_int64; + typedef unsigned long long int sqlite_uint64; +#endif +typedef sqlite_int64 sqlite3_int64; +typedef sqlite_uint64 sqlite3_uint64; + +/* +** If compiling for a processor that lacks floating point support, +** substitute integer for floating-point. +*/ +#ifdef SQLITE_OMIT_FLOATING_POINT +# define double sqlite3_int64 +#endif + +/* +** CAPI3REF: Closing A Database Connection +** DESTRUCTOR: sqlite3 +** +** ^The sqlite3_close() and sqlite3_close_v2() routines are destructors +** for the [sqlite3] object. +** ^Calls to sqlite3_close() and sqlite3_close_v2() return [SQLITE_OK] if +** the [sqlite3] object is successfully destroyed and all associated +** resources are deallocated. +** +** Ideally, applications should [sqlite3_finalize | finalize] all +** [prepared statements], [sqlite3_blob_close | close] all [BLOB handles], and +** [sqlite3_backup_finish | finish] all [sqlite3_backup] objects associated +** with the [sqlite3] object prior to attempting to close the object. +** ^If the database connection is associated with unfinalized prepared +** statements, BLOB handlers, and/or unfinished sqlite3_backup objects then +** sqlite3_close() will leave the database connection open and return +** [SQLITE_BUSY]. ^If sqlite3_close_v2() is called with unfinalized prepared +** statements, unclosed BLOB handlers, and/or unfinished sqlite3_backups, +** it returns [SQLITE_OK] regardless, but instead of deallocating the database +** connection immediately, it marks the database connection as an unusable +** "zombie" and makes arrangements to automatically deallocate the database +** connection after all prepared statements are finalized, all BLOB handles +** are closed, and all backups have finished. The sqlite3_close_v2() interface +** is intended for use with host languages that are garbage collected, and +** where the order in which destructors are called is arbitrary. +** +** ^If an [sqlite3] object is destroyed while a transaction is open, +** the transaction is automatically rolled back. +** +** The C parameter to [sqlite3_close(C)] and [sqlite3_close_v2(C)] +** must be either a NULL +** pointer or an [sqlite3] object pointer obtained +** from [sqlite3_open()], [sqlite3_open16()], or +** [sqlite3_open_v2()], and not previously closed. +** ^Calling sqlite3_close() or sqlite3_close_v2() with a NULL pointer +** argument is a harmless no-op. +*/ +SQLITE_API int sqlite3_close(sqlite3*); +SQLITE_API int sqlite3_close_v2(sqlite3*); + +/* +** The type for a callback function. +** This is legacy and deprecated. It is included for historical +** compatibility and is not documented. +*/ +typedef int (*sqlite3_callback)(void*,int,char**, char**); + +/* +** CAPI3REF: One-Step Query Execution Interface +** METHOD: sqlite3 +** +** The sqlite3_exec() interface is a convenience wrapper around +** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()], +** that allows an application to run multiple statements of SQL +** without having to use a lot of C code. +** +** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded, +** semicolon-separate SQL statements passed into its 2nd argument, +** in the context of the [database connection] passed in as its 1st +** argument. ^If the callback function of the 3rd argument to +** sqlite3_exec() is not NULL, then it is invoked for each result row +** coming out of the evaluated SQL statements. ^The 4th argument to +** sqlite3_exec() is relayed through to the 1st argument of each +** callback invocation. ^If the callback pointer to sqlite3_exec() +** is NULL, then no callback is ever invoked and result rows are +** ignored. +** +** ^If an error occurs while evaluating the SQL statements passed into +** sqlite3_exec(), then execution of the current statement stops and +** subsequent statements are skipped. ^If the 5th parameter to sqlite3_exec() +** is not NULL then any error message is written into memory obtained +** from [sqlite3_malloc()] and passed back through the 5th parameter. +** To avoid memory leaks, the application should invoke [sqlite3_free()] +** on error message strings returned through the 5th parameter of +** sqlite3_exec() after the error message string is no longer needed. +** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors +** occur, then sqlite3_exec() sets the pointer in its 5th parameter to +** NULL before returning. +** +** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() +** routine returns SQLITE_ABORT without invoking the callback again and +** without running any subsequent SQL statements. +** +** ^The 2nd argument to the sqlite3_exec() callback function is the +** number of columns in the result. ^The 3rd argument to the sqlite3_exec() +** callback is an array of pointers to strings obtained as if from +** [sqlite3_column_text()], one for each column. ^If an element of a +** result row is NULL then the corresponding string pointer for the +** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the +** sqlite3_exec() callback is an array of pointers to strings where each +** entry represents the name of corresponding result column as obtained +** from [sqlite3_column_name()]. +** +** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer +** to an empty string, or a pointer that contains only whitespace and/or +** SQL comments, then no SQL statements are evaluated and the database +** is not changed. +** +** Restrictions: +** +**
    +**
  • The application must ensure that the 1st parameter to sqlite3_exec() +** is a valid and open [database connection]. +**
  • The application must not close the [database connection] specified by +** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. +**
  • The application must not modify the SQL statement text passed into +** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. +**
  • The application must not dereference the arrays or string pointers +** passed as the 3rd and 4th callback parameters after it returns. +**
+*/ +SQLITE_API int sqlite3_exec( + sqlite3*, /* An open database */ + const char *sql, /* SQL to be evaluated */ + int (*callback)(void*,int,char**,char**), /* Callback function */ + void *, /* 1st argument to callback */ + char **errmsg /* Error msg written here */ +); + +/* +** CAPI3REF: Result Codes +** KEYWORDS: {result code definitions} +** +** Many SQLite functions return an integer result code from the set shown +** here in order to indicate success or failure. +** +** New error codes may be added in future versions of SQLite. +** +** See also: [extended result code definitions] +*/ +#define SQLITE_OK 0 /* Successful result */ +/* beginning-of-error-codes */ +#define SQLITE_ERROR 1 /* Generic error */ +#define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ +#define SQLITE_PERM 3 /* Access permission denied */ +#define SQLITE_ABORT 4 /* Callback routine requested an abort */ +#define SQLITE_BUSY 5 /* The database file is locked */ +#define SQLITE_LOCKED 6 /* A table in the database is locked */ +#define SQLITE_NOMEM 7 /* A malloc() failed */ +#define SQLITE_READONLY 8 /* Attempt to write a readonly database */ +#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ +#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ +#define SQLITE_CORRUPT 11 /* The database disk image is malformed */ +#define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */ +#define SQLITE_FULL 13 /* Insertion failed because database is full */ +#define SQLITE_CANTOPEN 14 /* Unable to open the database file */ +#define SQLITE_PROTOCOL 15 /* Database lock protocol error */ +#define SQLITE_EMPTY 16 /* Internal use only */ +#define SQLITE_SCHEMA 17 /* The database schema changed */ +#define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ +#define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ +#define SQLITE_MISMATCH 20 /* Data type mismatch */ +#define SQLITE_MISUSE 21 /* Library used incorrectly */ +#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ +#define SQLITE_AUTH 23 /* Authorization denied */ +#define SQLITE_FORMAT 24 /* Not used */ +#define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ +#define SQLITE_NOTADB 26 /* File opened that is not a database file */ +#define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */ +#define SQLITE_WARNING 28 /* Warnings from sqlite3_log() */ +#define SQLITE_ROW 100 /* sqlite3_step() has another row ready */ +#define SQLITE_DONE 101 /* sqlite3_step() has finished executing */ +/* end-of-error-codes */ + +/* +** CAPI3REF: Extended Result Codes +** KEYWORDS: {extended result code definitions} +** +** In its default configuration, SQLite API routines return one of 30 integer +** [result codes]. However, experience has shown that many of +** these result codes are too coarse-grained. They do not provide as +** much information about problems as programmers might like. In an effort to +** address this, newer versions of SQLite (version 3.3.8 [dateof:3.3.8] +** and later) include +** support for additional result codes that provide more detailed information +** about errors. These [extended result codes] are enabled or disabled +** on a per database connection basis using the +** [sqlite3_extended_result_codes()] API. Or, the extended code for +** the most recent error can be obtained using +** [sqlite3_extended_errcode()]. +*/ +#define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) +#define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) +#define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3<<8)) +#define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) +#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) +#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) +#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8)) +#define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8)) +#define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6<<8)) +#define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7<<8)) +#define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8<<8)) +#define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9<<8)) +#define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10<<8)) +#define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11<<8)) +#define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8)) +#define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13<<8)) +#define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8)) +#define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8)) +#define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) +#define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8)) +#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) +#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) +#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) +#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) +#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) +#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8)) +#define SQLITE_IOERR_MMAP (SQLITE_IOERR | (24<<8)) +#define SQLITE_IOERR_GETTEMPPATH (SQLITE_IOERR | (25<<8)) +#define SQLITE_IOERR_CONVPATH (SQLITE_IOERR | (26<<8)) +#define SQLITE_IOERR_VNODE (SQLITE_IOERR | (27<<8)) +#define SQLITE_IOERR_AUTH (SQLITE_IOERR | (28<<8)) +#define SQLITE_IOERR_BEGIN_ATOMIC (SQLITE_IOERR | (29<<8)) +#define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30<<8)) +#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8)) +#define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8)) +#define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8)) +#define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8)) +#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) +#define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8)) +#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) +#define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2<<8)) +#define SQLITE_BUSY_TIMEOUT (SQLITE_BUSY | (3<<8)) +#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) +#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) +#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) +#define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4<<8)) +#define SQLITE_CANTOPEN_DIRTYWAL (SQLITE_CANTOPEN | (5<<8)) /* Not Used */ +#define SQLITE_CANTOPEN_SYMLINK (SQLITE_CANTOPEN | (6<<8)) +#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8)) +#define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2<<8)) +#define SQLITE_CORRUPT_INDEX (SQLITE_CORRUPT | (3<<8)) +#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8)) +#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) +#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8)) +#define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4<<8)) +#define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5<<8)) +#define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6<<8)) +#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8)) +#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8)) +#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8)) +#define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3<<8)) +#define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4<<8)) +#define SQLITE_CONSTRAINT_NOTNULL (SQLITE_CONSTRAINT | (5<<8)) +#define SQLITE_CONSTRAINT_PRIMARYKEY (SQLITE_CONSTRAINT | (6<<8)) +#define SQLITE_CONSTRAINT_TRIGGER (SQLITE_CONSTRAINT | (7<<8)) +#define SQLITE_CONSTRAINT_UNIQUE (SQLITE_CONSTRAINT | (8<<8)) +#define SQLITE_CONSTRAINT_VTAB (SQLITE_CONSTRAINT | (9<<8)) +#define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10<<8)) +#define SQLITE_CONSTRAINT_PINNED (SQLITE_CONSTRAINT |(11<<8)) +#define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8)) +#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8)) +#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8)) +#define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8)) +#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8)) +#define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8)) +#define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8)) +#define SQLITE_OK_SYMLINK (SQLITE_OK | (2<<8)) /* internal use only */ + +/* +** CAPI3REF: Flags For File Open Operations +** +** These bit values are intended for use in the +** 3rd parameter to the [sqlite3_open_v2()] interface and +** in the 4th parameter to the [sqlite3_vfs.xOpen] method. +** +** Only those flags marked as "Ok for sqlite3_open_v2()" may be +** used as the third argument to the [sqlite3_open_v2()] interface. +** The other flags have historically been ignored by sqlite3_open_v2(), +** though future versions of SQLite might change so that an error is +** raised if any of the disallowed bits are passed into sqlite3_open_v2(). +** Applications should not depend on the historical behavior. +** +** Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into +** [sqlite3_open_v2()] does *not* cause the underlying database file +** to be opened using O_EXCL. Passing SQLITE_OPEN_EXCLUSIVE into +** [sqlite3_open_v2()] has historically be a no-op and might become an +** error in future versions of SQLite. +*/ +#define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */ +#define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */ +#define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */ +#define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */ +#define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */ +#define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */ +#define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */ +#define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */ +#define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */ +#define SQLITE_OPEN_SUPER_JOURNAL 0x00004000 /* VFS only */ +#define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_WAL 0x00080000 /* VFS only */ +#define SQLITE_OPEN_NOFOLLOW 0x01000000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_EXRESCODE 0x02000000 /* Extended result codes */ + +/* Reserved: 0x00F00000 */ +/* Legacy compatibility: */ +#define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ + + +/* +** CAPI3REF: Device Characteristics +** +** The xDeviceCharacteristics method of the [sqlite3_io_methods] +** object returns an integer which is a vector of these +** bit values expressing I/O characteristics of the mass storage +** device that holds the file that the [sqlite3_io_methods] +** refers to. +** +** The SQLITE_IOCAP_ATOMIC property means that all writes of +** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values +** mean that writes of blocks that are nnn bytes in size and +** are aligned to an address which is an integer multiple of +** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means +** that when data is appended to a file, the data is appended +** first then the size of the file is extended, never the other +** way around. The SQLITE_IOCAP_SEQUENTIAL property means that +** information is written to disk in the same order as calls +** to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that +** after reboot following a crash or power loss, the only bytes in a +** file that were written at the application level might have changed +** and that adjacent bytes, even bytes within the same sector are +** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN +** flag indicates that a file cannot be deleted when open. The +** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on +** read-only media and cannot be changed even by processes with +** elevated privileges. +** +** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying +** filesystem supports doing multiple write operations atomically when those +** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and +** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]. +** +** The SQLITE_IOCAP_SUBPAGE_READ property means that it is ok to read +** from the database file in amounts that are not a multiple of the +** page size and that do not begin at a page boundary. Without this +** property, SQLite is careful to only do full-page reads and write +** on aligned pages, with the one exception that it will do a sub-page +** read of the first page to access the database header. +*/ +#define SQLITE_IOCAP_ATOMIC 0x00000001 +#define SQLITE_IOCAP_ATOMIC512 0x00000002 +#define SQLITE_IOCAP_ATOMIC1K 0x00000004 +#define SQLITE_IOCAP_ATOMIC2K 0x00000008 +#define SQLITE_IOCAP_ATOMIC4K 0x00000010 +#define SQLITE_IOCAP_ATOMIC8K 0x00000020 +#define SQLITE_IOCAP_ATOMIC16K 0x00000040 +#define SQLITE_IOCAP_ATOMIC32K 0x00000080 +#define SQLITE_IOCAP_ATOMIC64K 0x00000100 +#define SQLITE_IOCAP_SAFE_APPEND 0x00000200 +#define SQLITE_IOCAP_SEQUENTIAL 0x00000400 +#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800 +#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000 +#define SQLITE_IOCAP_IMMUTABLE 0x00002000 +#define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000 +#define SQLITE_IOCAP_SUBPAGE_READ 0x00008000 + +/* +** CAPI3REF: File Locking Levels +** +** SQLite uses one of these integer values as the second +** argument to calls it makes to the xLock() and xUnlock() methods +** of an [sqlite3_io_methods] object. These values are ordered from +** lest restrictive to most restrictive. +** +** The argument to xLock() is always SHARED or higher. The argument to +** xUnlock is either SHARED or NONE. +*/ +#define SQLITE_LOCK_NONE 0 /* xUnlock() only */ +#define SQLITE_LOCK_SHARED 1 /* xLock() or xUnlock() */ +#define SQLITE_LOCK_RESERVED 2 /* xLock() only */ +#define SQLITE_LOCK_PENDING 3 /* xLock() only */ +#define SQLITE_LOCK_EXCLUSIVE 4 /* xLock() only */ + +/* +** CAPI3REF: Synchronization Type Flags +** +** When SQLite invokes the xSync() method of an +** [sqlite3_io_methods] object it uses a combination of +** these integer values as the second argument. +** +** When the SQLITE_SYNC_DATAONLY flag is used, it means that the +** sync operation only needs to flush data to mass storage. Inode +** information need not be flushed. If the lower four bits of the flag +** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics. +** If the lower four bits equal SQLITE_SYNC_FULL, that means +** to use Mac OS X style fullsync instead of fsync(). +** +** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags +** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL +** settings. The [synchronous pragma] determines when calls to the +** xSync VFS method occur and applies uniformly across all platforms. +** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how +** energetic or rigorous or forceful the sync operations are and +** only make a difference on Mac OSX for the default SQLite code. +** (Third-party VFS implementations might also make the distinction +** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the +** operating systems natively supported by SQLite, only Mac OSX +** cares about the difference.) +*/ +#define SQLITE_SYNC_NORMAL 0x00002 +#define SQLITE_SYNC_FULL 0x00003 +#define SQLITE_SYNC_DATAONLY 0x00010 + +/* +** CAPI3REF: OS Interface Open File Handle +** +** An [sqlite3_file] object represents an open file in the +** [sqlite3_vfs | OS interface layer]. Individual OS interface +** implementations will +** want to subclass this object by appending additional fields +** for their own use. The pMethods entry is a pointer to an +** [sqlite3_io_methods] object that defines methods for performing +** I/O operations on the open file. +*/ +typedef struct sqlite3_file sqlite3_file; +struct sqlite3_file { + const struct sqlite3_io_methods *pMethods; /* Methods for an open file */ +}; + +/* +** CAPI3REF: OS Interface File Virtual Methods Object +** +** Every file opened by the [sqlite3_vfs.xOpen] method populates an +** [sqlite3_file] object (or, more commonly, a subclass of the +** [sqlite3_file] object) with a pointer to an instance of this object. +** This object defines the methods used to perform various operations +** against the open file represented by the [sqlite3_file] object. +** +** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element +** to a non-NULL pointer, then the sqlite3_io_methods.xClose method +** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The +** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen] +** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element +** to NULL. +** +** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or +** [SQLITE_SYNC_FULL]. The first choice is the normal fsync(). +** The second choice is a Mac OS X style fullsync. The [SQLITE_SYNC_DATAONLY] +** flag may be ORed in to indicate that only the data of the file +** and not its inode needs to be synced. +** +** The integer values to xLock() and xUnlock() are one of +**
    +**
  • [SQLITE_LOCK_NONE], +**
  • [SQLITE_LOCK_SHARED], +**
  • [SQLITE_LOCK_RESERVED], +**
  • [SQLITE_LOCK_PENDING], or +**
  • [SQLITE_LOCK_EXCLUSIVE]. +**
+** xLock() upgrades the database file lock. In other words, xLock() moves the +** database file lock in the direction NONE toward EXCLUSIVE. The argument to +** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never +** SQLITE_LOCK_NONE. If the database file lock is already at or above the +** requested lock, then the call to xLock() is a no-op. +** xUnlock() downgrades the database file lock to either SHARED or NONE. +** If the lock is already at or below the requested lock state, then the call +** to xUnlock() is a no-op. +** The xCheckReservedLock() method checks whether any database connection, +** either in this process or in some other process, is holding a RESERVED, +** PENDING, or EXCLUSIVE lock on the file. It returns, via its output +** pointer parameter, true if such a lock exists and false otherwise. +** +** The xFileControl() method is a generic interface that allows custom +** VFS implementations to directly control an open file using the +** [sqlite3_file_control()] interface. The second "op" argument is an +** integer opcode. The third argument is a generic pointer intended to +** point to a structure that may contain arguments or space in which to +** write return values. Potential uses for xFileControl() might be +** functions to enable blocking locks with timeouts, to change the +** locking strategy (for example to use dot-file locks), to inquire +** about the status of a lock, or to break stale locks. The SQLite +** core reserves all opcodes less than 100 for its own use. +** A [file control opcodes | list of opcodes] less than 100 is available. +** Applications that define a custom xFileControl method should use opcodes +** greater than 100 to avoid conflicts. VFS implementations should +** return [SQLITE_NOTFOUND] for file control opcodes that they do not +** recognize. +** +** The xSectorSize() method returns the sector size of the +** device that underlies the file. The sector size is the +** minimum write that can be performed without disturbing +** other bytes in the file. The xDeviceCharacteristics() +** method returns a bit vector describing behaviors of the +** underlying device: +** +**
    +**
  • [SQLITE_IOCAP_ATOMIC] +**
  • [SQLITE_IOCAP_ATOMIC512] +**
  • [SQLITE_IOCAP_ATOMIC1K] +**
  • [SQLITE_IOCAP_ATOMIC2K] +**
  • [SQLITE_IOCAP_ATOMIC4K] +**
  • [SQLITE_IOCAP_ATOMIC8K] +**
  • [SQLITE_IOCAP_ATOMIC16K] +**
  • [SQLITE_IOCAP_ATOMIC32K] +**
  • [SQLITE_IOCAP_ATOMIC64K] +**
  • [SQLITE_IOCAP_SAFE_APPEND] +**
  • [SQLITE_IOCAP_SEQUENTIAL] +**
  • [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN] +**
  • [SQLITE_IOCAP_POWERSAFE_OVERWRITE] +**
  • [SQLITE_IOCAP_IMMUTABLE] +**
  • [SQLITE_IOCAP_BATCH_ATOMIC] +**
  • [SQLITE_IOCAP_SUBPAGE_READ] +**
+** +** The SQLITE_IOCAP_ATOMIC property means that all writes of +** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values +** mean that writes of blocks that are nnn bytes in size and +** are aligned to an address which is an integer multiple of +** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means +** that when data is appended to a file, the data is appended +** first then the size of the file is extended, never the other +** way around. The SQLITE_IOCAP_SEQUENTIAL property means that +** information is written to disk in the same order as calls +** to xWrite(). +** +** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill +** in the unread portions of the buffer with zeros. A VFS that +** fails to zero-fill short reads might seem to work. However, +** failure to zero-fill short reads will eventually lead to +** database corruption. +*/ +typedef struct sqlite3_io_methods sqlite3_io_methods; +struct sqlite3_io_methods { + int iVersion; + int (*xClose)(sqlite3_file*); + int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); + int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst); + int (*xTruncate)(sqlite3_file*, sqlite3_int64 size); + int (*xSync)(sqlite3_file*, int flags); + int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize); + int (*xLock)(sqlite3_file*, int); + int (*xUnlock)(sqlite3_file*, int); + int (*xCheckReservedLock)(sqlite3_file*, int *pResOut); + int (*xFileControl)(sqlite3_file*, int op, void *pArg); + int (*xSectorSize)(sqlite3_file*); + int (*xDeviceCharacteristics)(sqlite3_file*); + /* Methods above are valid for version 1 */ + int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**); + int (*xShmLock)(sqlite3_file*, int offset, int n, int flags); + void (*xShmBarrier)(sqlite3_file*); + int (*xShmUnmap)(sqlite3_file*, int deleteFlag); + /* Methods above are valid for version 2 */ + int (*xFetch)(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp); + int (*xUnfetch)(sqlite3_file*, sqlite3_int64 iOfst, void *p); + /* Methods above are valid for version 3 */ + /* Additional methods may be added in future releases */ +}; + +/* +** CAPI3REF: Standard File Control Opcodes +** KEYWORDS: {file control opcodes} {file control opcode} +** +** These integer constants are opcodes for the xFileControl method +** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()] +** interface. +** +**
    +**
  • [[SQLITE_FCNTL_LOCKSTATE]] +** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging. This +** opcode causes the xFileControl method to write the current state of +** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED], +** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE]) +** into an integer that the pArg argument points to. +** This capability is only available if SQLite is compiled with [SQLITE_DEBUG]. +** +**
  • [[SQLITE_FCNTL_SIZE_HINT]] +** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS +** layer a hint of how large the database file will grow to be during the +** current transaction. This hint is not guaranteed to be accurate but it +** is often close. The underlying VFS might choose to preallocate database +** file space based on this hint in order to help writes to the database +** file run faster. +** +**
  • [[SQLITE_FCNTL_SIZE_LIMIT]] +** The [SQLITE_FCNTL_SIZE_LIMIT] opcode is used by in-memory VFS that +** implements [sqlite3_deserialize()] to set an upper bound on the size +** of the in-memory database. The argument is a pointer to a [sqlite3_int64]. +** If the integer pointed to is negative, then it is filled in with the +** current limit. Otherwise the limit is set to the larger of the value +** of the integer pointed to and the current database size. The integer +** pointed to is set to the new limit. +** +**
  • [[SQLITE_FCNTL_CHUNK_SIZE]] +** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS +** extends and truncates the database file in chunks of a size specified +** by the user. The fourth argument to [sqlite3_file_control()] should +** point to an integer (type int) containing the new chunk-size to use +** for the nominated database. Allocating database file space in large +** chunks (say 1MB at a time), may reduce file-system fragmentation and +** improve performance on some systems. +** +**
  • [[SQLITE_FCNTL_FILE_POINTER]] +** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer +** to the [sqlite3_file] object associated with a particular database +** connection. See also [SQLITE_FCNTL_JOURNAL_POINTER]. +** +**
  • [[SQLITE_FCNTL_JOURNAL_POINTER]] +** The [SQLITE_FCNTL_JOURNAL_POINTER] opcode is used to obtain a pointer +** to the [sqlite3_file] object associated with the journal file (either +** the [rollback journal] or the [write-ahead log]) for a particular database +** connection. See also [SQLITE_FCNTL_FILE_POINTER]. +** +**
  • [[SQLITE_FCNTL_SYNC_OMITTED]] +** No longer in use. +** +**
  • [[SQLITE_FCNTL_SYNC]] +** The [SQLITE_FCNTL_SYNC] opcode is generated internally by SQLite and +** sent to the VFS immediately before the xSync method is invoked on a +** database file descriptor. Or, if the xSync method is not invoked +** because the user has configured SQLite with +** [PRAGMA synchronous | PRAGMA synchronous=OFF] it is invoked in place +** of the xSync method. In most cases, the pointer argument passed with +** this file-control is NULL. However, if the database file is being synced +** as part of a multi-database commit, the argument points to a nul-terminated +** string containing the transactions super-journal file name. VFSes that +** do not need this signal should silently ignore this opcode. Applications +** should not call [sqlite3_file_control()] with this opcode as doing so may +** disrupt the operation of the specialized VFSes that do require it. +** +**
  • [[SQLITE_FCNTL_COMMIT_PHASETWO]] +** The [SQLITE_FCNTL_COMMIT_PHASETWO] opcode is generated internally by SQLite +** and sent to the VFS after a transaction has been committed immediately +** but before the database is unlocked. VFSes that do not need this signal +** should silently ignore this opcode. Applications should not call +** [sqlite3_file_control()] with this opcode as doing so may disrupt the +** operation of the specialized VFSes that do require it. +** +**
  • [[SQLITE_FCNTL_WIN32_AV_RETRY]] +** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic +** retry counts and intervals for certain disk I/O operations for the +** windows [VFS] in order to provide robustness in the presence of +** anti-virus programs. By default, the windows VFS will retry file read, +** file write, and file delete operations up to 10 times, with a delay +** of 25 milliseconds before the first retry and with the delay increasing +** by an additional 25 milliseconds with each subsequent retry. This +** opcode allows these two values (10 retries and 25 milliseconds of delay) +** to be adjusted. The values are changed for all database connections +** within the same process. The argument is a pointer to an array of two +** integers where the first integer is the new retry count and the second +** integer is the delay. If either integer is negative, then the setting +** is not changed but instead the prior value of that setting is written +** into the array entry, allowing the current retry settings to be +** interrogated. The zDbName parameter is ignored. +** +**
  • [[SQLITE_FCNTL_PERSIST_WAL]] +** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the +** persistent [WAL | Write Ahead Log] setting. By default, the auxiliary +** write ahead log ([WAL file]) and shared memory +** files used for transaction control +** are automatically deleted when the latest connection to the database +** closes. Setting persistent WAL mode causes those files to persist after +** close. Persisting the files is useful when other processes that do not +** have write permission on the directory containing the database file want +** to read the database file, as the WAL and shared memory files must exist +** in order for the database to be readable. The fourth parameter to +** [sqlite3_file_control()] for this opcode should be a pointer to an integer. +** That integer is 0 to disable persistent WAL mode or 1 to enable persistent +** WAL mode. If the integer is -1, then it is overwritten with the current +** WAL persistence setting. +** +**
  • [[SQLITE_FCNTL_POWERSAFE_OVERWRITE]] +** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the +** persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting +** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the +** xDeviceCharacteristics methods. The fourth parameter to +** [sqlite3_file_control()] for this opcode should be a pointer to an integer. +** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage +** mode. If the integer is -1, then it is overwritten with the current +** zero-damage mode setting. +** +**
  • [[SQLITE_FCNTL_OVERWRITE]] +** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening +** a write transaction to indicate that, unless it is rolled back for some +** reason, the entire database file will be overwritten by the current +** transaction. This is used by VACUUM operations. +** +**
  • [[SQLITE_FCNTL_VFSNAME]] +** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of +** all [VFSes] in the VFS stack. The names are of all VFS shims and the +** final bottom-level VFS are written into memory obtained from +** [sqlite3_malloc()] and the result is stored in the char* variable +** that the fourth parameter of [sqlite3_file_control()] points to. +** The caller is responsible for freeing the memory when done. As with +** all file-control actions, there is no guarantee that this will actually +** do anything. Callers should initialize the char* variable to a NULL +** pointer in case this file-control is not implemented. This file-control +** is intended for diagnostic use only. +** +**
  • [[SQLITE_FCNTL_VFS_POINTER]] +** ^The [SQLITE_FCNTL_VFS_POINTER] opcode finds a pointer to the top-level +** [VFSes] currently in use. ^(The argument X in +** sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be +** of type "[sqlite3_vfs] **". This opcodes will set *X +** to a pointer to the top-level VFS.)^ +** ^When there are multiple VFS shims in the stack, this opcode finds the +** upper-most shim only. +** +**
  • [[SQLITE_FCNTL_PRAGMA]] +** ^Whenever a [PRAGMA] statement is parsed, an [SQLITE_FCNTL_PRAGMA] +** file control is sent to the open [sqlite3_file] object corresponding +** to the database file to which the pragma statement refers. ^The argument +** to the [SQLITE_FCNTL_PRAGMA] file control is an array of +** pointers to strings (char**) in which the second element of the array +** is the name of the pragma and the third element is the argument to the +** pragma or NULL if the pragma has no argument. ^The handler for an +** [SQLITE_FCNTL_PRAGMA] file control can optionally make the first element +** of the char** argument point to a string obtained from [sqlite3_mprintf()] +** or the equivalent and that string will become the result of the pragma or +** the error message if the pragma fails. ^If the +** [SQLITE_FCNTL_PRAGMA] file control returns [SQLITE_NOTFOUND], then normal +** [PRAGMA] processing continues. ^If the [SQLITE_FCNTL_PRAGMA] +** file control returns [SQLITE_OK], then the parser assumes that the +** VFS has handled the PRAGMA itself and the parser generates a no-op +** prepared statement if result string is NULL, or that returns a copy +** of the result string if the string is non-NULL. +** ^If the [SQLITE_FCNTL_PRAGMA] file control returns +** any result code other than [SQLITE_OK] or [SQLITE_NOTFOUND], that means +** that the VFS encountered an error while handling the [PRAGMA] and the +** compilation of the PRAGMA fails with an error. ^The [SQLITE_FCNTL_PRAGMA] +** file control occurs at the beginning of pragma statement analysis and so +** it is able to override built-in [PRAGMA] statements. +** +**
  • [[SQLITE_FCNTL_BUSYHANDLER]] +** ^The [SQLITE_FCNTL_BUSYHANDLER] +** file-control may be invoked by SQLite on the database file handle +** shortly after it is opened in order to provide a custom VFS with access +** to the connection's busy-handler callback. The argument is of type (void**) +** - an array of two (void *) values. The first (void *) actually points +** to a function of type (int (*)(void *)). In order to invoke the connection's +** busy-handler, this function should be invoked with the second (void *) in +** the array as the only argument. If it returns non-zero, then the operation +** should be retried. If it returns zero, the custom VFS should abandon the +** current operation. +** +**
  • [[SQLITE_FCNTL_TEMPFILENAME]] +** ^Applications can invoke the [SQLITE_FCNTL_TEMPFILENAME] file-control +** to have SQLite generate a +** temporary filename using the same algorithm that is followed to generate +** temporary filenames for TEMP tables and other internal uses. The +** argument should be a char** which will be filled with the filename +** written into memory obtained from [sqlite3_malloc()]. The caller should +** invoke [sqlite3_free()] on the result to avoid a memory leak. +** +**
  • [[SQLITE_FCNTL_MMAP_SIZE]] +** The [SQLITE_FCNTL_MMAP_SIZE] file control is used to query or set the +** maximum number of bytes that will be used for memory-mapped I/O. +** The argument is a pointer to a value of type sqlite3_int64 that +** is an advisory maximum number of bytes in the file to memory map. The +** pointer is overwritten with the old value. The limit is not changed if +** the value originally pointed to is negative, and so the current limit +** can be queried by passing in a pointer to a negative number. This +** file-control is used internally to implement [PRAGMA mmap_size]. +** +**
  • [[SQLITE_FCNTL_TRACE]] +** The [SQLITE_FCNTL_TRACE] file control provides advisory information +** to the VFS about what the higher layers of the SQLite stack are doing. +** This file control is used by some VFS activity tracing [shims]. +** The argument is a zero-terminated string. Higher layers in the +** SQLite stack may generate instances of this file control if +** the [SQLITE_USE_FCNTL_TRACE] compile-time option is enabled. +** +**
  • [[SQLITE_FCNTL_HAS_MOVED]] +** The [SQLITE_FCNTL_HAS_MOVED] file control interprets its argument as a +** pointer to an integer and it writes a boolean into that integer depending +** on whether or not the file has been renamed, moved, or deleted since it +** was first opened. +** +**
  • [[SQLITE_FCNTL_WIN32_GET_HANDLE]] +** The [SQLITE_FCNTL_WIN32_GET_HANDLE] opcode can be used to obtain the +** underlying native file handle associated with a file handle. This file +** control interprets its argument as a pointer to a native file handle and +** writes the resulting value there. +** +**
  • [[SQLITE_FCNTL_WIN32_SET_HANDLE]] +** The [SQLITE_FCNTL_WIN32_SET_HANDLE] opcode is used for debugging. This +** opcode causes the xFileControl method to swap the file handle with the one +** pointed to by the pArg argument. This capability is used during testing +** and only needs to be supported when SQLITE_TEST is defined. +** +**
  • [[SQLITE_FCNTL_NULL_IO]] +** The [SQLITE_FCNTL_NULL_IO] opcode sets the low-level file descriptor +** or file handle for the [sqlite3_file] object such that it will no longer +** read or write to the database file. +** +**
  • [[SQLITE_FCNTL_WAL_BLOCK]] +** The [SQLITE_FCNTL_WAL_BLOCK] is a signal to the VFS layer that it might +** be advantageous to block on the next WAL lock if the lock is not immediately +** available. The WAL subsystem issues this signal during rare +** circumstances in order to fix a problem with priority inversion. +** Applications should not use this file-control. +** +**
  • [[SQLITE_FCNTL_ZIPVFS]] +** The [SQLITE_FCNTL_ZIPVFS] opcode is implemented by zipvfs only. All other +** VFS should return SQLITE_NOTFOUND for this opcode. +** +**
  • [[SQLITE_FCNTL_RBU]] +** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by +** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for +** this opcode. +** +**
  • [[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]] +** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then +** the file descriptor is placed in "batch write mode", which +** means all subsequent write operations will be deferred and done +** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]. Systems +** that do not support batch atomic writes will return SQLITE_NOTFOUND. +** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to +** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or +** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make +** no VFS interface calls on the same [sqlite3_file] file descriptor +** except for calls to the xWrite method and the xFileControl method +** with [SQLITE_FCNTL_SIZE_HINT]. +** +**
  • [[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]] +** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write +** operations since the previous successful call to +** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically. +** This file control returns [SQLITE_OK] if and only if the writes were +** all performed successfully and have been committed to persistent storage. +** ^Regardless of whether or not it is successful, this file control takes +** the file descriptor out of batch write mode so that all subsequent +** write operations are independent. +** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without +** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]. +** +**
  • [[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]] +** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write +** operations since the previous successful call to +** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back. +** ^This file control takes the file descriptor out of batch write mode +** so that all subsequent write operations are independent. +** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without +** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]. +** +**
  • [[SQLITE_FCNTL_LOCK_TIMEOUT]] +** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode is used to configure a VFS +** to block for up to M milliseconds before failing when attempting to +** obtain a file lock using the xLock or xShmLock methods of the VFS. +** The parameter is a pointer to a 32-bit signed integer that contains +** the value that M is to be set to. Before returning, the 32-bit signed +** integer is overwritten with the previous value of M. +** +**
  • [[SQLITE_FCNTL_BLOCK_ON_CONNECT]] +** The [SQLITE_FCNTL_BLOCK_ON_CONNECT] opcode is used to configure the +** VFS to block when taking a SHARED lock to connect to a wal mode database. +** This is used to implement the functionality associated with +** SQLITE_SETLK_BLOCK_ON_CONNECT. +** +**
  • [[SQLITE_FCNTL_DATA_VERSION]] +** The [SQLITE_FCNTL_DATA_VERSION] opcode is used to detect changes to +** a database file. The argument is a pointer to a 32-bit unsigned integer. +** The "data version" for the pager is written into the pointer. The +** "data version" changes whenever any change occurs to the corresponding +** database file, either through SQL statements on the same database +** connection or through transactions committed by separate database +** connections possibly in other processes. The [sqlite3_total_changes()] +** interface can be used to find if any database on the connection has changed, +** but that interface responds to changes on TEMP as well as MAIN and does +** not provide a mechanism to detect changes to MAIN only. Also, the +** [sqlite3_total_changes()] interface responds to internal changes only and +** omits changes made by other database connections. The +** [PRAGMA data_version] command provides a mechanism to detect changes to +** a single attached database that occur due to other database connections, +** but omits changes implemented by the database connection on which it is +** called. This file control is the only mechanism to detect changes that +** happen either internally or externally and that are associated with +** a particular attached database. +** +**
  • [[SQLITE_FCNTL_CKPT_START]] +** The [SQLITE_FCNTL_CKPT_START] opcode is invoked from within a checkpoint +** in wal mode before the client starts to copy pages from the wal +** file to the database file. +** +**
  • [[SQLITE_FCNTL_CKPT_DONE]] +** The [SQLITE_FCNTL_CKPT_DONE] opcode is invoked from within a checkpoint +** in wal mode after the client has finished copying pages from the wal +** file to the database file, but before the *-shm file is updated to +** record the fact that the pages have been checkpointed. +** +**
  • [[SQLITE_FCNTL_EXTERNAL_READER]] +** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect +** whether or not there is a database client in another process with a wal-mode +** transaction open on the database or not. It is only available on unix.The +** (void*) argument passed with this file-control should be a pointer to a +** value of type (int). The integer value is set to 1 if the database is a wal +** mode database and there exists at least one client in another process that +** currently has an SQL transaction open on the database. It is set to 0 if +** the database is not a wal-mode db, or if there is no such connection in any +** other process. This opcode cannot be used to detect transactions opened +** by clients within the current process, only within other processes. +** +**
  • [[SQLITE_FCNTL_CKSM_FILE]] +** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use internally by the +** [checksum VFS shim] only. +** +**
  • [[SQLITE_FCNTL_RESET_CACHE]] +** If there is currently no transaction open on the database, and the +** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control +** purges the contents of the in-memory page cache. If there is an open +** transaction, or if the db is a temp-db, this opcode is a no-op, not an error. +**
+*/ +#define SQLITE_FCNTL_LOCKSTATE 1 +#define SQLITE_FCNTL_GET_LOCKPROXYFILE 2 +#define SQLITE_FCNTL_SET_LOCKPROXYFILE 3 +#define SQLITE_FCNTL_LAST_ERRNO 4 +#define SQLITE_FCNTL_SIZE_HINT 5 +#define SQLITE_FCNTL_CHUNK_SIZE 6 +#define SQLITE_FCNTL_FILE_POINTER 7 +#define SQLITE_FCNTL_SYNC_OMITTED 8 +#define SQLITE_FCNTL_WIN32_AV_RETRY 9 +#define SQLITE_FCNTL_PERSIST_WAL 10 +#define SQLITE_FCNTL_OVERWRITE 11 +#define SQLITE_FCNTL_VFSNAME 12 +#define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13 +#define SQLITE_FCNTL_PRAGMA 14 +#define SQLITE_FCNTL_BUSYHANDLER 15 +#define SQLITE_FCNTL_TEMPFILENAME 16 +#define SQLITE_FCNTL_MMAP_SIZE 18 +#define SQLITE_FCNTL_TRACE 19 +#define SQLITE_FCNTL_HAS_MOVED 20 +#define SQLITE_FCNTL_SYNC 21 +#define SQLITE_FCNTL_COMMIT_PHASETWO 22 +#define SQLITE_FCNTL_WIN32_SET_HANDLE 23 +#define SQLITE_FCNTL_WAL_BLOCK 24 +#define SQLITE_FCNTL_ZIPVFS 25 +#define SQLITE_FCNTL_RBU 26 +#define SQLITE_FCNTL_VFS_POINTER 27 +#define SQLITE_FCNTL_JOURNAL_POINTER 28 +#define SQLITE_FCNTL_WIN32_GET_HANDLE 29 +#define SQLITE_FCNTL_PDB 30 +#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31 +#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32 +#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33 +#define SQLITE_FCNTL_LOCK_TIMEOUT 34 +#define SQLITE_FCNTL_DATA_VERSION 35 +#define SQLITE_FCNTL_SIZE_LIMIT 36 +#define SQLITE_FCNTL_CKPT_DONE 37 +#define SQLITE_FCNTL_RESERVE_BYTES 38 +#define SQLITE_FCNTL_CKPT_START 39 +#define SQLITE_FCNTL_EXTERNAL_READER 40 +#define SQLITE_FCNTL_CKSM_FILE 41 +#define SQLITE_FCNTL_RESET_CACHE 42 +#define SQLITE_FCNTL_NULL_IO 43 +#define SQLITE_FCNTL_BLOCK_ON_CONNECT 44 + +/* deprecated names */ +#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE +#define SQLITE_SET_LOCKPROXYFILE SQLITE_FCNTL_SET_LOCKPROXYFILE +#define SQLITE_LAST_ERRNO SQLITE_FCNTL_LAST_ERRNO + + +/* +** CAPI3REF: Mutex Handle +** +** The mutex module within SQLite defines [sqlite3_mutex] to be an +** abstract type for a mutex object. The SQLite core never looks +** at the internal representation of an [sqlite3_mutex]. It only +** deals with pointers to the [sqlite3_mutex] object. +** +** Mutexes are created using [sqlite3_mutex_alloc()]. +*/ +typedef struct sqlite3_mutex sqlite3_mutex; + +/* +** CAPI3REF: Loadable Extension Thunk +** +** A pointer to the opaque sqlite3_api_routines structure is passed as +** the third parameter to entry points of [loadable extensions]. This +** structure must be typedefed in order to work around compiler warnings +** on some platforms. +*/ +typedef struct sqlite3_api_routines sqlite3_api_routines; + +/* +** CAPI3REF: File Name +** +** Type [sqlite3_filename] is used by SQLite to pass filenames to the +** xOpen method of a [VFS]. It may be cast to (const char*) and treated +** as a normal, nul-terminated, UTF-8 buffer containing the filename, but +** may also be passed to special APIs such as: +** +**
    +**
  • sqlite3_filename_database() +**
  • sqlite3_filename_journal() +**
  • sqlite3_filename_wal() +**
  • sqlite3_uri_parameter() +**
  • sqlite3_uri_boolean() +**
  • sqlite3_uri_int64() +**
  • sqlite3_uri_key() +**
+*/ +typedef const char *sqlite3_filename; + +/* +** CAPI3REF: OS Interface Object +** +** An instance of the sqlite3_vfs object defines the interface between +** the SQLite core and the underlying operating system. The "vfs" +** in the name of the object stands for "virtual file system". See +** the [VFS | VFS documentation] for further information. +** +** The VFS interface is sometimes extended by adding new methods onto +** the end. Each time such an extension occurs, the iVersion field +** is incremented. The iVersion value started out as 1 in +** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2 +** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased +** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields +** may be appended to the sqlite3_vfs object and the iVersion value +** may increase again in future versions of SQLite. +** Note that due to an oversight, the structure +** of the sqlite3_vfs object changed in the transition from +** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0] +** and yet the iVersion field was not increased. +** +** The szOsFile field is the size of the subclassed [sqlite3_file] +** structure used by this VFS. mxPathname is the maximum length of +** a pathname in this VFS. +** +** Registered sqlite3_vfs objects are kept on a linked list formed by +** the pNext pointer. The [sqlite3_vfs_register()] +** and [sqlite3_vfs_unregister()] interfaces manage this list +** in a thread-safe way. The [sqlite3_vfs_find()] interface +** searches the list. Neither the application code nor the VFS +** implementation should use the pNext pointer. +** +** The pNext field is the only field in the sqlite3_vfs +** structure that SQLite will ever modify. SQLite will only access +** or modify this field while holding a particular static mutex. +** The application should never modify anything within the sqlite3_vfs +** object once the object has been registered. +** +** The zName field holds the name of the VFS module. The name must +** be unique across all VFS modules. +** +** [[sqlite3_vfs.xOpen]] +** ^SQLite guarantees that the zFilename parameter to xOpen +** is either a NULL pointer or string obtained +** from xFullPathname() with an optional suffix added. +** ^If a suffix is added to the zFilename parameter, it will +** consist of a single "-" character followed by no more than +** 11 alphanumeric and/or "-" characters. +** ^SQLite further guarantees that +** the string will be valid and unchanged until xClose() is +** called. Because of the previous sentence, +** the [sqlite3_file] can safely store a pointer to the +** filename if it needs to remember the filename for some reason. +** If the zFilename parameter to xOpen is a NULL pointer then xOpen +** must invent its own temporary name for the file. ^Whenever the +** xFilename parameter is NULL it will also be the case that the +** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE]. +** +** The flags argument to xOpen() includes all bits set in +** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()] +** or [sqlite3_open16()] is used, then flags includes at least +** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. +** If xOpen() opens a file read-only then it sets *pOutFlags to +** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set. +** +** ^(SQLite will also add one of the following flags to the xOpen() +** call, depending on the object being opened: +** +**
    +**
  • [SQLITE_OPEN_MAIN_DB] +**
  • [SQLITE_OPEN_MAIN_JOURNAL] +**
  • [SQLITE_OPEN_TEMP_DB] +**
  • [SQLITE_OPEN_TEMP_JOURNAL] +**
  • [SQLITE_OPEN_TRANSIENT_DB] +**
  • [SQLITE_OPEN_SUBJOURNAL] +**
  • [SQLITE_OPEN_SUPER_JOURNAL] +**
  • [SQLITE_OPEN_WAL] +**
)^ +** +** The file I/O implementation can use the object type flags to +** change the way it deals with files. For example, an application +** that does not care about crash recovery or rollback might make +** the open of a journal file a no-op. Writes to this journal would +** also be no-ops, and any attempt to read the journal would return +** SQLITE_IOERR. Or the implementation might recognize that a database +** file will be doing page-aligned sector reads and writes in a random +** order and set up its I/O subsystem accordingly. +** +** SQLite might also add one of the following flags to the xOpen method: +** +**
    +**
  • [SQLITE_OPEN_DELETEONCLOSE] +**
  • [SQLITE_OPEN_EXCLUSIVE] +**
+** +** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be +** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE] +** will be set for TEMP databases and their journals, transient +** databases, and subjournals. +** +** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction +** with the [SQLITE_OPEN_CREATE] flag, which are both directly +** analogous to the O_EXCL and O_CREAT flags of the POSIX open() +** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the +** SQLITE_OPEN_CREATE, is used to indicate that file should always +** be created, and that it is an error if it already exists. +** It is not used to indicate the file should be opened +** for exclusive access. +** +** ^At least szOsFile bytes of memory are allocated by SQLite +** to hold the [sqlite3_file] structure passed as the third +** argument to xOpen. The xOpen method does not have to +** allocate the structure; it should just fill it in. Note that +** the xOpen method must set the sqlite3_file.pMethods to either +** a valid [sqlite3_io_methods] object or to NULL. xOpen must do +** this even if the open fails. SQLite expects that the sqlite3_file.pMethods +** element will be valid after xOpen returns regardless of the success +** or failure of the xOpen call. +** +** [[sqlite3_vfs.xAccess]] +** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS] +** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to +** test whether a file is readable and writable, or [SQLITE_ACCESS_READ] +** to test whether a file is at least readable. The SQLITE_ACCESS_READ +** flag is never actually used and is not implemented in the built-in +** VFSes of SQLite. The file is named by the second argument and can be a +** directory. The xAccess method returns [SQLITE_OK] on success or some +** non-zero error code if there is an I/O error or if the name of +** the file given in the second argument is illegal. If SQLITE_OK +** is returned, then non-zero or zero is written into *pResOut to indicate +** whether or not the file is accessible. +** +** ^SQLite will always allocate at least mxPathname+1 bytes for the +** output buffer xFullPathname. The exact size of the output buffer +** is also passed as a parameter to both methods. If the output buffer +** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is +** handled as a fatal error by SQLite, vfs implementations should endeavor +** to prevent this by setting mxPathname to a sufficiently large value. +** +** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64() +** interfaces are not strictly a part of the filesystem, but they are +** included in the VFS structure for completeness. +** The xRandomness() function attempts to return nBytes bytes +** of good-quality randomness into zOut. The return value is +** the actual number of bytes of randomness obtained. +** The xSleep() method causes the calling thread to sleep for at +** least the number of microseconds given. ^The xCurrentTime() +** method returns a Julian Day Number for the current date and time as +** a floating point value. +** ^The xCurrentTimeInt64() method returns, as an integer, the Julian +** Day Number multiplied by 86400000 (the number of milliseconds in +** a 24-hour day). +** ^SQLite will use the xCurrentTimeInt64() method to get the current +** date and time if that method is available (if iVersion is 2 or +** greater and the function pointer is not NULL) and will fall back +** to xCurrentTime() if xCurrentTimeInt64() is unavailable. +** +** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces +** are not used by the SQLite core. These optional interfaces are provided +** by some VFSes to facilitate testing of the VFS code. By overriding +** system calls with functions under its control, a test program can +** simulate faults and error conditions that would otherwise be difficult +** or impossible to induce. The set of system calls that can be overridden +** varies from one VFS to another, and from one version of the same VFS to the +** next. Applications that use these interfaces must be prepared for any +** or all of these interfaces to be NULL or for their behavior to change +** from one release to the next. Applications must not attempt to access +** any of these methods if the iVersion of the VFS is less than 3. +*/ +typedef struct sqlite3_vfs sqlite3_vfs; +typedef void (*sqlite3_syscall_ptr)(void); +struct sqlite3_vfs { + int iVersion; /* Structure version number (currently 3) */ + int szOsFile; /* Size of subclassed sqlite3_file */ + int mxPathname; /* Maximum file pathname length */ + sqlite3_vfs *pNext; /* Next registered VFS */ + const char *zName; /* Name of this virtual file system */ + void *pAppData; /* Pointer to application-specific data */ + int (*xOpen)(sqlite3_vfs*, sqlite3_filename zName, sqlite3_file*, + int flags, int *pOutFlags); + int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir); + int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut); + int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut); + void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename); + void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg); + void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void); + void (*xDlClose)(sqlite3_vfs*, void*); + int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut); + int (*xSleep)(sqlite3_vfs*, int microseconds); + int (*xCurrentTime)(sqlite3_vfs*, double*); + int (*xGetLastError)(sqlite3_vfs*, int, char *); + /* + ** The methods above are in version 1 of the sqlite_vfs object + ** definition. Those that follow are added in version 2 or later + */ + int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*); + /* + ** The methods above are in versions 1 and 2 of the sqlite_vfs object. + ** Those below are for version 3 and greater. + */ + int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr); + sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName); + const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName); + /* + ** The methods above are in versions 1 through 3 of the sqlite_vfs object. + ** New fields may be appended in future versions. The iVersion + ** value will increment whenever this happens. + */ +}; + +/* +** CAPI3REF: Flags for the xAccess VFS method +** +** These integer constants can be used as the third parameter to +** the xAccess method of an [sqlite3_vfs] object. They determine +** what kind of permissions the xAccess method is looking for. +** With SQLITE_ACCESS_EXISTS, the xAccess method +** simply checks whether the file exists. +** With SQLITE_ACCESS_READWRITE, the xAccess method +** checks whether the named directory is both readable and writable +** (in other words, if files can be added, removed, and renamed within +** the directory). +** The SQLITE_ACCESS_READWRITE constant is currently used only by the +** [temp_store_directory pragma], though this could change in a future +** release of SQLite. +** With SQLITE_ACCESS_READ, the xAccess method +** checks whether the file is readable. The SQLITE_ACCESS_READ constant is +** currently unused, though it might be used in a future release of +** SQLite. +*/ +#define SQLITE_ACCESS_EXISTS 0 +#define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */ +#define SQLITE_ACCESS_READ 2 /* Unused */ + +/* +** CAPI3REF: Flags for the xShmLock VFS method +** +** These integer constants define the various locking operations +** allowed by the xShmLock method of [sqlite3_io_methods]. The +** following are the only legal combinations of flags to the +** xShmLock method: +** +**
    +**
  • SQLITE_SHM_LOCK | SQLITE_SHM_SHARED +**
  • SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE +**
  • SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED +**
  • SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE +**
+** +** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as +** was given on the corresponding lock. +** +** The xShmLock method can transition between unlocked and SHARED or +** between unlocked and EXCLUSIVE. It cannot transition between SHARED +** and EXCLUSIVE. +*/ +#define SQLITE_SHM_UNLOCK 1 +#define SQLITE_SHM_LOCK 2 +#define SQLITE_SHM_SHARED 4 +#define SQLITE_SHM_EXCLUSIVE 8 + +/* +** CAPI3REF: Maximum xShmLock index +** +** The xShmLock method on [sqlite3_io_methods] may use values +** between 0 and this upper bound as its "offset" argument. +** The SQLite core will never attempt to acquire or release a +** lock outside of this range +*/ +#define SQLITE_SHM_NLOCK 8 + + +/* +** CAPI3REF: Initialize The SQLite Library +** +** ^The sqlite3_initialize() routine initializes the +** SQLite library. ^The sqlite3_shutdown() routine +** deallocates any resources that were allocated by sqlite3_initialize(). +** These routines are designed to aid in process initialization and +** shutdown on embedded systems. Workstation applications using +** SQLite normally do not need to invoke either of these routines. +** +** A call to sqlite3_initialize() is an "effective" call if it is +** the first time sqlite3_initialize() is invoked during the lifetime of +** the process, or if it is the first time sqlite3_initialize() is invoked +** following a call to sqlite3_shutdown(). ^(Only an effective call +** of sqlite3_initialize() does any initialization. All other calls +** are harmless no-ops.)^ +** +** A call to sqlite3_shutdown() is an "effective" call if it is the first +** call to sqlite3_shutdown() since the last sqlite3_initialize(). ^(Only +** an effective call to sqlite3_shutdown() does any deinitialization. +** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^ +** +** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown() +** is not. The sqlite3_shutdown() interface must only be called from a +** single thread. All open [database connections] must be closed and all +** other SQLite resources must be deallocated prior to invoking +** sqlite3_shutdown(). +** +** Among other things, ^sqlite3_initialize() will invoke +** sqlite3_os_init(). Similarly, ^sqlite3_shutdown() +** will invoke sqlite3_os_end(). +** +** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success. +** ^If for some reason, sqlite3_initialize() is unable to initialize +** the library (perhaps it is unable to allocate a needed resource such +** as a mutex) it returns an [error code] other than [SQLITE_OK]. +** +** ^The sqlite3_initialize() routine is called internally by many other +** SQLite interfaces so that an application usually does not need to +** invoke sqlite3_initialize() directly. For example, [sqlite3_open()] +** calls sqlite3_initialize() so the SQLite library will be automatically +** initialized when [sqlite3_open()] is called if it has not be initialized +** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT] +** compile-time option, then the automatic calls to sqlite3_initialize() +** are omitted and the application must call sqlite3_initialize() directly +** prior to using any other SQLite interface. For maximum portability, +** it is recommended that applications always invoke sqlite3_initialize() +** directly prior to using any other SQLite interface. Future releases +** of SQLite may require this. In other words, the behavior exhibited +** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the +** default behavior in some future release of SQLite. +** +** The sqlite3_os_init() routine does operating-system specific +** initialization of the SQLite library. The sqlite3_os_end() +** routine undoes the effect of sqlite3_os_init(). Typical tasks +** performed by these routines include allocation or deallocation +** of static resources, initialization of global variables, +** setting up a default [sqlite3_vfs] module, or setting up +** a default configuration using [sqlite3_config()]. +** +** The application should never invoke either sqlite3_os_init() +** or sqlite3_os_end() directly. The application should only invoke +** sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init() +** interface is called automatically by sqlite3_initialize() and +** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate +** implementations for sqlite3_os_init() and sqlite3_os_end() +** are built into SQLite when it is compiled for Unix, Windows, or OS/2. +** When [custom builds | built for other platforms] +** (using the [SQLITE_OS_OTHER=1] compile-time +** option) the application must supply a suitable implementation for +** sqlite3_os_init() and sqlite3_os_end(). An application-supplied +** implementation of sqlite3_os_init() or sqlite3_os_end() +** must return [SQLITE_OK] on success and some other [error code] upon +** failure. +*/ +SQLITE_API int sqlite3_initialize(void); +SQLITE_API int sqlite3_shutdown(void); +SQLITE_API int sqlite3_os_init(void); +SQLITE_API int sqlite3_os_end(void); + +/* +** CAPI3REF: Configuring The SQLite Library +** +** The sqlite3_config() interface is used to make global configuration +** changes to SQLite in order to tune SQLite to the specific needs of +** the application. The default configuration is recommended for most +** applications and so this routine is usually not necessary. It is +** provided to support rare applications with unusual needs. +** +** The sqlite3_config() interface is not threadsafe. The application +** must ensure that no other SQLite interfaces are invoked by other +** threads while sqlite3_config() is running. +** +** The first argument to sqlite3_config() is an integer +** [configuration option] that determines +** what property of SQLite is to be configured. Subsequent arguments +** vary depending on the [configuration option] +** in the first argument. +** +** For most configuration options, the sqlite3_config() interface +** may only be invoked prior to library initialization using +** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. +** The exceptional configuration options that may be invoked at any time +** are called "anytime configuration options". +** ^If sqlite3_config() is called after [sqlite3_initialize()] and before +** [sqlite3_shutdown()] with a first argument that is not an anytime +** configuration option, then the sqlite3_config() call will return SQLITE_MISUSE. +** Note, however, that ^sqlite3_config() can be called as part of the +** implementation of an application-defined [sqlite3_os_init()]. +** +** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. +** ^If the option is unknown or SQLite is unable to set the option +** then this routine returns a non-zero [error code]. +*/ +SQLITE_API int sqlite3_config(int, ...); + +/* +** CAPI3REF: Configure database connections +** METHOD: sqlite3 +** +** The sqlite3_db_config() interface is used to make configuration +** changes to a [database connection]. The interface is similar to +** [sqlite3_config()] except that the changes apply to a single +** [database connection] (specified in the first argument). +** +** The second argument to sqlite3_db_config(D,V,...) is the +** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code +** that indicates what aspect of the [database connection] is being configured. +** Subsequent arguments vary depending on the configuration verb. +** +** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if +** the call is considered successful. +*/ +SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...); + +/* +** CAPI3REF: Memory Allocation Routines +** +** An instance of this object defines the interface between SQLite +** and low-level memory allocation routines. +** +** This object is used in only one place in the SQLite interface. +** A pointer to an instance of this object is the argument to +** [sqlite3_config()] when the configuration option is +** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC]. +** By creating an instance of this object +** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC]) +** during configuration, an application can specify an alternative +** memory allocation subsystem for SQLite to use for all of its +** dynamic memory needs. +** +** Note that SQLite comes with several [built-in memory allocators] +** that are perfectly adequate for the overwhelming majority of applications +** and that this object is only useful to a tiny minority of applications +** with specialized memory allocation requirements. This object is +** also used during testing of SQLite in order to specify an alternative +** memory allocator that simulates memory out-of-memory conditions in +** order to verify that SQLite recovers gracefully from such +** conditions. +** +** The xMalloc, xRealloc, and xFree methods must work like the +** malloc(), realloc() and free() functions from the standard C library. +** ^SQLite guarantees that the second argument to +** xRealloc is always a value returned by a prior call to xRoundup. +** +** xSize should return the allocated size of a memory allocation +** previously obtained from xMalloc or xRealloc. The allocated size +** is always at least as big as the requested size but may be larger. +** +** The xRoundup method returns what would be the allocated size of +** a memory allocation given a particular requested size. Most memory +** allocators round up memory allocations at least to the next multiple +** of 8. Some allocators round up to a larger multiple or to a power of 2. +** Every memory allocation request coming in through [sqlite3_malloc()] +** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0, +** that causes the corresponding memory allocation to fail. +** +** The xInit method initializes the memory allocator. For example, +** it might allocate any required mutexes or initialize internal data +** structures. The xShutdown method is invoked (indirectly) by +** [sqlite3_shutdown()] and should deallocate any resources acquired +** by xInit. The pAppData pointer is used as the only parameter to +** xInit and xShutdown. +** +** SQLite holds the [SQLITE_MUTEX_STATIC_MAIN] mutex when it invokes +** the xInit method, so the xInit method need not be threadsafe. The +** xShutdown method is only called from [sqlite3_shutdown()] so it does +** not need to be threadsafe either. For all other methods, SQLite +** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the +** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which +** it is by default) and so the methods are automatically serialized. +** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other +** methods must be threadsafe or else make their own arrangements for +** serialization. +** +** SQLite will never invoke xInit() more than once without an intervening +** call to xShutdown(). +*/ +typedef struct sqlite3_mem_methods sqlite3_mem_methods; +struct sqlite3_mem_methods { + void *(*xMalloc)(int); /* Memory allocation function */ + void (*xFree)(void*); /* Free a prior allocation */ + void *(*xRealloc)(void*,int); /* Resize an allocation */ + int (*xSize)(void*); /* Return the size of an allocation */ + int (*xRoundup)(int); /* Round up request size to allocation size */ + int (*xInit)(void*); /* Initialize the memory allocator */ + void (*xShutdown)(void*); /* Deinitialize the memory allocator */ + void *pAppData; /* Argument to xInit() and xShutdown() */ +}; + +/* +** CAPI3REF: Configuration Options +** KEYWORDS: {configuration option} +** +** These constants are the available integer configuration options that +** can be passed as the first argument to the [sqlite3_config()] interface. +** +** Most of the configuration options for sqlite3_config() +** will only work if invoked prior to [sqlite3_initialize()] or after +** [sqlite3_shutdown()]. The few exceptions to this rule are called +** "anytime configuration options". +** ^Calling [sqlite3_config()] with a first argument that is not an +** anytime configuration option in between calls to [sqlite3_initialize()] and +** [sqlite3_shutdown()] is a no-op that returns SQLITE_MISUSE. +** +** The set of anytime configuration options can change (by insertions +** and/or deletions) from one release of SQLite to the next. +** As of SQLite version 3.42.0, the complete set of anytime configuration +** options is: +**
    +**
  • SQLITE_CONFIG_LOG +**
  • SQLITE_CONFIG_PCACHE_HDRSZ +**
+** +** New configuration options may be added in future releases of SQLite. +** Existing configuration options might be discontinued. Applications +** should check the return code from [sqlite3_config()] to make sure that +** the call worked. The [sqlite3_config()] interface will return a +** non-zero [error code] if a discontinued or unsupported configuration option +** is invoked. +** +**
+** [[SQLITE_CONFIG_SINGLETHREAD]]
SQLITE_CONFIG_SINGLETHREAD
+**
There are no arguments to this option. ^This option sets the +** [threading mode] to Single-thread. In other words, it disables +** all mutexing and puts SQLite into a mode where it can only be used +** by a single thread. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to change the [threading mode] from its default +** value of Single-thread and so [sqlite3_config()] will return +** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD +** configuration option.
+** +** [[SQLITE_CONFIG_MULTITHREAD]]
SQLITE_CONFIG_MULTITHREAD
+**
There are no arguments to this option. ^This option sets the +** [threading mode] to Multi-thread. In other words, it disables +** mutexing on [database connection] and [prepared statement] objects. +** The application is responsible for serializing access to +** [database connections] and [prepared statements]. But other mutexes +** are enabled so that SQLite will be safe to use in a multi-threaded +** environment as long as no two threads attempt to use the same +** [database connection] at the same time. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to set the Multi-thread [threading mode] and +** [sqlite3_config()] will return [SQLITE_ERROR] if called with the +** SQLITE_CONFIG_MULTITHREAD configuration option.
+** +** [[SQLITE_CONFIG_SERIALIZED]]
SQLITE_CONFIG_SERIALIZED
+**
There are no arguments to this option. ^This option sets the +** [threading mode] to Serialized. In other words, this option enables +** all mutexes including the recursive +** mutexes on [database connection] and [prepared statement] objects. +** In this mode (which is the default when SQLite is compiled with +** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access +** to [database connections] and [prepared statements] so that the +** application is free to use the same [database connection] or the +** same [prepared statement] in different threads at the same time. +** ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** it is not possible to set the Serialized [threading mode] and +** [sqlite3_config()] will return [SQLITE_ERROR] if called with the +** SQLITE_CONFIG_SERIALIZED configuration option.
+** +** [[SQLITE_CONFIG_MALLOC]]
SQLITE_CONFIG_MALLOC
+**
^(The SQLITE_CONFIG_MALLOC option takes a single argument which is +** a pointer to an instance of the [sqlite3_mem_methods] structure. +** The argument specifies +** alternative low-level memory allocation routines to be used in place of +** the memory allocation routines built into SQLite.)^ ^SQLite makes +** its own private copy of the content of the [sqlite3_mem_methods] structure +** before the [sqlite3_config()] call returns.
+** +** [[SQLITE_CONFIG_GETMALLOC]]
SQLITE_CONFIG_GETMALLOC
+**
^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which +** is a pointer to an instance of the [sqlite3_mem_methods] structure. +** The [sqlite3_mem_methods] +** structure is filled with the currently defined memory allocation routines.)^ +** This option can be used to overload the default memory allocation +** routines with a wrapper that simulations memory allocation failure or +** tracks memory usage, for example.
+** +** [[SQLITE_CONFIG_SMALL_MALLOC]]
SQLITE_CONFIG_SMALL_MALLOC
+**
^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of +** type int, interpreted as a boolean, which if true provides a hint to +** SQLite that it should avoid large memory allocations if possible. +** SQLite will run faster if it is free to make large memory allocations, +** but some application might prefer to run slower in exchange for +** guarantees about memory fragmentation that are possible if large +** allocations are avoided. This hint is normally off. +**
+** +** [[SQLITE_CONFIG_MEMSTATUS]]
SQLITE_CONFIG_MEMSTATUS
+**
^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, +** interpreted as a boolean, which enables or disables the collection of +** memory allocation statistics. ^(When memory allocation statistics are +** disabled, the following SQLite interfaces become non-operational: +**
    +**
  • [sqlite3_hard_heap_limit64()] +**
  • [sqlite3_memory_used()] +**
  • [sqlite3_memory_highwater()] +**
  • [sqlite3_soft_heap_limit64()] +**
  • [sqlite3_status64()] +**
)^ +** ^Memory allocation statistics are enabled by default unless SQLite is +** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory +** allocation statistics are disabled by default. +**
+** +** [[SQLITE_CONFIG_SCRATCH]]
SQLITE_CONFIG_SCRATCH
+**
The SQLITE_CONFIG_SCRATCH option is no longer used. +**
+** +** [[SQLITE_CONFIG_PAGECACHE]]
SQLITE_CONFIG_PAGECACHE
+**
^The SQLITE_CONFIG_PAGECACHE option specifies a memory pool +** that SQLite can use for the database page cache with the default page +** cache implementation. +** This configuration option is a no-op if an application-defined page +** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]. +** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to +** 8-byte aligned memory (pMem), the size of each page cache line (sz), +** and the number of cache lines (N). +** The sz argument should be the size of the largest database page +** (a power of two between 512 and 65536) plus some extra bytes for each +** page header. ^The number of extra bytes needed by the page header +** can be determined using [SQLITE_CONFIG_PCACHE_HDRSZ]. +** ^It is harmless, apart from the wasted memory, +** for the sz parameter to be larger than necessary. The pMem +** argument must be either a NULL pointer or a pointer to an 8-byte +** aligned block of memory of at least sz*N bytes, otherwise +** subsequent behavior is undefined. +** ^When pMem is not NULL, SQLite will strive to use the memory provided +** to satisfy page cache needs, falling back to [sqlite3_malloc()] if +** a page cache line is larger than sz bytes or if all of the pMem buffer +** is exhausted. +** ^If pMem is NULL and N is non-zero, then each database connection +** does an initial bulk allocation for page cache memory +** from [sqlite3_malloc()] sufficient for N cache lines if N is positive or +** of -1024*N bytes if N is negative, . ^If additional +** page cache memory is needed beyond what is provided by the initial +** allocation, then SQLite goes to [sqlite3_malloc()] separately for each +** additional cache line.
+** +** [[SQLITE_CONFIG_HEAP]]
SQLITE_CONFIG_HEAP
+**
^The SQLITE_CONFIG_HEAP option specifies a static memory buffer +** that SQLite will use for all of its dynamic memory allocation needs +** beyond those provided for by [SQLITE_CONFIG_PAGECACHE]. +** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled +** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns +** [SQLITE_ERROR] if invoked otherwise. +** ^There are three arguments to SQLITE_CONFIG_HEAP: +** An 8-byte aligned pointer to the memory, +** the number of bytes in the memory buffer, and the minimum allocation size. +** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts +** to using its default memory allocator (the system malloc() implementation), +** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the +** memory pointer is not NULL then the alternative memory +** allocator is engaged to handle all of SQLites memory allocation needs. +** The first pointer (the memory pointer) must be aligned to an 8-byte +** boundary or subsequent behavior of SQLite will be undefined. +** The minimum allocation size is capped at 2**12. Reasonable values +** for the minimum allocation size are 2**5 through 2**8.
+** +** [[SQLITE_CONFIG_MUTEX]]
SQLITE_CONFIG_MUTEX
+**
^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a +** pointer to an instance of the [sqlite3_mutex_methods] structure. +** The argument specifies alternative low-level mutex routines to be used +** in place the mutex routines built into SQLite.)^ ^SQLite makes a copy of +** the content of the [sqlite3_mutex_methods] structure before the call to +** [sqlite3_config()] returns. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** the entire mutexing subsystem is omitted from the build and hence calls to +** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will +** return [SQLITE_ERROR].
+** +** [[SQLITE_CONFIG_GETMUTEX]]
SQLITE_CONFIG_GETMUTEX
+**
^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which +** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The +** [sqlite3_mutex_methods] +** structure is filled with the currently defined mutex routines.)^ +** This option can be used to overload the default mutex allocation +** routines with a wrapper used to track mutex usage for performance +** profiling or testing, for example. ^If SQLite is compiled with +** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then +** the entire mutexing subsystem is omitted from the build and hence calls to +** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will +** return [SQLITE_ERROR].
+** +** [[SQLITE_CONFIG_LOOKASIDE]]
SQLITE_CONFIG_LOOKASIDE
+**
^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine +** the default size of [lookaside memory] on each [database connection]. +** The first argument is the +** size of each lookaside buffer slot ("sz") and the second is the number of +** slots allocated to each database connection ("cnt").)^ +** ^(SQLITE_CONFIG_LOOKASIDE sets the default lookaside size. +** The [SQLITE_DBCONFIG_LOOKASIDE] option to [sqlite3_db_config()] can +** be used to change the lookaside configuration on individual connections.)^ +** The [-DSQLITE_DEFAULT_LOOKASIDE] option can be used to change the +** default lookaside configuration at compile-time. +**
+** +** [[SQLITE_CONFIG_PCACHE2]]
SQLITE_CONFIG_PCACHE2
+**
^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is +** a pointer to an [sqlite3_pcache_methods2] object. This object specifies +** the interface to a custom page cache implementation.)^ +** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.
+** +** [[SQLITE_CONFIG_GETPCACHE2]]
SQLITE_CONFIG_GETPCACHE2
+**
^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which +** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of +** the current page cache implementation into that object.)^
+** +** [[SQLITE_CONFIG_LOG]]
SQLITE_CONFIG_LOG
+**
The SQLITE_CONFIG_LOG option is used to configure the SQLite +** global [error log]. +** (^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a +** function with a call signature of void(*)(void*,int,const char*), +** and a pointer to void. ^If the function pointer is not NULL, it is +** invoked by [sqlite3_log()] to process each logging event. ^If the +** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op. +** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is +** passed through as the first parameter to the application-defined logger +** function whenever that function is invoked. ^The second parameter to +** the logger function is a copy of the first parameter to the corresponding +** [sqlite3_log()] call and is intended to be a [result code] or an +** [extended result code]. ^The third parameter passed to the logger is +** log message after formatting via [sqlite3_snprintf()]. +** The SQLite logging interface is not reentrant; the logger function +** supplied by the application must not invoke any SQLite interface. +** In a multi-threaded application, the application-defined logger +** function must be threadsafe.
+** +** [[SQLITE_CONFIG_URI]]
SQLITE_CONFIG_URI +**
^(The SQLITE_CONFIG_URI option takes a single argument of type int. +** If non-zero, then URI handling is globally enabled. If the parameter is zero, +** then URI handling is globally disabled.)^ ^If URI handling is globally +** enabled, all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], +** [sqlite3_open16()] or +** specified as part of [ATTACH] commands are interpreted as URIs, regardless +** of whether or not the [SQLITE_OPEN_URI] flag is set when the database +** connection is opened. ^If it is globally disabled, filenames are +** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the +** database connection is opened. ^(By default, URI handling is globally +** disabled. The default value may be changed by compiling with the +** [SQLITE_USE_URI] symbol defined.)^ +** +** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]]
SQLITE_CONFIG_COVERING_INDEX_SCAN +**
^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer +** argument which is interpreted as a boolean in order to enable or disable +** the use of covering indices for full table scans in the query optimizer. +** ^The default setting is determined +** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on" +** if that compile-time option is omitted. +** The ability to disable the use of covering indices for full table scans +** is because some incorrectly coded legacy applications might malfunction +** when the optimization is enabled. Providing the ability to +** disable the optimization allows the older, buggy application code to work +** without change even with newer versions of SQLite. +** +** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]] +**
SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE +**
These options are obsolete and should not be used by new code. +** They are retained for backwards compatibility but are now no-ops. +**
+** +** [[SQLITE_CONFIG_SQLLOG]] +**
SQLITE_CONFIG_SQLLOG +**
This option is only available if sqlite is compiled with the +** [SQLITE_ENABLE_SQLLOG] pre-processor macro defined. The first argument should +** be a pointer to a function of type void(*)(void*,sqlite3*,const char*, int). +** The second should be of type (void*). The callback is invoked by the library +** in three separate circumstances, identified by the value passed as the +** fourth parameter. If the fourth parameter is 0, then the database connection +** passed as the second argument has just been opened. The third argument +** points to a buffer containing the name of the main database file. If the +** fourth parameter is 1, then the SQL statement that the third parameter +** points to has just been executed. Or, if the fourth parameter is 2, then +** the connection being passed as the second parameter is being closed. The +** third parameter is passed NULL In this case. An example of using this +** configuration option can be seen in the "test_sqllog.c" source file in +** the canonical SQLite source tree.
+** +** [[SQLITE_CONFIG_MMAP_SIZE]] +**
SQLITE_CONFIG_MMAP_SIZE +**
^SQLITE_CONFIG_MMAP_SIZE takes two 64-bit integer (sqlite3_int64) values +** that are the default mmap size limit (the default setting for +** [PRAGMA mmap_size]) and the maximum allowed mmap size limit. +** ^The default setting can be overridden by each database connection using +** either the [PRAGMA mmap_size] command, or by using the +** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size +** will be silently truncated if necessary so that it does not exceed the +** compile-time maximum mmap size set by the +** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^ +** ^If either argument to this option is negative, then that argument is +** changed to its compile-time default. +** +** [[SQLITE_CONFIG_WIN32_HEAPSIZE]] +**
SQLITE_CONFIG_WIN32_HEAPSIZE +**
^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is +** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro +** defined. ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value +** that specifies the maximum size of the created heap. +** +** [[SQLITE_CONFIG_PCACHE_HDRSZ]] +**
SQLITE_CONFIG_PCACHE_HDRSZ +**
^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which +** is a pointer to an integer and writes into that integer the number of extra +** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. +** The amount of extra space required can change depending on the compiler, +** target platform, and SQLite version. +** +** [[SQLITE_CONFIG_PMASZ]] +**
SQLITE_CONFIG_PMASZ +**
^The SQLITE_CONFIG_PMASZ option takes a single parameter which +** is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded +** sorter to that integer. The default minimum PMA Size is set by the +** [SQLITE_SORTER_PMASZ] compile-time option. New threads are launched +** to help with sort operations when multithreaded sorting +** is enabled (using the [PRAGMA threads] command) and the amount of content +** to be sorted exceeds the page size times the minimum of the +** [PRAGMA cache_size] setting and this value. +** +** [[SQLITE_CONFIG_STMTJRNL_SPILL]] +**
SQLITE_CONFIG_STMTJRNL_SPILL +**
^The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which +** becomes the [statement journal] spill-to-disk threshold. +** [Statement journals] are held in memory until their size (in bytes) +** exceeds this threshold, at which point they are written to disk. +** Or if the threshold is -1, statement journals are always held +** exclusively in memory. +** Since many statement journals never become large, setting the spill +** threshold to a value such as 64KiB can greatly reduce the amount of +** I/O required to support statement rollback. +** The default value for this setting is controlled by the +** [SQLITE_STMTJRNL_SPILL] compile-time option. +** +** [[SQLITE_CONFIG_SORTERREF_SIZE]] +**
SQLITE_CONFIG_SORTERREF_SIZE +**
The SQLITE_CONFIG_SORTERREF_SIZE option accepts a single parameter +** of type (int) - the new value of the sorter-reference size threshold. +** Usually, when SQLite uses an external sort to order records according +** to an ORDER BY clause, all fields required by the caller are present in the +** sorted records. However, if SQLite determines based on the declared type +** of a table column that its values are likely to be very large - larger +** than the configured sorter-reference size threshold - then a reference +** is stored in each sorted record and the required column values loaded +** from the database as records are returned in sorted order. The default +** value for this option is to never use this optimization. Specifying a +** negative value for this option restores the default behavior. +** This option is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option. +** +** [[SQLITE_CONFIG_MEMDB_MAXSIZE]] +**
SQLITE_CONFIG_MEMDB_MAXSIZE +**
The SQLITE_CONFIG_MEMDB_MAXSIZE option accepts a single parameter +** [sqlite3_int64] parameter which is the default maximum size for an in-memory +** database created using [sqlite3_deserialize()]. This default maximum +** size can be adjusted up or down for individual databases using the +** [SQLITE_FCNTL_SIZE_LIMIT] [sqlite3_file_control|file-control]. If this +** configuration setting is never used, then the default maximum is determined +** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that +** compile-time option is not set, then the default maximum is 1073741824. +** +** [[SQLITE_CONFIG_ROWID_IN_VIEW]] +**
SQLITE_CONFIG_ROWID_IN_VIEW +**
The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability +** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is +** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability +** defaults to on. This configuration option queries the current setting or +** changes the setting to off or on. The argument is a pointer to an integer. +** If that integer initially holds a value of 1, then the ability for VIEWs to +** have ROWIDs is activated. If the integer initially holds zero, then the +** ability is deactivated. Any other initial value for the integer leaves the +** setting unchanged. After changes, if any, the integer is written with +** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite +** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and +** recommended case) then the integer is always filled with zero, regardless +** if its initial value. +**
+*/ +#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ +#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ +#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ +#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ +#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ +#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ +#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ +#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ +#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ +/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ +#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ +#define SQLITE_CONFIG_PCACHE 14 /* no-op */ +#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ +#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ +#define SQLITE_CONFIG_URI 17 /* int */ +#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ +#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ +#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ +#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ +#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ +#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ +#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */ +#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */ +#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */ +#define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */ +#define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */ + +/* +** CAPI3REF: Database Connection Configuration Options +** +** These constants are the available integer configuration options that +** can be passed as the second parameter to the [sqlite3_db_config()] interface. +** +** The [sqlite3_db_config()] interface is a var-args functions. It takes a +** variable number of parameters, though always at least two. The number of +** parameters passed into sqlite3_db_config() depends on which of these +** constants is given as the second parameter. This documentation page +** refers to parameters beyond the second as "arguments". Thus, when this +** page says "the N-th argument" it means "the N-th parameter past the +** configuration option" or "the (N+2)-th parameter to sqlite3_db_config()". +** +** New configuration options may be added in future releases of SQLite. +** Existing configuration options might be discontinued. Applications +** should check the return code from [sqlite3_db_config()] to make sure that +** the call worked. ^The [sqlite3_db_config()] interface will return a +** non-zero [error code] if a discontinued or unsupported configuration option +** is invoked. +** +**
+** [[SQLITE_DBCONFIG_LOOKASIDE]] +**
SQLITE_DBCONFIG_LOOKASIDE
+**
The SQLITE_DBCONFIG_LOOKASIDE option is used to adjust the +** configuration of the [lookaside memory allocator] within a database +** connection. +** The arguments to the SQLITE_DBCONFIG_LOOKASIDE option are not +** in the [DBCONFIG arguments|usual format]. +** The SQLITE_DBCONFIG_LOOKASIDE option takes three arguments, not two, +** so that a call to [sqlite3_db_config()] that uses SQLITE_DBCONFIG_LOOKASIDE +** should have a total of five parameters. +**
    +**
  1. The first argument ("buf") is a +** pointer to a memory buffer to use for lookaside memory. +** The first argument may be NULL in which case SQLite will allocate the +** lookaside buffer itself using [sqlite3_malloc()]. +**

  2. The second argument ("sz") is the +** size of each lookaside buffer slot. Lookaside is disabled if "sz" +** is less than 8. The "sz" argument should be a multiple of 8 less than +** 65536. If "sz" does not meet this constraint, it is reduced in size until +** it does. +**

  3. The third argument ("cnt") is the number of slots. Lookaside is disabled +** if "cnt"is less than 1. The "cnt" value will be reduced, if necessary, so +** that the product of "sz" and "cnt" does not exceed 2,147,418,112. The "cnt" +** parameter is usually chosen so that the product of "sz" and "cnt" is less +** than 1,000,000. +**

+**

If the "buf" argument is not NULL, then it must +** point to a memory buffer with a size that is greater than +** or equal to the product of "sz" and "cnt". +** The buffer must be aligned to an 8-byte boundary. +** The lookaside memory +** configuration for a database connection can only be changed when that +** connection is not currently using lookaside memory, or in other words +** when the value returned by [SQLITE_DBSTATUS_LOOKASIDE_USED] is zero. +** Any attempt to change the lookaside memory configuration when lookaside +** memory is in use leaves the configuration unchanged and returns +** [SQLITE_BUSY]. +** If the "buf" argument is NULL and an attempt +** to allocate memory based on "sz" and "cnt" fails, then +** lookaside is silently disabled. +**

+** The [SQLITE_CONFIG_LOOKASIDE] configuration option can be used to set the +** default lookaside configuration at initialization. The +** [-DSQLITE_DEFAULT_LOOKASIDE] option can be used to set the default lookaside +** configuration at compile-time. Typical values for lookaside are 1200 for +** "sz" and 40 to 100 for "cnt". +**

+** +** [[SQLITE_DBCONFIG_ENABLE_FKEY]] +**
SQLITE_DBCONFIG_ENABLE_FKEY
+**
^This option is used to enable or disable the enforcement of +** [foreign key constraints]. This is the same setting that is +** enabled or disabled by the [PRAGMA foreign_keys] statement. +** The first argument is an integer which is 0 to disable FK enforcement, +** positive to enable FK enforcement or negative to leave FK enforcement +** unchanged. The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether FK enforcement is off or on +** following this call. The second parameter may be a NULL pointer, in +** which case the FK enforcement setting is not reported back.
+** +** [[SQLITE_DBCONFIG_ENABLE_TRIGGER]] +**
SQLITE_DBCONFIG_ENABLE_TRIGGER
+**
^This option is used to enable or disable [CREATE TRIGGER | triggers]. +** There should be two additional arguments. +** The first argument is an integer which is 0 to disable triggers, +** positive to enable triggers or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether triggers are disabled or enabled +** following this call. The second parameter may be a NULL pointer, in +** which case the trigger setting is not reported back. +** +**

Originally this option disabled all triggers. ^(However, since +** SQLite version 3.35.0, TEMP triggers are still allowed even if +** this option is off. So, in other words, this option now only disables +** triggers in the main database schema or in the schemas of [ATTACH]-ed +** databases.)^

+** +** [[SQLITE_DBCONFIG_ENABLE_VIEW]] +**
SQLITE_DBCONFIG_ENABLE_VIEW
+**
^This option is used to enable or disable [CREATE VIEW | views]. +** There must be two additional arguments. +** The first argument is an integer which is 0 to disable views, +** positive to enable views or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether views are disabled or enabled +** following this call. The second parameter may be a NULL pointer, in +** which case the view setting is not reported back. +** +**

Originally this option disabled all views. ^(However, since +** SQLite version 3.35.0, TEMP views are still allowed even if +** this option is off. So, in other words, this option now only disables +** views in the main database schema or in the schemas of ATTACH-ed +** databases.)^

+** +** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]] +**
SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
+**
^This option is used to enable or disable the +** [fts3_tokenizer()] function which is part of the +** [FTS3] full-text search engine extension. +** There must be two additional arguments. +** The first argument is an integer which is 0 to disable fts3_tokenizer() or +** positive to enable fts3_tokenizer() or negative to leave the setting +** unchanged. +** The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled +** following this call. The second parameter may be a NULL pointer, in +** which case the new setting is not reported back.
+** +** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]] +**
SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
+**
^This option is used to enable or disable the [sqlite3_load_extension()] +** interface independently of the [load_extension()] SQL function. +** The [sqlite3_enable_load_extension()] API enables or disables both the +** C-API [sqlite3_load_extension()] and the SQL function [load_extension()]. +** There must be two additional arguments. +** When the first argument to this interface is 1, then only the C-API is +** enabled and the SQL function remains disabled. If the first argument to +** this interface is 0, then both the C-API and the SQL function are disabled. +** If the first argument is -1, then no changes are made to state of either the +** C-API or the SQL function. +** The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether [sqlite3_load_extension()] interface +** is disabled or enabled following this call. The second parameter may +** be a NULL pointer, in which case the new setting is not reported back. +**
+** +** [[SQLITE_DBCONFIG_MAINDBNAME]]
SQLITE_DBCONFIG_MAINDBNAME
+**
^This option is used to change the name of the "main" database +** schema. This option does not follow the +** [DBCONFIG arguments|usual SQLITE_DBCONFIG argument format]. +** This option takes exactly one additional argument so that the +** [sqlite3_db_config()] call has a total of three parameters. The +** extra argument must be a pointer to a constant UTF8 string which +** will become the new schema name in place of "main". ^SQLite does +** not make a copy of the new main schema name string, so the application +** must ensure that the argument passed into SQLITE_DBCONFIG MAINDBNAME +** is unchanged until after the database connection closes. +**
+** +** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]] +**
SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
+**
Usually, when a database in [WAL mode] is closed or detached from a +** database handle, SQLite checks if if there are other connections to the +** same database, and if there are no other database connection (if the +** connection being closed is the last open connection to the database), +** then SQLite performs a [checkpoint] before closing the connection and +** deletes the WAL file. The SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE option can +** be used to override that behavior. The first argument passed to this +** operation (the third parameter to [sqlite3_db_config()]) is an integer +** which is positive to disable checkpoints-on-close, or zero (the default) +** to enable them, and negative to leave the setting unchanged. +** The second argument (the fourth parameter) is a pointer to an integer +** into which is written 0 or 1 to indicate whether checkpoints-on-close +** have been disabled - 0 if they are not disabled, 1 if they are. +**
+** +** [[SQLITE_DBCONFIG_ENABLE_QPSG]]
SQLITE_DBCONFIG_ENABLE_QPSG
+**
^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates +** the [query planner stability guarantee] (QPSG). When the QPSG is active, +** a single SQL query statement will always use the same algorithm regardless +** of values of [bound parameters].)^ The QPSG disables some query optimizations +** that look at the values of bound parameters, which can make some queries +** slower. But the QPSG has the advantage of more predictable behavior. With +** the QPSG active, SQLite will always use the same query plan in the field as +** was used during testing in the lab. +** The first argument to this setting is an integer which is 0 to disable +** the QPSG, positive to enable QPSG, or negative to leave the setting +** unchanged. The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether the QPSG is disabled or enabled +** following this call. +**
+** +** [[SQLITE_DBCONFIG_TRIGGER_EQP]]
SQLITE_DBCONFIG_TRIGGER_EQP
+**
By default, the output of EXPLAIN QUERY PLAN commands does not +** include output for any operations performed by trigger programs. This +** option is used to set or clear (the default) a flag that governs this +** behavior. The first parameter passed to this operation is an integer - +** positive to enable output for trigger programs, or zero to disable it, +** or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which is written +** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if +** it is not disabled, 1 if it is. +**
+** +** [[SQLITE_DBCONFIG_RESET_DATABASE]]
SQLITE_DBCONFIG_RESET_DATABASE
+**
Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run +** [VACUUM] in order to reset a database back to an empty database +** with no schema and no content. The following process works even for +** a badly corrupted database file: +**
    +**
  1. If the database connection is newly opened, make sure it has read the +** database schema by preparing then discarding some query against the +** database, or calling sqlite3_table_column_metadata(), ignoring any +** errors. This step is only necessary if the application desires to keep +** the database in WAL mode after the reset if it was in WAL mode before +** the reset. +**
  2. sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0); +**
  3. [sqlite3_exec](db, "[VACUUM]", 0, 0, 0); +**
  4. sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); +**
+** Because resetting a database is destructive and irreversible, the +** process requires the use of this obscure API and multiple steps to +** help ensure that it does not happen by accident. Because this +** feature must be capable of resetting corrupt databases, and +** shutting down virtual tables may require access to that corrupt +** storage, the library must abandon any installed virtual tables +** without calling their xDestroy() methods. +** +** [[SQLITE_DBCONFIG_DEFENSIVE]]
SQLITE_DBCONFIG_DEFENSIVE
+**
The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the +** "defensive" flag for a database connection. When the defensive +** flag is enabled, language features that allow ordinary SQL to +** deliberately corrupt the database file are disabled. The disabled +** features include but are not limited to the following: +**
    +**
  • The [PRAGMA writable_schema=ON] statement. +**
  • The [PRAGMA journal_mode=OFF] statement. +**
  • The [PRAGMA schema_version=N] statement. +**
  • Writes to the [sqlite_dbpage] virtual table. +**
  • Direct writes to [shadow tables]. +**
+**
+** +** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]]
SQLITE_DBCONFIG_WRITABLE_SCHEMA
+**
The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the +** "writable_schema" flag. This has the same effect and is logically equivalent +** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF]. +** The first argument to this setting is an integer which is 0 to disable +** the writable_schema, positive to enable writable_schema, or negative to +** leave the setting unchanged. The second parameter is a pointer to an +** integer into which is written 0 or 1 to indicate whether the writable_schema +** is enabled or disabled following this call. +**
+** +** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]] +**
SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
+**
The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates +** the legacy behavior of the [ALTER TABLE RENAME] command such it +** behaves as it did prior to [version 3.24.0] (2018-06-04). See the +** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for +** additional information. This feature can also be turned on and off +** using the [PRAGMA legacy_alter_table] statement. +**
+** +** [[SQLITE_DBCONFIG_DQS_DML]] +**
SQLITE_DBCONFIG_DQS_DML
+**
The SQLITE_DBCONFIG_DQS_DML option activates or deactivates +** the legacy [double-quoted string literal] misfeature for DML statements +** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The +** default value of this setting is determined by the [-DSQLITE_DQS] +** compile-time option. +**
+** +** [[SQLITE_DBCONFIG_DQS_DDL]] +**
SQLITE_DBCONFIG_DQS_DDL
+**
The SQLITE_DBCONFIG_DQS option activates or deactivates +** the legacy [double-quoted string literal] misfeature for DDL statements, +** such as CREATE TABLE and CREATE INDEX. The +** default value of this setting is determined by the [-DSQLITE_DQS] +** compile-time option. +**
+** +** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]] +**
SQLITE_DBCONFIG_TRUSTED_SCHEMA
+**
The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to +** assume that database schemas are untainted by malicious content. +** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite +** takes additional defensive steps to protect the application from harm +** including: +**
    +**
  • Prohibit the use of SQL functions inside triggers, views, +** CHECK constraints, DEFAULT clauses, expression indexes, +** partial indexes, or generated columns +** unless those functions are tagged with [SQLITE_INNOCUOUS]. +**
  • Prohibit the use of virtual tables inside of triggers or views +** unless those virtual tables are tagged with [SQLITE_VTAB_INNOCUOUS]. +**
+** This setting defaults to "on" for legacy compatibility, however +** all applications are advised to turn it off if possible. This setting +** can also be controlled using the [PRAGMA trusted_schema] statement. +**
+** +** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]] +**
SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
+**
The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates +** the legacy file format flag. When activated, this flag causes all newly +** created database file to have a schema format version number (the 4-byte +** integer found at offset 44 into the database header) of 1. This in turn +** means that the resulting database file will be readable and writable by +** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting, +** newly created databases are generally not understandable by SQLite versions +** prior to 3.3.0 ([dateof:3.3.0]). As these words are written, there +** is now scarcely any need to generate database files that are compatible +** all the way back to version 3.0.0, and so this setting is of little +** practical use, but is provided so that SQLite can continue to claim the +** ability to generate new database files that are compatible with version +** 3.0.0. +**

Note that when the SQLITE_DBCONFIG_LEGACY_FILE_FORMAT setting is on, +** the [VACUUM] command will fail with an obscure error when attempting to +** process a table with generated columns and a descending index. This is +** not considered a bug since SQLite versions 3.3.0 and earlier do not support +** either generated columns or descending indexes. +**

+** +** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]] +**
SQLITE_DBCONFIG_STMT_SCANSTATUS
+**
The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in +** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears +** a flag that enables collection of the sqlite3_stmt_scanstatus_v2() +** statistics. For statistics to be collected, the flag must be set on +** the database handle both when the SQL statement is prepared and when it +** is stepped. The flag is set (collection of statistics is enabled) +** by default.

This option takes two arguments: an integer and a pointer to +** an integer.. The first argument is 1, 0, or -1 to enable, disable, or +** leave unchanged the statement scanstatus option. If the second argument +** is not NULL, then the value of the statement scanstatus setting after +** processing the first argument is written into the integer that the second +** argument points to. +**

+** +** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]] +**
SQLITE_DBCONFIG_REVERSE_SCANORDER
+**
The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order +** in which tables and indexes are scanned so that the scans start at the end +** and work toward the beginning rather than starting at the beginning and +** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the +** same as setting [PRAGMA reverse_unordered_selects].

This option takes +** two arguments which are an integer and a pointer to an integer. The first +** argument is 1, 0, or -1 to enable, disable, or leave unchanged the +** reverse scan order flag, respectively. If the second argument is not NULL, +** then 0 or 1 is written into the integer that the second argument points to +** depending on if the reverse scan order flag is set after processing the +** first argument. +**

+** +** [[SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE]] +**
SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE
+**
The SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE option enables or disables +** the ability of the [ATTACH DATABASE] SQL command to create a new database +** file if the database filed named in the ATTACH command does not already +** exist. This ability of ATTACH to create a new database is enabled by +** default. Applications can disable or reenable the ability for ATTACH to +** create new database files using this DBCONFIG option.

+** This option takes two arguments which are an integer and a pointer +** to an integer. The first argument is 1, 0, or -1 to enable, disable, or +** leave unchanged the attach-create flag, respectively. If the second +** argument is not NULL, then 0 or 1 is written into the integer that the +** second argument points to depending on if the attach-create flag is set +** after processing the first argument. +**

+** +** [[SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE]] +**
SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE
+**
The SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE option enables or disables the +** ability of the [ATTACH DATABASE] SQL command to open a database for writing. +** This capability is enabled by default. Applications can disable or +** reenable this capability using the current DBCONFIG option. If the +** the this capability is disabled, the [ATTACH] command will still work, +** but the database will be opened read-only. If this option is disabled, +** then the ability to create a new database using [ATTACH] is also disabled, +** regardless of the value of the [SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE] +** option.

+** This option takes two arguments which are an integer and a pointer +** to an integer. The first argument is 1, 0, or -1 to enable, disable, or +** leave unchanged the ability to ATTACH another database for writing, +** respectively. If the second argument is not NULL, then 0 or 1 is written +** into the integer to which the second argument points, depending on whether +** the ability to ATTACH a read/write database is enabled or disabled +** after processing the first argument. +**

+** +** [[SQLITE_DBCONFIG_ENABLE_COMMENTS]] +**
SQLITE_DBCONFIG_ENABLE_COMMENTS
+**
The SQLITE_DBCONFIG_ENABLE_COMMENTS option enables or disables the +** ability to include comments in SQL text. Comments are enabled by default. +** An application can disable or reenable comments in SQL text using this +** DBCONFIG option.

+** This option takes two arguments which are an integer and a pointer +** to an integer. The first argument is 1, 0, or -1 to enable, disable, or +** leave unchanged the ability to use comments in SQL text, +** respectively. If the second argument is not NULL, then 0 or 1 is written +** into the integer that the second argument points to depending on if +** comments are allowed in SQL text after processing the first argument. +**

+** +**
+** +** [[DBCONFIG arguments]]

Arguments To SQLITE_DBCONFIG Options

+** +**

Most of the SQLITE_DBCONFIG options take two arguments, so that the +** overall call to [sqlite3_db_config()] has a total of four parameters. +** The first argument (the third parameter to sqlite3_db_config()) is a integer. +** The second argument is a pointer to an integer. If the first argument is 1, +** then the option becomes enabled. If the first integer argument is 0, then the +** option is disabled. If the first argument is -1, then the option setting +** is unchanged. The second argument, the pointer to an integer, may be NULL. +** If the second argument is not NULL, then a value of 0 or 1 is written into +** the integer to which the second argument points, depending on whether the +** setting is disabled or enabled after applying any changes specified by +** the first argument. +** +**

While most SQLITE_DBCONFIG options use the argument format +** described in the previous paragraph, the [SQLITE_DBCONFIG_MAINDBNAME] +** and [SQLITE_DBCONFIG_LOOKASIDE] options are different. See the +** documentation of those exceptional options for details. +*/ +#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ +#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */ +#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ +#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */ +#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */ +#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */ +#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */ +#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */ +#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */ +#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */ +#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */ +#define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */ +#define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */ +#define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */ +#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE 1020 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE 1021 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_COMMENTS 1022 /* int int* */ +#define SQLITE_DBCONFIG_MAX 1022 /* Largest DBCONFIG */ + +/* +** CAPI3REF: Enable Or Disable Extended Result Codes +** METHOD: sqlite3 +** +** ^The sqlite3_extended_result_codes() routine enables or disables the +** [extended result codes] feature of SQLite. ^The extended result +** codes are disabled by default for historical compatibility. +*/ +SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); + +/* +** CAPI3REF: Last Insert Rowid +** METHOD: sqlite3 +** +** ^Each entry in most SQLite tables (except for [WITHOUT ROWID] tables) +** has a unique 64-bit signed +** integer key called the [ROWID | "rowid"]. ^The rowid is always available +** as an undeclared column named ROWID, OID, or _ROWID_ as long as those +** names are not also used by explicitly declared columns. ^If +** the table has a column of type [INTEGER PRIMARY KEY] then that column +** is another alias for the rowid. +** +** ^The sqlite3_last_insert_rowid(D) interface usually returns the [rowid] of +** the most recent successful [INSERT] into a rowid table or [virtual table] +** on database connection D. ^Inserts into [WITHOUT ROWID] tables are not +** recorded. ^If no successful [INSERT]s into rowid tables have ever occurred +** on the database connection D, then sqlite3_last_insert_rowid(D) returns +** zero. +** +** As well as being set automatically as rows are inserted into database +** tables, the value returned by this function may be set explicitly by +** [sqlite3_set_last_insert_rowid()] +** +** Some virtual table implementations may INSERT rows into rowid tables as +** part of committing a transaction (e.g. to flush data accumulated in memory +** to disk). In this case subsequent calls to this function return the rowid +** associated with these internal INSERT operations, which leads to +** unintuitive results. Virtual table implementations that do write to rowid +** tables in this way can avoid this problem by restoring the original +** rowid value using [sqlite3_set_last_insert_rowid()] before returning +** control to the user. +** +** ^(If an [INSERT] occurs within a trigger then this routine will +** return the [rowid] of the inserted row as long as the trigger is +** running. Once the trigger program ends, the value returned +** by this routine reverts to what it was before the trigger was fired.)^ +** +** ^An [INSERT] that fails due to a constraint violation is not a +** successful [INSERT] and does not change the value returned by this +** routine. ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, +** and INSERT OR ABORT make no changes to the return value of this +** routine when their insertion fails. ^(When INSERT OR REPLACE +** encounters a constraint violation, it does not fail. The +** INSERT continues to completion after deleting rows that caused +** the constraint problem so INSERT OR REPLACE will always change +** the return value of this interface.)^ +** +** ^For the purposes of this routine, an [INSERT] is considered to +** be successful even if it is subsequently rolled back. +** +** This function is accessible to SQL statements via the +** [last_insert_rowid() SQL function]. +** +** If a separate thread performs a new [INSERT] on the same +** database connection while the [sqlite3_last_insert_rowid()] +** function is running and thus changes the last insert [rowid], +** then the value returned by [sqlite3_last_insert_rowid()] is +** unpredictable and might not equal either the old or the new +** last insert [rowid]. +*/ +SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); + +/* +** CAPI3REF: Set the Last Insert Rowid value. +** METHOD: sqlite3 +** +** The sqlite3_set_last_insert_rowid(D, R) method allows the application to +** set the value returned by calling sqlite3_last_insert_rowid(D) to R +** without inserting a row into the database. +*/ +SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64); + +/* +** CAPI3REF: Count The Number Of Rows Modified +** METHOD: sqlite3 +** +** ^These functions return the number of rows modified, inserted or +** deleted by the most recently completed INSERT, UPDATE or DELETE +** statement on the database connection specified by the only parameter. +** The two functions are identical except for the type of the return value +** and that if the number of rows modified by the most recent INSERT, UPDATE, +** or DELETE is greater than the maximum value supported by type "int", then +** the return value of sqlite3_changes() is undefined. ^Executing any other +** type of SQL statement does not modify the value returned by these functions. +** For the purposes of this interface, a CREATE TABLE AS SELECT statement +** does not count as an INSERT, UPDATE or DELETE statement and hence the rows +** added to the new table by the CREATE TABLE AS SELECT statement are not +** counted. +** +** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are +** considered - auxiliary changes caused by [CREATE TRIGGER | triggers], +** [foreign key actions] or [REPLACE] constraint resolution are not counted. +** +** Changes to a view that are intercepted by +** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value +** returned by sqlite3_changes() immediately after an INSERT, UPDATE or +** DELETE statement run on a view is always zero. Only changes made to real +** tables are counted. +** +** Things are more complicated if the sqlite3_changes() function is +** executed while a trigger program is running. This may happen if the +** program uses the [changes() SQL function], or if some other callback +** function invokes sqlite3_changes() directly. Essentially: +** +**

    +**
  • ^(Before entering a trigger program the value returned by +** sqlite3_changes() function is saved. After the trigger program +** has finished, the original value is restored.)^ +** +**
  • ^(Within a trigger program each INSERT, UPDATE and DELETE +** statement sets the value returned by sqlite3_changes() +** upon completion as normal. Of course, this value will not include +** any changes performed by sub-triggers, as the sqlite3_changes() +** value will be saved and restored after each sub-trigger has run.)^ +**
+** +** ^This means that if the changes() SQL function (or similar) is used +** by the first INSERT, UPDATE or DELETE statement within a trigger, it +** returns the value as set when the calling statement began executing. +** ^If it is used by the second or subsequent such statement within a trigger +** program, the value returned reflects the number of rows modified by the +** previous INSERT, UPDATE or DELETE statement within the same trigger. +** +** If a separate thread makes changes on the same database connection +** while [sqlite3_changes()] is running then the value returned +** is unpredictable and not meaningful. +** +** See also: +**
    +**
  • the [sqlite3_total_changes()] interface +**
  • the [count_changes pragma] +**
  • the [changes() SQL function] +**
  • the [data_version pragma] +**
+*/ +SQLITE_API int sqlite3_changes(sqlite3*); +SQLITE_API sqlite3_int64 sqlite3_changes64(sqlite3*); + +/* +** CAPI3REF: Total Number Of Rows Modified +** METHOD: sqlite3 +** +** ^These functions return the total number of rows inserted, modified or +** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed +** since the database connection was opened, including those executed as +** part of trigger programs. The two functions are identical except for the +** type of the return value and that if the number of rows modified by the +** connection exceeds the maximum value supported by type "int", then +** the return value of sqlite3_total_changes() is undefined. ^Executing +** any other type of SQL statement does not affect the value returned by +** sqlite3_total_changes(). +** +** ^Changes made as part of [foreign key actions] are included in the +** count, but those made as part of REPLACE constraint resolution are +** not. ^Changes to a view that are intercepted by INSTEAD OF triggers +** are not counted. +** +** The [sqlite3_total_changes(D)] interface only reports the number +** of rows that changed due to SQL statement run against database +** connection D. Any changes by other database connections are ignored. +** To detect changes against a database file from other database +** connections use the [PRAGMA data_version] command or the +** [SQLITE_FCNTL_DATA_VERSION] [file control]. +** +** If a separate thread makes changes on the same database connection +** while [sqlite3_total_changes()] is running then the value +** returned is unpredictable and not meaningful. +** +** See also: +**
    +**
  • the [sqlite3_changes()] interface +**
  • the [count_changes pragma] +**
  • the [changes() SQL function] +**
  • the [data_version pragma] +**
  • the [SQLITE_FCNTL_DATA_VERSION] [file control] +**
+*/ +SQLITE_API int sqlite3_total_changes(sqlite3*); +SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*); + +/* +** CAPI3REF: Interrupt A Long-Running Query +** METHOD: sqlite3 +** +** ^This function causes any pending database operation to abort and +** return at its earliest opportunity. This routine is typically +** called in response to a user action such as pressing "Cancel" +** or Ctrl-C where the user wants a long query operation to halt +** immediately. +** +** ^It is safe to call this routine from a thread different from the +** thread that is currently running the database operation. But it +** is not safe to call this routine with a [database connection] that +** is closed or might close before sqlite3_interrupt() returns. +** +** ^If an SQL operation is very nearly finished at the time when +** sqlite3_interrupt() is called, then it might not have an opportunity +** to be interrupted and might continue to completion. +** +** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT]. +** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE +** that is inside an explicit transaction, then the entire transaction +** will be rolled back automatically. +** +** ^The sqlite3_interrupt(D) call is in effect until all currently running +** SQL statements on [database connection] D complete. ^Any new SQL statements +** that are started after the sqlite3_interrupt() call and before the +** running statement count reaches zero are interrupted as if they had been +** running prior to the sqlite3_interrupt() call. ^New SQL statements +** that are started after the running statement count reaches zero are +** not effected by the sqlite3_interrupt(). +** ^A call to sqlite3_interrupt(D) that occurs when there are no running +** SQL statements is a no-op and has no effect on SQL statements +** that are started after the sqlite3_interrupt() call returns. +** +** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether +** or not an interrupt is currently in effect for [database connection] D. +** It returns 1 if an interrupt is currently in effect, or 0 otherwise. +*/ +SQLITE_API void sqlite3_interrupt(sqlite3*); +SQLITE_API int sqlite3_is_interrupted(sqlite3*); + +/* +** CAPI3REF: Determine If An SQL Statement Is Complete +** +** These routines are useful during command-line input to determine if the +** currently entered text seems to form a complete SQL statement or +** if additional input is needed before sending the text into +** SQLite for parsing. ^These routines return 1 if the input string +** appears to be a complete SQL statement. ^A statement is judged to be +** complete if it ends with a semicolon token and is not a prefix of a +** well-formed CREATE TRIGGER statement. ^Semicolons that are embedded within +** string literals or quoted identifier names or comments are not +** independent tokens (they are part of the token in which they are +** embedded) and thus do not count as a statement terminator. ^Whitespace +** and comments that follow the final semicolon are ignored. +** +** ^These routines return 0 if the statement is incomplete. ^If a +** memory allocation fails, then SQLITE_NOMEM is returned. +** +** ^These routines do not parse the SQL statements thus +** will not detect syntactically incorrect SQL. +** +** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior +** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked +** automatically by sqlite3_complete16(). If that initialization fails, +** then the return value from sqlite3_complete16() will be non-zero +** regardless of whether or not the input SQL is complete.)^ +** +** The input to [sqlite3_complete()] must be a zero-terminated +** UTF-8 string. +** +** The input to [sqlite3_complete16()] must be a zero-terminated +** UTF-16 string in native byte order. +*/ +SQLITE_API int sqlite3_complete(const char *sql); +SQLITE_API int sqlite3_complete16(const void *sql); + +/* +** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors +** KEYWORDS: {busy-handler callback} {busy handler} +** METHOD: sqlite3 +** +** ^The sqlite3_busy_handler(D,X,P) routine sets a callback function X +** that might be invoked with argument P whenever +** an attempt is made to access a database table associated with +** [database connection] D when another thread +** or process has the table locked. +** The sqlite3_busy_handler() interface is used to implement +** [sqlite3_busy_timeout()] and [PRAGMA busy_timeout]. +** +** ^If the busy callback is NULL, then [SQLITE_BUSY] +** is returned immediately upon encountering the lock. ^If the busy callback +** is not NULL, then the callback might be invoked with two arguments. +** +** ^The first argument to the busy handler is a copy of the void* pointer which +** is the third argument to sqlite3_busy_handler(). ^The second argument to +** the busy handler callback is the number of times that the busy handler has +** been invoked previously for the same locking event. ^If the +** busy callback returns 0, then no additional attempts are made to +** access the database and [SQLITE_BUSY] is returned +** to the application. +** ^If the callback returns non-zero, then another attempt +** is made to access the database and the cycle repeats. +** +** The presence of a busy handler does not guarantee that it will be invoked +** when there is lock contention. ^If SQLite determines that invoking the busy +** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY] +** to the application instead of invoking the +** busy handler. +** Consider a scenario where one process is holding a read lock that +** it is trying to promote to a reserved lock and +** a second process is holding a reserved lock that it is trying +** to promote to an exclusive lock. The first process cannot proceed +** because it is blocked by the second and the second process cannot +** proceed because it is blocked by the first. If both processes +** invoke the busy handlers, neither will make any progress. Therefore, +** SQLite returns [SQLITE_BUSY] for the first process, hoping that this +** will induce the first process to release its read lock and allow +** the second process to proceed. +** +** ^The default busy callback is NULL. +** +** ^(There can only be a single busy handler defined for each +** [database connection]. Setting a new busy handler clears any +** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()] +** or evaluating [PRAGMA busy_timeout=N] will change the +** busy handler and thus clear any previously set busy handler. +** +** The busy callback should not take any actions which modify the +** database connection that invoked the busy handler. In other words, +** the busy handler is not reentrant. Any such actions +** result in undefined behavior. +** +** A busy handler must not close the database connection +** or [prepared statement] that invoked the busy handler. +*/ +SQLITE_API int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*); + +/* +** CAPI3REF: Set A Busy Timeout +** METHOD: sqlite3 +** +** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps +** for a specified amount of time when a table is locked. ^The handler +** will sleep multiple times until at least "ms" milliseconds of sleeping +** have accumulated. ^After at least "ms" milliseconds of sleeping, +** the handler returns 0 which causes [sqlite3_step()] to return +** [SQLITE_BUSY]. +** +** ^Calling this routine with an argument less than or equal to zero +** turns off all busy handlers. +** +** ^(There can only be a single busy handler for a particular +** [database connection] at any given moment. If another busy handler +** was defined (using [sqlite3_busy_handler()]) prior to calling +** this routine, that other busy handler is cleared.)^ +** +** See also: [PRAGMA busy_timeout] +*/ +SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms); + +/* +** CAPI3REF: Set the Setlk Timeout +** METHOD: sqlite3 +** +** This routine is only useful in SQLITE_ENABLE_SETLK_TIMEOUT builds. If +** the VFS supports blocking locks, it sets the timeout in ms used by +** eligible locks taken on wal mode databases by the specified database +** handle. In non-SQLITE_ENABLE_SETLK_TIMEOUT builds, or if the VFS does +** not support blocking locks, this function is a no-op. +** +** Passing 0 to this function disables blocking locks altogether. Passing +** -1 to this function requests that the VFS blocks for a long time - +** indefinitely if possible. The results of passing any other negative value +** are undefined. +** +** Internally, each SQLite database handle store two timeout values - the +** busy-timeout (used for rollback mode databases, or if the VFS does not +** support blocking locks) and the setlk-timeout (used for blocking locks +** on wal-mode databases). The sqlite3_busy_timeout() method sets both +** values, this function sets only the setlk-timeout value. Therefore, +** to configure separate busy-timeout and setlk-timeout values for a single +** database handle, call sqlite3_busy_timeout() followed by this function. +** +** Whenever the number of connections to a wal mode database falls from +** 1 to 0, the last connection takes an exclusive lock on the database, +** then checkpoints and deletes the wal file. While it is doing this, any +** new connection that tries to read from the database fails with an +** SQLITE_BUSY error. Or, if the SQLITE_SETLK_BLOCK_ON_CONNECT flag is +** passed to this API, the new connection blocks until the exclusive lock +** has been released. +*/ +SQLITE_API int sqlite3_setlk_timeout(sqlite3*, int ms, int flags); + +/* +** CAPI3REF: Flags for sqlite3_setlk_timeout() +*/ +#define SQLITE_SETLK_BLOCK_ON_CONNECT 0x01 + +/* +** CAPI3REF: Convenience Routines For Running Queries +** METHOD: sqlite3 +** +** This is a legacy interface that is preserved for backwards compatibility. +** Use of this interface is not recommended. +** +** Definition: A result table is memory data structure created by the +** [sqlite3_get_table()] interface. A result table records the +** complete query results from one or more queries. +** +** The table conceptually has a number of rows and columns. But +** these numbers are not part of the result table itself. These +** numbers are obtained separately. Let N be the number of rows +** and M be the number of columns. +** +** A result table is an array of pointers to zero-terminated UTF-8 strings. +** There are (N+1)*M elements in the array. The first M pointers point +** to zero-terminated strings that contain the names of the columns. +** The remaining entries all point to query results. NULL values result +** in NULL pointers. All other values are in their UTF-8 zero-terminated +** string representation as returned by [sqlite3_column_text()]. +** +** A result table might consist of one or more memory allocations. +** It is not safe to pass a result table directly to [sqlite3_free()]. +** A result table should be deallocated using [sqlite3_free_table()]. +** +** ^(As an example of the result table format, suppose a query result +** is as follows: +** +**
+**        Name        | Age
+**        -----------------------
+**        Alice       | 43
+**        Bob         | 28
+**        Cindy       | 21
+** 
+** +** There are two columns (M==2) and three rows (N==3). Thus the +** result table has 8 entries. Suppose the result table is stored +** in an array named azResult. Then azResult holds this content: +** +**
+**        azResult[0] = "Name";
+**        azResult[1] = "Age";
+**        azResult[2] = "Alice";
+**        azResult[3] = "43";
+**        azResult[4] = "Bob";
+**        azResult[5] = "28";
+**        azResult[6] = "Cindy";
+**        azResult[7] = "21";
+** 
)^ +** +** ^The sqlite3_get_table() function evaluates one or more +** semicolon-separated SQL statements in the zero-terminated UTF-8 +** string of its 2nd parameter and returns a result table to the +** pointer given in its 3rd parameter. +** +** After the application has finished with the result from sqlite3_get_table(), +** it must pass the result table pointer to sqlite3_free_table() in order to +** release the memory that was malloced. Because of the way the +** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling +** function must not try to call [sqlite3_free()] directly. Only +** [sqlite3_free_table()] is able to release the memory properly and safely. +** +** The sqlite3_get_table() interface is implemented as a wrapper around +** [sqlite3_exec()]. The sqlite3_get_table() routine does not have access +** to any internal data structures of SQLite. It uses only the public +** interface defined here. As a consequence, errors that occur in the +** wrapper layer outside of the internal [sqlite3_exec()] call are not +** reflected in subsequent calls to [sqlite3_errcode()] or +** [sqlite3_errmsg()]. +*/ +SQLITE_API int sqlite3_get_table( + sqlite3 *db, /* An open database */ + const char *zSql, /* SQL to be evaluated */ + char ***pazResult, /* Results of the query */ + int *pnRow, /* Number of result rows written here */ + int *pnColumn, /* Number of result columns written here */ + char **pzErrmsg /* Error msg written here */ +); +SQLITE_API void sqlite3_free_table(char **result); + +/* +** CAPI3REF: Formatted String Printing Functions +** +** These routines are work-alikes of the "printf()" family of functions +** from the standard C library. +** These routines understand most of the common formatting options from +** the standard library printf() +** plus some additional non-standard formats ([%q], [%Q], [%w], and [%z]). +** See the [built-in printf()] documentation for details. +** +** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their +** results into memory obtained from [sqlite3_malloc64()]. +** The strings returned by these two routines should be +** released by [sqlite3_free()]. ^Both routines return a +** NULL pointer if [sqlite3_malloc64()] is unable to allocate enough +** memory to hold the resulting string. +** +** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from +** the standard C library. The result is written into the +** buffer supplied as the second parameter whose size is given by +** the first parameter. Note that the order of the +** first two parameters is reversed from snprintf().)^ This is an +** historical accident that cannot be fixed without breaking +** backwards compatibility. ^(Note also that sqlite3_snprintf() +** returns a pointer to its buffer instead of the number of +** characters actually written into the buffer.)^ We admit that +** the number of characters written would be a more useful return +** value but we cannot change the implementation of sqlite3_snprintf() +** now without breaking compatibility. +** +** ^As long as the buffer size is greater than zero, sqlite3_snprintf() +** guarantees that the buffer is always zero-terminated. ^The first +** parameter "n" is the total size of the buffer, including space for +** the zero terminator. So the longest string that can be completely +** written will be n-1 characters. +** +** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). +** +** See also: [built-in printf()], [printf() SQL function] +*/ +SQLITE_API char *sqlite3_mprintf(const char*,...); +SQLITE_API char *sqlite3_vmprintf(const char*, va_list); +SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...); +SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list); + +/* +** CAPI3REF: Memory Allocation Subsystem +** +** The SQLite core uses these three routines for all of its own +** internal memory allocation needs. "Core" in the previous sentence +** does not include operating-system specific [VFS] implementation. The +** Windows VFS uses native malloc() and free() for some operations. +** +** ^The sqlite3_malloc() routine returns a pointer to a block +** of memory at least N bytes in length, where N is the parameter. +** ^If sqlite3_malloc() is unable to obtain sufficient free +** memory, it returns a NULL pointer. ^If the parameter N to +** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns +** a NULL pointer. +** +** ^The sqlite3_malloc64(N) routine works just like +** sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead +** of a signed 32-bit integer. +** +** ^Calling sqlite3_free() with a pointer previously returned +** by sqlite3_malloc() or sqlite3_realloc() releases that memory so +** that it might be reused. ^The sqlite3_free() routine is +** a no-op if is called with a NULL pointer. Passing a NULL pointer +** to sqlite3_free() is harmless. After being freed, memory +** should neither be read nor written. Even reading previously freed +** memory might result in a segmentation fault or other severe error. +** Memory corruption, a segmentation fault, or other severe error +** might result if sqlite3_free() is called with a non-NULL pointer that +** was not obtained from sqlite3_malloc() or sqlite3_realloc(). +** +** ^The sqlite3_realloc(X,N) interface attempts to resize a +** prior memory allocation X to be at least N bytes. +** ^If the X parameter to sqlite3_realloc(X,N) +** is a NULL pointer then its behavior is identical to calling +** sqlite3_malloc(N). +** ^If the N parameter to sqlite3_realloc(X,N) is zero or +** negative then the behavior is exactly the same as calling +** sqlite3_free(X). +** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation +** of at least N bytes in size or NULL if insufficient memory is available. +** ^If M is the size of the prior allocation, then min(N,M) bytes +** of the prior allocation are copied into the beginning of buffer returned +** by sqlite3_realloc(X,N) and the prior allocation is freed. +** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the +** prior allocation is not freed. +** +** ^The sqlite3_realloc64(X,N) interfaces works the same as +** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead +** of a 32-bit signed integer. +** +** ^If X is a memory allocation previously obtained from sqlite3_malloc(), +** sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then +** sqlite3_msize(X) returns the size of that memory allocation in bytes. +** ^The value returned by sqlite3_msize(X) might be larger than the number +** of bytes requested when X was allocated. ^If X is a NULL pointer then +** sqlite3_msize(X) returns zero. If X points to something that is not +** the beginning of memory allocation, or if it points to a formerly +** valid memory allocation that has now been freed, then the behavior +** of sqlite3_msize(X) is undefined and possibly harmful. +** +** ^The memory returned by sqlite3_malloc(), sqlite3_realloc(), +** sqlite3_malloc64(), and sqlite3_realloc64() +** is always aligned to at least an 8 byte boundary, or to a +** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time +** option is used. +** +** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()] +** must be either NULL or else pointers obtained from a prior +** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have +** not yet been released. +** +** The application must not read or write any part of +** a block of memory after it has been released using +** [sqlite3_free()] or [sqlite3_realloc()]. +*/ +SQLITE_API void *sqlite3_malloc(int); +SQLITE_API void *sqlite3_malloc64(sqlite3_uint64); +SQLITE_API void *sqlite3_realloc(void*, int); +SQLITE_API void *sqlite3_realloc64(void*, sqlite3_uint64); +SQLITE_API void sqlite3_free(void*); +SQLITE_API sqlite3_uint64 sqlite3_msize(void*); + +/* +** CAPI3REF: Memory Allocator Statistics +** +** SQLite provides these two interfaces for reporting on the status +** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()] +** routines, which form the built-in memory allocation subsystem. +** +** ^The [sqlite3_memory_used()] routine returns the number of bytes +** of memory currently outstanding (malloced but not freed). +** ^The [sqlite3_memory_highwater()] routine returns the maximum +** value of [sqlite3_memory_used()] since the high-water mark +** was last reset. ^The values returned by [sqlite3_memory_used()] and +** [sqlite3_memory_highwater()] include any overhead +** added by SQLite in its implementation of [sqlite3_malloc()], +** but not overhead added by the any underlying system library +** routines that [sqlite3_malloc()] may call. +** +** ^The memory high-water mark is reset to the current value of +** [sqlite3_memory_used()] if and only if the parameter to +** [sqlite3_memory_highwater()] is true. ^The value returned +** by [sqlite3_memory_highwater(1)] is the high-water mark +** prior to the reset. +*/ +SQLITE_API sqlite3_int64 sqlite3_memory_used(void); +SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag); + +/* +** CAPI3REF: Pseudo-Random Number Generator +** +** SQLite contains a high-quality pseudo-random number generator (PRNG) used to +** select random [ROWID | ROWIDs] when inserting new records into a table that +** already uses the largest possible [ROWID]. The PRNG is also used for +** the built-in random() and randomblob() SQL functions. This interface allows +** applications to access the same PRNG for other purposes. +** +** ^A call to this routine stores N bytes of randomness into buffer P. +** ^The P parameter can be a NULL pointer. +** +** ^If this routine has not been previously called or if the previous +** call had N less than one or a NULL pointer for P, then the PRNG is +** seeded using randomness obtained from the xRandomness method of +** the default [sqlite3_vfs] object. +** ^If the previous call to this routine had an N of 1 or more and a +** non-NULL P then the pseudo-randomness is generated +** internally and without recourse to the [sqlite3_vfs] xRandomness +** method. +*/ +SQLITE_API void sqlite3_randomness(int N, void *P); + +/* +** CAPI3REF: Compile-Time Authorization Callbacks +** METHOD: sqlite3 +** KEYWORDS: {authorizer callback} +** +** ^This routine registers an authorizer callback with a particular +** [database connection], supplied in the first argument. +** ^The authorizer callback is invoked as SQL statements are being compiled +** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()], +** [sqlite3_prepare_v3()], [sqlite3_prepare16()], [sqlite3_prepare16_v2()], +** and [sqlite3_prepare16_v3()]. ^At various +** points during the compilation process, as logic is being created +** to perform various actions, the authorizer callback is invoked to +** see if those actions are allowed. ^The authorizer callback should +** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the +** specific action but allow the SQL statement to continue to be +** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be +** rejected with an error. ^If the authorizer callback returns +** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY] +** then the [sqlite3_prepare_v2()] or equivalent call that triggered +** the authorizer will fail with an error message. +** +** When the callback returns [SQLITE_OK], that means the operation +** requested is ok. ^When the callback returns [SQLITE_DENY], the +** [sqlite3_prepare_v2()] or equivalent call that triggered the +** authorizer will fail with an error message explaining that +** access is denied. +** +** ^The first parameter to the authorizer callback is a copy of the third +** parameter to the sqlite3_set_authorizer() interface. ^The second parameter +** to the callback is an integer [SQLITE_COPY | action code] that specifies +** the particular action to be authorized. ^The third through sixth parameters +** to the callback are either NULL pointers or zero-terminated strings +** that contain additional details about the action to be authorized. +** Applications must always be prepared to encounter a NULL pointer in any +** of the third through the sixth parameters of the authorization callback. +** +** ^If the action code is [SQLITE_READ] +** and the callback returns [SQLITE_IGNORE] then the +** [prepared statement] statement is constructed to substitute +** a NULL value in place of the table column that would have +** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE] +** return can be used to deny an untrusted user access to individual +** columns of a table. +** ^When a table is referenced by a [SELECT] but no column values are +** extracted from that table (for example in a query like +** "SELECT count(*) FROM tab") then the [SQLITE_READ] authorizer callback +** is invoked once for that table with a column name that is an empty string. +** ^If the action code is [SQLITE_DELETE] and the callback returns +** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the +** [truncate optimization] is disabled and all rows are deleted individually. +** +** An authorizer is used when [sqlite3_prepare | preparing] +** SQL statements from an untrusted source, to ensure that the SQL statements +** do not try to access data they are not allowed to see, or that they do not +** try to execute malicious statements that damage the database. For +** example, an application may allow a user to enter arbitrary +** SQL queries for evaluation by a database. But the application does +** not want the user to be able to make arbitrary changes to the +** database. An authorizer could then be put in place while the +** user-entered SQL is being [sqlite3_prepare | prepared] that +** disallows everything except [SELECT] statements. +** +** Applications that need to process SQL from untrusted sources +** might also consider lowering resource limits using [sqlite3_limit()] +** and limiting database size using the [max_page_count] [PRAGMA] +** in addition to using an authorizer. +** +** ^(Only a single authorizer can be in place on a database connection +** at a time. Each call to sqlite3_set_authorizer overrides the +** previous call.)^ ^Disable the authorizer by installing a NULL callback. +** The authorizer is disabled by default. +** +** The authorizer callback must not do anything that will modify +** the database connection that invoked the authorizer callback. +** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their +** database connections for the meaning of "modify" in this paragraph. +** +** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the +** statement might be re-prepared during [sqlite3_step()] due to a +** schema change. Hence, the application should ensure that the +** correct authorizer callback remains in place during the [sqlite3_step()]. +** +** ^Note that the authorizer callback is invoked only during +** [sqlite3_prepare()] or its variants. Authorization is not +** performed during statement evaluation in [sqlite3_step()], unless +** as stated in the previous paragraph, sqlite3_step() invokes +** sqlite3_prepare_v2() to reprepare a statement after a schema change. +*/ +SQLITE_API int sqlite3_set_authorizer( + sqlite3*, + int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), + void *pUserData +); + +/* +** CAPI3REF: Authorizer Return Codes +** +** The [sqlite3_set_authorizer | authorizer callback function] must +** return either [SQLITE_OK] or one of these two constants in order +** to signal SQLite whether or not the action is permitted. See the +** [sqlite3_set_authorizer | authorizer documentation] for additional +** information. +** +** Note that SQLITE_IGNORE is also used as a [conflict resolution mode] +** returned from the [sqlite3_vtab_on_conflict()] interface. +*/ +#define SQLITE_DENY 1 /* Abort the SQL statement with an error */ +#define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */ + +/* +** CAPI3REF: Authorizer Action Codes +** +** The [sqlite3_set_authorizer()] interface registers a callback function +** that is invoked to authorize certain SQL statement actions. The +** second parameter to the callback is an integer code that specifies +** what action is being authorized. These are the integer action codes that +** the authorizer callback may be passed. +** +** These action code values signify what kind of operation is to be +** authorized. The 3rd and 4th parameters to the authorization +** callback function will be parameters or NULL depending on which of these +** codes is used as the second parameter. ^(The 5th parameter to the +** authorizer callback is the name of the database ("main", "temp", +** etc.) if applicable.)^ ^The 6th parameter to the authorizer callback +** is the name of the inner-most trigger or view that is responsible for +** the access attempt or NULL if this access attempt is directly from +** top-level SQL code. +*/ +/******************************************* 3rd ************ 4th ***********/ +#define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */ +#define SQLITE_CREATE_TABLE 2 /* Table Name NULL */ +#define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */ +#define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */ +#define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */ +#define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */ +#define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */ +#define SQLITE_CREATE_VIEW 8 /* View Name NULL */ +#define SQLITE_DELETE 9 /* Table Name NULL */ +#define SQLITE_DROP_INDEX 10 /* Index Name Table Name */ +#define SQLITE_DROP_TABLE 11 /* Table Name NULL */ +#define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */ +#define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */ +#define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */ +#define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */ +#define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */ +#define SQLITE_DROP_VIEW 17 /* View Name NULL */ +#define SQLITE_INSERT 18 /* Table Name NULL */ +#define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */ +#define SQLITE_READ 20 /* Table Name Column Name */ +#define SQLITE_SELECT 21 /* NULL NULL */ +#define SQLITE_TRANSACTION 22 /* Operation NULL */ +#define SQLITE_UPDATE 23 /* Table Name Column Name */ +#define SQLITE_ATTACH 24 /* Filename NULL */ +#define SQLITE_DETACH 25 /* Database Name NULL */ +#define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */ +#define SQLITE_REINDEX 27 /* Index Name NULL */ +#define SQLITE_ANALYZE 28 /* Table Name NULL */ +#define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */ +#define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */ +#define SQLITE_FUNCTION 31 /* NULL Function Name */ +#define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */ +#define SQLITE_COPY 0 /* No longer used */ +#define SQLITE_RECURSIVE 33 /* NULL NULL */ + +/* +** CAPI3REF: Deprecated Tracing And Profiling Functions +** DEPRECATED +** +** These routines are deprecated. Use the [sqlite3_trace_v2()] interface +** instead of the routines described here. +** +** These routines register callback functions that can be used for +** tracing and profiling the execution of SQL statements. +** +** ^The callback function registered by sqlite3_trace() is invoked at +** various times when an SQL statement is being run by [sqlite3_step()]. +** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the +** SQL statement text as the statement first begins executing. +** ^(Additional sqlite3_trace() callbacks might occur +** as each triggered subprogram is entered. The callbacks for triggers +** contain a UTF-8 SQL comment that identifies the trigger.)^ +** +** The [SQLITE_TRACE_SIZE_LIMIT] compile-time option can be used to limit +** the length of [bound parameter] expansion in the output of sqlite3_trace(). +** +** ^The callback function registered by sqlite3_profile() is invoked +** as each SQL statement finishes. ^The profile callback contains +** the original statement text and an estimate of wall-clock time +** of how long that statement took to run. ^The profile callback +** time is in units of nanoseconds, however the current implementation +** is only capable of millisecond resolution so the six least significant +** digits in the time are meaningless. Future versions of SQLite +** might provide greater resolution on the profiler callback. Invoking +** either [sqlite3_trace()] or [sqlite3_trace_v2()] will cancel the +** profile callback. +*/ +SQLITE_API SQLITE_DEPRECATED void *sqlite3_trace(sqlite3*, + void(*xTrace)(void*,const char*), void*); +SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, + void(*xProfile)(void*,const char*,sqlite3_uint64), void*); + +/* +** CAPI3REF: SQL Trace Event Codes +** KEYWORDS: SQLITE_TRACE +** +** These constants identify classes of events that can be monitored +** using the [sqlite3_trace_v2()] tracing logic. The M argument +** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of +** the following constants. ^The first argument to the trace callback +** is one of the following constants. +** +** New tracing constants may be added in future releases. +** +** ^A trace callback has four arguments: xCallback(T,C,P,X). +** ^The T argument is one of the integer type codes above. +** ^The C argument is a copy of the context pointer passed in as the +** fourth argument to [sqlite3_trace_v2()]. +** The P and X arguments are pointers whose meanings depend on T. +** +**
+** [[SQLITE_TRACE_STMT]]
SQLITE_TRACE_STMT
+**
^An SQLITE_TRACE_STMT callback is invoked when a prepared statement +** first begins running and possibly at other times during the +** execution of the prepared statement, such as at the start of each +** trigger subprogram. ^The P argument is a pointer to the +** [prepared statement]. ^The X argument is a pointer to a string which +** is the unexpanded SQL text of the prepared statement or an SQL comment +** that indicates the invocation of a trigger. ^The callback can compute +** the same text that would have been returned by the legacy [sqlite3_trace()] +** interface by using the X argument when X begins with "--" and invoking +** [sqlite3_expanded_sql(P)] otherwise. +** +** [[SQLITE_TRACE_PROFILE]]
SQLITE_TRACE_PROFILE
+**
^An SQLITE_TRACE_PROFILE callback provides approximately the same +** information as is provided by the [sqlite3_profile()] callback. +** ^The P argument is a pointer to the [prepared statement] and the +** X argument points to a 64-bit integer which is approximately +** the number of nanoseconds that the prepared statement took to run. +** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes. +** +** [[SQLITE_TRACE_ROW]]
SQLITE_TRACE_ROW
+**
^An SQLITE_TRACE_ROW callback is invoked whenever a prepared +** statement generates a single row of result. +** ^The P argument is a pointer to the [prepared statement] and the +** X argument is unused. +** +** [[SQLITE_TRACE_CLOSE]]
SQLITE_TRACE_CLOSE
+**
^An SQLITE_TRACE_CLOSE callback is invoked when a database +** connection closes. +** ^The P argument is a pointer to the [database connection] object +** and the X argument is unused. +**
+*/ +#define SQLITE_TRACE_STMT 0x01 +#define SQLITE_TRACE_PROFILE 0x02 +#define SQLITE_TRACE_ROW 0x04 +#define SQLITE_TRACE_CLOSE 0x08 + +/* +** CAPI3REF: SQL Trace Hook +** METHOD: sqlite3 +** +** ^The sqlite3_trace_v2(D,M,X,P) interface registers a trace callback +** function X against [database connection] D, using property mask M +** and context pointer P. ^If the X callback is +** NULL or if the M mask is zero, then tracing is disabled. The +** M argument should be the bitwise OR-ed combination of +** zero or more [SQLITE_TRACE] constants. +** +** ^Each call to either sqlite3_trace(D,X,P) or sqlite3_trace_v2(D,M,X,P) +** overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or +** sqlite3_trace_v2(D,M,X,P) for the [database connection] D. Each +** database connection may have at most one trace callback. +** +** ^The X callback is invoked whenever any of the events identified by +** mask M occur. ^The integer return value from the callback is currently +** ignored, though this may change in future releases. Callback +** implementations should return zero to ensure future compatibility. +** +** ^A trace callback is invoked with four arguments: callback(T,C,P,X). +** ^The T argument is one of the [SQLITE_TRACE] +** constants to indicate why the callback was invoked. +** ^The C argument is a copy of the context pointer. +** The P and X arguments are pointers whose meanings depend on T. +** +** The sqlite3_trace_v2() interface is intended to replace the legacy +** interfaces [sqlite3_trace()] and [sqlite3_profile()], both of which +** are deprecated. +*/ +SQLITE_API int sqlite3_trace_v2( + sqlite3*, + unsigned uMask, + int(*xCallback)(unsigned,void*,void*,void*), + void *pCtx +); + +/* +** CAPI3REF: Query Progress Callbacks +** METHOD: sqlite3 +** +** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback +** function X to be invoked periodically during long running calls to +** [sqlite3_step()] and [sqlite3_prepare()] and similar for +** database connection D. An example use for this +** interface is to keep a GUI updated during a large query. +** +** ^The parameter P is passed through as the only parameter to the +** callback function X. ^The parameter N is the approximate number of +** [virtual machine instructions] that are evaluated between successive +** invocations of the callback X. ^If N is less than one then the progress +** handler is disabled. +** +** ^Only a single progress handler may be defined at one time per +** [database connection]; setting a new progress handler cancels the +** old one. ^Setting parameter X to NULL disables the progress handler. +** ^The progress handler is also disabled by setting N to a value less +** than 1. +** +** ^If the progress callback returns non-zero, the operation is +** interrupted. This feature can be used to implement a +** "Cancel" button on a GUI progress dialog box. +** +** The progress handler callback must not do anything that will modify +** the database connection that invoked the progress handler. +** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their +** database connections for the meaning of "modify" in this paragraph. +** +** The progress handler callback would originally only be invoked from the +** bytecode engine. It still might be invoked during [sqlite3_prepare()] +** and similar because those routines might force a reparse of the schema +** which involves running the bytecode engine. However, beginning with +** SQLite version 3.41.0, the progress handler callback might also be +** invoked directly from [sqlite3_prepare()] while analyzing and generating +** code for complex queries. +*/ +SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); + +/* +** CAPI3REF: Opening A New Database Connection +** CONSTRUCTOR: sqlite3 +** +** ^These routines open an SQLite database file as specified by the +** filename argument. ^The filename argument is interpreted as UTF-8 for +** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte +** order for sqlite3_open16(). ^(A [database connection] handle is usually +** returned in *ppDb, even if an error occurs. The only exception is that +** if SQLite is unable to allocate memory to hold the [sqlite3] object, +** a NULL will be written into *ppDb instead of a pointer to the [sqlite3] +** object.)^ ^(If the database is opened (and/or created) successfully, then +** [SQLITE_OK] is returned. Otherwise an [error code] is returned.)^ ^The +** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain +** an English language description of the error following a failure of any +** of the sqlite3_open() routines. +** +** ^The default encoding will be UTF-8 for databases created using +** sqlite3_open() or sqlite3_open_v2(). ^The default encoding for databases +** created using sqlite3_open16() will be UTF-16 in the native byte order. +** +** Whether or not an error occurs when it is opened, resources +** associated with the [database connection] handle should be released by +** passing it to [sqlite3_close()] when it is no longer required. +** +** The sqlite3_open_v2() interface works like sqlite3_open() +** except that it accepts two additional parameters for additional control +** over the new database connection. ^(The flags parameter to +** sqlite3_open_v2() must include, at a minimum, one of the following +** three flag combinations:)^ +** +**
+** ^(
[SQLITE_OPEN_READONLY]
+**
The database is opened in read-only mode. If the database does +** not already exist, an error is returned.
)^ +** +** ^(
[SQLITE_OPEN_READWRITE]
+**
The database is opened for reading and writing if possible, or +** reading only if the file is write protected by the operating +** system. In either case the database must already exist, otherwise +** an error is returned. For historical reasons, if opening in +** read-write mode fails due to OS-level permissions, an attempt is +** made to open it in read-only mode. [sqlite3_db_readonly()] can be +** used to determine whether the database is actually +** read-write.
)^ +** +** ^(
[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
+**
The database is opened for reading and writing, and is created if +** it does not already exist. This is the behavior that is always used for +** sqlite3_open() and sqlite3_open16().
)^ +**
+** +** In addition to the required flags, the following optional flags are +** also supported: +** +**
+** ^(
[SQLITE_OPEN_URI]
+**
The filename can be interpreted as a URI if this flag is set.
)^ +** +** ^(
[SQLITE_OPEN_MEMORY]
+**
The database will be opened as an in-memory database. The database +** is named by the "filename" argument for the purposes of cache-sharing, +** if shared cache mode is enabled, but the "filename" is otherwise ignored. +**
)^ +** +** ^(
[SQLITE_OPEN_NOMUTEX]
+**
The new database connection will use the "multi-thread" +** [threading mode].)^ This means that separate threads are allowed +** to use SQLite at the same time, as long as each thread is using +** a different [database connection]. +** +** ^(
[SQLITE_OPEN_FULLMUTEX]
+**
The new database connection will use the "serialized" +** [threading mode].)^ This means the multiple threads can safely +** attempt to use the same database connection at the same time. +** (Mutexes will block any actual concurrency, but in this mode +** there is no harm in trying.) +** +** ^(
[SQLITE_OPEN_SHAREDCACHE]
+**
The database is opened [shared cache] enabled, overriding +** the default shared cache setting provided by +** [sqlite3_enable_shared_cache()].)^ +** The [use of shared cache mode is discouraged] and hence shared cache +** capabilities may be omitted from many builds of SQLite. In such cases, +** this option is a no-op. +** +** ^(
[SQLITE_OPEN_PRIVATECACHE]
+**
The database is opened [shared cache] disabled, overriding +** the default shared cache setting provided by +** [sqlite3_enable_shared_cache()].)^ +** +** [[OPEN_EXRESCODE]] ^(
[SQLITE_OPEN_EXRESCODE]
+**
The database connection comes up in "extended result code mode". +** In other words, the database behaves as if +** [sqlite3_extended_result_codes(db,1)] were called on the database +** connection as soon as the connection is created. In addition to setting +** the extended result code mode, this flag also causes [sqlite3_open_v2()] +** to return an extended result code.
+** +** [[OPEN_NOFOLLOW]] ^(
[SQLITE_OPEN_NOFOLLOW]
+**
The database filename is not allowed to contain a symbolic link
+**
)^ +** +** If the 3rd parameter to sqlite3_open_v2() is not one of the +** required combinations shown above optionally combined with other +** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] +** then the behavior is undefined. Historic versions of SQLite +** have silently ignored surplus bits in the flags parameter to +** sqlite3_open_v2(), however that behavior might not be carried through +** into future versions of SQLite and so applications should not rely +** upon it. Note in particular that the SQLITE_OPEN_EXCLUSIVE flag is a no-op +** for sqlite3_open_v2(). The SQLITE_OPEN_EXCLUSIVE does *not* cause +** the open to fail if the database already exists. The SQLITE_OPEN_EXCLUSIVE +** flag is intended for use by the [sqlite3_vfs|VFS interface] only, and not +** by sqlite3_open_v2(). +** +** ^The fourth parameter to sqlite3_open_v2() is the name of the +** [sqlite3_vfs] object that defines the operating system interface that +** the new database connection should use. ^If the fourth parameter is +** a NULL pointer then the default [sqlite3_vfs] object is used. +** +** ^If the filename is ":memory:", then a private, temporary in-memory database +** is created for the connection. ^This in-memory database will vanish when +** the database connection is closed. Future versions of SQLite might +** make use of additional special filenames that begin with the ":" character. +** It is recommended that when a database filename actually does begin with +** a ":" character you should prefix the filename with a pathname such as +** "./" to avoid ambiguity. +** +** ^If the filename is an empty string, then a private, temporary +** on-disk database will be created. ^This private database will be +** automatically deleted as soon as the database connection is closed. +** +** [[URI filenames in sqlite3_open()]]

URI Filenames

+** +** ^If [URI filename] interpretation is enabled, and the filename argument +** begins with "file:", then the filename is interpreted as a URI. ^URI +** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is +** set in the third argument to sqlite3_open_v2(), or if it has +** been enabled globally using the [SQLITE_CONFIG_URI] option with the +** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option. +** URI filename interpretation is turned off +** by default, but future releases of SQLite might enable URI filename +** interpretation by default. See "[URI filenames]" for additional +** information. +** +** URI filenames are parsed according to RFC 3986. ^If the URI contains an +** authority, then it must be either an empty string or the string +** "localhost". ^If the authority is not an empty string or "localhost", an +** error is returned to the caller. ^The fragment component of a URI, if +** present, is ignored. +** +** ^SQLite uses the path component of the URI as the name of the disk file +** which contains the database. ^If the path begins with a '/' character, +** then it is interpreted as an absolute path. ^If the path does not begin +** with a '/' (meaning that the authority section is omitted from the URI) +** then the path is interpreted as a relative path. +** ^(On windows, the first component of an absolute path +** is a drive specification (e.g. "C:").)^ +** +** [[core URI query parameters]] +** The query component of a URI may contain parameters that are interpreted +** either by SQLite itself, or by a [VFS | custom VFS implementation]. +** SQLite and its built-in [VFSes] interpret the +** following query parameters: +** +**
    +**
  • vfs: ^The "vfs" parameter may be used to specify the name of +** a VFS object that provides the operating system interface that should +** be used to access the database file on disk. ^If this option is set to +** an empty string the default VFS object is used. ^Specifying an unknown +** VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is +** present, then the VFS specified by the option takes precedence over +** the value passed as the fourth parameter to sqlite3_open_v2(). +** +**
  • mode: ^(The mode parameter may be set to either "ro", "rw", +** "rwc", or "memory". Attempting to set it to any other value is +** an error)^. +** ^If "ro" is specified, then the database is opened for read-only +** access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the +** third argument to sqlite3_open_v2(). ^If the mode option is set to +** "rw", then the database is opened for read-write (but not create) +** access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had +** been set. ^Value "rwc" is equivalent to setting both +** SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If the mode option is +** set to "memory" then a pure [in-memory database] that never reads +** or writes from disk is used. ^It is an error to specify a value for +** the mode parameter that is less restrictive than that specified by +** the flags passed in the third parameter to sqlite3_open_v2(). +** +**
  • cache: ^The cache parameter may be set to either "shared" or +** "private". ^Setting it to "shared" is equivalent to setting the +** SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to +** sqlite3_open_v2(). ^Setting the cache parameter to "private" is +** equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit. +** ^If sqlite3_open_v2() is used and the "cache" parameter is present in +** a URI filename, its value overrides any behavior requested by setting +** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag. +** +**
  • psow: ^The psow parameter indicates whether or not the +** [powersafe overwrite] property does or does not apply to the +** storage media on which the database file resides. +** +**
  • nolock: ^The nolock parameter is a boolean query parameter +** which if set disables file locking in rollback journal modes. This +** is useful for accessing a database on a filesystem that does not +** support locking. Caution: Database corruption might result if two +** or more processes write to the same database and any one of those +** processes uses nolock=1. +** +**
  • immutable: ^The immutable parameter is a boolean query +** parameter that indicates that the database file is stored on +** read-only media. ^When immutable is set, SQLite assumes that the +** database file cannot be changed, even by a process with higher +** privilege, and so the database is opened read-only and all locking +** and change detection is disabled. Caution: Setting the immutable +** property on a database file that does in fact change can result +** in incorrect query results and/or [SQLITE_CORRUPT] errors. +** See also: [SQLITE_IOCAP_IMMUTABLE]. +** +**
+** +** ^Specifying an unknown parameter in the query component of a URI is not an +** error. Future versions of SQLite might understand additional query +** parameters. See "[query parameters with special meaning to SQLite]" for +** additional information. +** +** [[URI filename examples]]

URI filename examples

+** +** +**
URI filenames Results +**
file:data.db +** Open the file "data.db" in the current directory. +**
file:/home/fred/data.db
+** file:///home/fred/data.db
+** file://localhost/home/fred/data.db
+** Open the database file "/home/fred/data.db". +**
file://darkstar/home/fred/data.db +** An error. "darkstar" is not a recognized authority. +**
+** file:///C:/Documents%20and%20Settings/fred/Desktop/data.db +** Windows only: Open the file "data.db" on fred's desktop on drive +** C:. Note that the %20 escaping in this example is not strictly +** necessary - space characters can be used literally +** in URI filenames. +**
file:data.db?mode=ro&cache=private +** Open file "data.db" in the current directory for read-only access. +** Regardless of whether or not shared-cache mode is enabled by +** default, use a private cache. +**
file:/home/fred/data.db?vfs=unix-dotfile +** Open file "/home/fred/data.db". Use the special VFS "unix-dotfile" +** that uses dot-files in place of posix advisory locking. +**
file:data.db?mode=readonly +** An error. "readonly" is not a valid option for the "mode" parameter. +** Use "ro" instead: "file:data.db?mode=ro". +**
+** +** ^URI hexadecimal escape sequences (%HH) are supported within the path and +** query components of a URI. A hexadecimal escape sequence consists of a +** percent sign - "%" - followed by exactly two hexadecimal digits +** specifying an octet value. ^Before the path or query components of a +** URI filename are interpreted, they are encoded using UTF-8 and all +** hexadecimal escape sequences replaced by a single byte containing the +** corresponding octet. If this process generates an invalid UTF-8 encoding, +** the results are undefined. +** +** Note to Windows users: The encoding used for the filename argument +** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever +** codepage is currently defined. Filenames containing international +** characters must be converted to UTF-8 prior to passing them into +** sqlite3_open() or sqlite3_open_v2(). +** +** Note to Windows Runtime users: The temporary directory must be set +** prior to calling sqlite3_open() or sqlite3_open_v2(). Otherwise, various +** features that require the use of temporary files may fail. +** +** See also: [sqlite3_temp_directory] +*/ +SQLITE_API int sqlite3_open( + const char *filename, /* Database filename (UTF-8) */ + sqlite3 **ppDb /* OUT: SQLite db handle */ +); +SQLITE_API int sqlite3_open16( + const void *filename, /* Database filename (UTF-16) */ + sqlite3 **ppDb /* OUT: SQLite db handle */ +); +SQLITE_API int sqlite3_open_v2( + const char *filename, /* Database filename (UTF-8) */ + sqlite3 **ppDb, /* OUT: SQLite db handle */ + int flags, /* Flags */ + const char *zVfs /* Name of VFS module to use */ +); + +/* +** CAPI3REF: Obtain Values For URI Parameters +** +** These are utility routines, useful to [VFS|custom VFS implementations], +** that check if a database file was a URI that contained a specific query +** parameter, and if so obtains the value of that query parameter. +** +** The first parameter to these interfaces (hereafter referred to +** as F) must be one of: +**
    +**
  • A database filename pointer created by the SQLite core and +** passed into the xOpen() method of a VFS implementation, or +**
  • A filename obtained from [sqlite3_db_filename()], or +**
  • A new filename constructed using [sqlite3_create_filename()]. +**
+** If the F parameter is not one of the above, then the behavior is +** undefined and probably undesirable. Older versions of SQLite were +** more tolerant of invalid F parameters than newer versions. +** +** If F is a suitable filename (as described in the previous paragraph) +** and if P is the name of the query parameter, then +** sqlite3_uri_parameter(F,P) returns the value of the P +** parameter if it exists or a NULL pointer if P does not appear as a +** query parameter on F. If P is a query parameter of F and it +** has no explicit value, then sqlite3_uri_parameter(F,P) returns +** a pointer to an empty string. +** +** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean +** parameter and returns true (1) or false (0) according to the value +** of P. The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the +** value of query parameter P is one of "yes", "true", or "on" in any +** case or if the value begins with a non-zero number. The +** sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of +** query parameter P is one of "no", "false", or "off" in any case or +** if the value begins with a numeric zero. If P is not a query +** parameter on F or if the value of P does not match any of the +** above, then sqlite3_uri_boolean(F,P,B) returns (B!=0). +** +** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a +** 64-bit signed integer and returns that integer, or D if P does not +** exist. If the value of P is something other than an integer, then +** zero is returned. +** +** The sqlite3_uri_key(F,N) returns a pointer to the name (not +** the value) of the N-th query parameter for filename F, or a NULL +** pointer if N is less than zero or greater than the number of query +** parameters minus 1. The N value is zero-based so N should be 0 to obtain +** the name of the first query parameter, 1 for the second parameter, and +** so forth. +** +** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and +** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and +** is not a database file pathname pointer that the SQLite core passed +** into the xOpen VFS method, then the behavior of this routine is undefined +** and probably undesirable. +** +** Beginning with SQLite [version 3.31.0] ([dateof:3.31.0]) the input F +** parameter can also be the name of a rollback journal file or WAL file +** in addition to the main database file. Prior to version 3.31.0, these +** routines would only work if F was the name of the main database file. +** When the F parameter is the name of the rollback journal or WAL file, +** it has access to all the same query parameters as were found on the +** main database file. +** +** See the [URI filename] documentation for additional information. +*/ +SQLITE_API const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam); +SQLITE_API int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault); +SQLITE_API sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64); +SQLITE_API const char *sqlite3_uri_key(sqlite3_filename z, int N); + +/* +** CAPI3REF: Translate filenames +** +** These routines are available to [VFS|custom VFS implementations] for +** translating filenames between the main database file, the journal file, +** and the WAL file. +** +** If F is the name of an sqlite database file, journal file, or WAL file +** passed by the SQLite core into the VFS, then sqlite3_filename_database(F) +** returns the name of the corresponding database file. +** +** If F is the name of an sqlite database file, journal file, or WAL file +** passed by the SQLite core into the VFS, or if F is a database filename +** obtained from [sqlite3_db_filename()], then sqlite3_filename_journal(F) +** returns the name of the corresponding rollback journal file. +** +** If F is the name of an sqlite database file, journal file, or WAL file +** that was passed by the SQLite core into the VFS, or if F is a database +** filename obtained from [sqlite3_db_filename()], then +** sqlite3_filename_wal(F) returns the name of the corresponding +** WAL file. +** +** In all of the above, if F is not the name of a database, journal or WAL +** filename passed into the VFS from the SQLite core and F is not the +** return value from [sqlite3_db_filename()], then the result is +** undefined and is likely a memory access violation. +*/ +SQLITE_API const char *sqlite3_filename_database(sqlite3_filename); +SQLITE_API const char *sqlite3_filename_journal(sqlite3_filename); +SQLITE_API const char *sqlite3_filename_wal(sqlite3_filename); + +/* +** CAPI3REF: Database File Corresponding To A Journal +** +** ^If X is the name of a rollback or WAL-mode journal file that is +** passed into the xOpen method of [sqlite3_vfs], then +** sqlite3_database_file_object(X) returns a pointer to the [sqlite3_file] +** object that represents the main database file. +** +** This routine is intended for use in custom [VFS] implementations +** only. It is not a general-purpose interface. +** The argument sqlite3_file_object(X) must be a filename pointer that +** has been passed into [sqlite3_vfs].xOpen method where the +** flags parameter to xOpen contains one of the bits +** [SQLITE_OPEN_MAIN_JOURNAL] or [SQLITE_OPEN_WAL]. Any other use +** of this routine results in undefined and probably undesirable +** behavior. +*/ +SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*); + +/* +** CAPI3REF: Create and Destroy VFS Filenames +** +** These interfaces are provided for use by [VFS shim] implementations and +** are not useful outside of that context. +** +** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of +** database filename D with corresponding journal file J and WAL file W and +** an array P of N URI Key/Value pairs. The result from +** sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that +** is safe to pass to routines like: +**
    +**
  • [sqlite3_uri_parameter()], +**
  • [sqlite3_uri_boolean()], +**
  • [sqlite3_uri_int64()], +**
  • [sqlite3_uri_key()], +**
  • [sqlite3_filename_database()], +**
  • [sqlite3_filename_journal()], or +**
  • [sqlite3_filename_wal()]. +**
+** If a memory allocation error occurs, sqlite3_create_filename() might +** return a NULL pointer. The memory obtained from sqlite3_create_filename(X) +** must be released by a corresponding call to sqlite3_free_filename(Y). +** +** The P parameter in sqlite3_create_filename(D,J,W,N,P) should be an array +** of 2*N pointers to strings. Each pair of pointers in this array corresponds +** to a key and value for a query parameter. The P parameter may be a NULL +** pointer if N is zero. None of the 2*N pointers in the P array may be +** NULL pointers and key pointers should not be empty strings. +** None of the D, J, or W parameters to sqlite3_create_filename(D,J,W,N,P) may +** be NULL pointers, though they can be empty strings. +** +** The sqlite3_free_filename(Y) routine releases a memory allocation +** previously obtained from sqlite3_create_filename(). Invoking +** sqlite3_free_filename(Y) where Y is a NULL pointer is a harmless no-op. +** +** If the Y parameter to sqlite3_free_filename(Y) is anything other +** than a NULL pointer or a pointer previously acquired from +** sqlite3_create_filename(), then bad things such as heap +** corruption or segfaults may occur. The value Y should not be +** used again after sqlite3_free_filename(Y) has been called. This means +** that if the [sqlite3_vfs.xOpen()] method of a VFS has been called using Y, +** then the corresponding [sqlite3_module.xClose() method should also be +** invoked prior to calling sqlite3_free_filename(Y). +*/ +SQLITE_API sqlite3_filename sqlite3_create_filename( + const char *zDatabase, + const char *zJournal, + const char *zWal, + int nParam, + const char **azParam +); +SQLITE_API void sqlite3_free_filename(sqlite3_filename); + +/* +** CAPI3REF: Error Codes And Messages +** METHOD: sqlite3 +** +** ^If the most recent sqlite3_* API call associated with +** [database connection] D failed, then the sqlite3_errcode(D) interface +** returns the numeric [result code] or [extended result code] for that +** API call. +** ^The sqlite3_extended_errcode() +** interface is the same except that it always returns the +** [extended result code] even when extended result codes are +** disabled. +** +** The values returned by sqlite3_errcode() and/or +** sqlite3_extended_errcode() might change with each API call. +** Except, there are some interfaces that are guaranteed to never +** change the value of the error code. The error-code preserving +** interfaces include the following: +** +**
    +**
  • sqlite3_errcode() +**
  • sqlite3_extended_errcode() +**
  • sqlite3_errmsg() +**
  • sqlite3_errmsg16() +**
  • sqlite3_error_offset() +**
+** +** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language +** text that describes the error, as either UTF-8 or UTF-16 respectively, +** or NULL if no error message is available. +** (See how SQLite handles [invalid UTF] for exceptions to this rule.) +** ^(Memory to hold the error message string is managed internally. +** The application does not need to worry about freeing the result. +** However, the error string might be overwritten or deallocated by +** subsequent calls to other SQLite interface functions.)^ +** +** ^The sqlite3_errstr(E) interface returns the English-language text +** that describes the [result code] E, as UTF-8, or NULL if E is not an +** result code for which a text error message is available. +** ^(Memory to hold the error message string is managed internally +** and must not be freed by the application)^. +** +** ^If the most recent error references a specific token in the input +** SQL, the sqlite3_error_offset() interface returns the byte offset +** of the start of that token. ^The byte offset returned by +** sqlite3_error_offset() assumes that the input SQL is UTF8. +** ^If the most recent error does not reference a specific token in the input +** SQL, then the sqlite3_error_offset() function returns -1. +** +** When the serialized [threading mode] is in use, it might be the +** case that a second error occurs on a separate thread in between +** the time of the first error and the call to these interfaces. +** When that happens, the second error will be reported since these +** interfaces always report the most recent result. To avoid +** this, each thread can obtain exclusive use of the [database connection] D +** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning +** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after +** all calls to the interfaces listed here are completed. +** +** If an interface fails with SQLITE_MISUSE, that means the interface +** was invoked incorrectly by the application. In that case, the +** error code and message may or may not be set. +*/ +SQLITE_API int sqlite3_errcode(sqlite3 *db); +SQLITE_API int sqlite3_extended_errcode(sqlite3 *db); +SQLITE_API const char *sqlite3_errmsg(sqlite3*); +SQLITE_API const void *sqlite3_errmsg16(sqlite3*); +SQLITE_API const char *sqlite3_errstr(int); +SQLITE_API int sqlite3_error_offset(sqlite3 *db); + +/* +** CAPI3REF: Prepared Statement Object +** KEYWORDS: {prepared statement} {prepared statements} +** +** An instance of this object represents a single SQL statement that +** has been compiled into binary form and is ready to be evaluated. +** +** Think of each SQL statement as a separate computer program. The +** original SQL text is source code. A prepared statement object +** is the compiled object code. All SQL must be converted into a +** prepared statement before it can be run. +** +** The life-cycle of a prepared statement object usually goes like this: +** +**
    +**
  1. Create the prepared statement object using [sqlite3_prepare_v2()]. +**
  2. Bind values to [parameters] using the sqlite3_bind_*() +** interfaces. +**
  3. Run the SQL by calling [sqlite3_step()] one or more times. +**
  4. Reset the prepared statement using [sqlite3_reset()] then go back +** to step 2. Do this zero or more times. +**
  5. Destroy the object using [sqlite3_finalize()]. +**
+*/ +typedef struct sqlite3_stmt sqlite3_stmt; + +/* +** CAPI3REF: Run-time Limits +** METHOD: sqlite3 +** +** ^(This interface allows the size of various constructs to be limited +** on a connection by connection basis. The first parameter is the +** [database connection] whose limit is to be set or queried. The +** second parameter is one of the [limit categories] that define a +** class of constructs to be size limited. The third parameter is the +** new limit for that construct.)^ +** +** ^If the new limit is a negative number, the limit is unchanged. +** ^(For each limit category SQLITE_LIMIT_NAME there is a +** [limits | hard upper bound] +** set at compile-time by a C preprocessor macro called +** [limits | SQLITE_MAX_NAME]. +** (The "_LIMIT_" in the name is changed to "_MAX_".))^ +** ^Attempts to increase a limit above its hard upper bound are +** silently truncated to the hard upper bound. +** +** ^Regardless of whether or not the limit was changed, the +** [sqlite3_limit()] interface returns the prior value of the limit. +** ^Hence, to find the current value of a limit without changing it, +** simply invoke this interface with the third parameter set to -1. +** +** Run-time limits are intended for use in applications that manage +** both their own internal database and also databases that are controlled +** by untrusted external sources. An example application might be a +** web browser that has its own databases for storing history and +** separate databases controlled by JavaScript applications downloaded +** off the Internet. The internal databases can be given the +** large, default limits. Databases managed by external sources can +** be given much smaller limits designed to prevent a denial of service +** attack. Developers might also want to use the [sqlite3_set_authorizer()] +** interface to further control untrusted SQL. The size of the database +** created by an untrusted script can be contained using the +** [max_page_count] [PRAGMA]. +** +** New run-time limit categories may be added in future releases. +*/ +SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); + +/* +** CAPI3REF: Run-Time Limit Categories +** KEYWORDS: {limit category} {*limit categories} +** +** These constants define various performance limits +** that can be lowered at run-time using [sqlite3_limit()]. +** The synopsis of the meanings of the various limits is shown below. +** Additional information is available at [limits | Limits in SQLite]. +** +**
+** [[SQLITE_LIMIT_LENGTH]] ^(
SQLITE_LIMIT_LENGTH
+**
The maximum size of any string or BLOB or table row, in bytes.
)^ +** +** [[SQLITE_LIMIT_SQL_LENGTH]] ^(
SQLITE_LIMIT_SQL_LENGTH
+**
The maximum length of an SQL statement, in bytes.
)^ +** +** [[SQLITE_LIMIT_COLUMN]] ^(
SQLITE_LIMIT_COLUMN
+**
The maximum number of columns in a table definition or in the +** result set of a [SELECT] or the maximum number of columns in an index +** or in an ORDER BY or GROUP BY clause.
)^ +** +** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
SQLITE_LIMIT_EXPR_DEPTH
+**
The maximum depth of the parse tree on any expression.
)^ +** +** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
SQLITE_LIMIT_COMPOUND_SELECT
+**
The maximum number of terms in a compound SELECT statement.
)^ +** +** [[SQLITE_LIMIT_VDBE_OP]] ^(
SQLITE_LIMIT_VDBE_OP
+**
The maximum number of instructions in a virtual machine program +** used to implement an SQL statement. If [sqlite3_prepare_v2()] or +** the equivalent tries to allocate space for more than this many opcodes +** in a single prepared statement, an SQLITE_NOMEM error is returned.
)^ +** +** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
SQLITE_LIMIT_FUNCTION_ARG
+**
The maximum number of arguments on a function.
)^ +** +** [[SQLITE_LIMIT_ATTACHED]] ^(
SQLITE_LIMIT_ATTACHED
+**
The maximum number of [ATTACH | attached databases].)^
+** +** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] +** ^(
SQLITE_LIMIT_LIKE_PATTERN_LENGTH
+**
The maximum length of the pattern argument to the [LIKE] or +** [GLOB] operators.
)^ +** +** [[SQLITE_LIMIT_VARIABLE_NUMBER]] +** ^(
SQLITE_LIMIT_VARIABLE_NUMBER
+**
The maximum index number of any [parameter] in an SQL statement.)^ +** +** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
SQLITE_LIMIT_TRIGGER_DEPTH
+**
The maximum depth of recursion for triggers.
)^ +** +** [[SQLITE_LIMIT_WORKER_THREADS]] ^(
SQLITE_LIMIT_WORKER_THREADS
+**
The maximum number of auxiliary worker threads that a single +** [prepared statement] may start.
)^ +**
+*/ +#define SQLITE_LIMIT_LENGTH 0 +#define SQLITE_LIMIT_SQL_LENGTH 1 +#define SQLITE_LIMIT_COLUMN 2 +#define SQLITE_LIMIT_EXPR_DEPTH 3 +#define SQLITE_LIMIT_COMPOUND_SELECT 4 +#define SQLITE_LIMIT_VDBE_OP 5 +#define SQLITE_LIMIT_FUNCTION_ARG 6 +#define SQLITE_LIMIT_ATTACHED 7 +#define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8 +#define SQLITE_LIMIT_VARIABLE_NUMBER 9 +#define SQLITE_LIMIT_TRIGGER_DEPTH 10 +#define SQLITE_LIMIT_WORKER_THREADS 11 + +/* +** CAPI3REF: Prepare Flags +** +** These constants define various flags that can be passed into +** "prepFlags" parameter of the [sqlite3_prepare_v3()] and +** [sqlite3_prepare16_v3()] interfaces. +** +** New flags may be added in future releases of SQLite. +** +**
+** [[SQLITE_PREPARE_PERSISTENT]] ^(
SQLITE_PREPARE_PERSISTENT
+**
The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner +** that the prepared statement will be retained for a long time and +** probably reused many times.)^ ^Without this flag, [sqlite3_prepare_v3()] +** and [sqlite3_prepare16_v3()] assume that the prepared statement will +** be used just once or at most a few times and then destroyed using +** [sqlite3_finalize()] relatively soon. The current implementation acts +** on this hint by avoiding the use of [lookaside memory] so as not to +** deplete the limited store of lookaside memory. Future versions of +** SQLite may act on this hint differently. +** +** [[SQLITE_PREPARE_NORMALIZE]]
SQLITE_PREPARE_NORMALIZE
+**
The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used +** to be required for any prepared statement that wanted to use the +** [sqlite3_normalized_sql()] interface. However, the +** [sqlite3_normalized_sql()] interface is now available to all +** prepared statements, regardless of whether or not they use this +** flag. +** +** [[SQLITE_PREPARE_NO_VTAB]]
SQLITE_PREPARE_NO_VTAB
+**
The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler +** to return an error (error code SQLITE_ERROR) if the statement uses +** any virtual tables. +** +** [[SQLITE_PREPARE_DONT_LOG]]
SQLITE_PREPARE_DONT_LOG
+**
The SQLITE_PREPARE_DONT_LOG flag prevents SQL compiler +** errors from being sent to the error log defined by +** [SQLITE_CONFIG_LOG]. This can be used, for example, to do test +** compiles to see if some SQL syntax is well-formed, without generating +** messages on the global error log when it is not. If the test compile +** fails, the sqlite3_prepare_v3() call returns the same error indications +** with or without this flag; it just omits the call to [sqlite3_log()] that +** logs the error. +**
+*/ +#define SQLITE_PREPARE_PERSISTENT 0x01 +#define SQLITE_PREPARE_NORMALIZE 0x02 +#define SQLITE_PREPARE_NO_VTAB 0x04 +#define SQLITE_PREPARE_DONT_LOG 0x10 + +/* +** CAPI3REF: Compiling An SQL Statement +** KEYWORDS: {SQL statement compiler} +** METHOD: sqlite3 +** CONSTRUCTOR: sqlite3_stmt +** +** To execute an SQL statement, it must first be compiled into a byte-code +** program using one of these routines. Or, in other words, these routines +** are constructors for the [prepared statement] object. +** +** The preferred routine to use is [sqlite3_prepare_v2()]. The +** [sqlite3_prepare()] interface is legacy and should be avoided. +** [sqlite3_prepare_v3()] has an extra "prepFlags" option that is used +** for special purposes. +** +** The use of the UTF-8 interfaces is preferred, as SQLite currently +** does all parsing using UTF-8. The UTF-16 interfaces are provided +** as a convenience. The UTF-16 interfaces work by converting the +** input text into UTF-8, then invoking the corresponding UTF-8 interface. +** +** The first argument, "db", is a [database connection] obtained from a +** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or +** [sqlite3_open16()]. The database connection must not have been closed. +** +** The second argument, "zSql", is the statement to be compiled, encoded +** as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(), +** and sqlite3_prepare_v3() +** interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(), +** and sqlite3_prepare16_v3() use UTF-16. +** +** ^If the nByte argument is negative, then zSql is read up to the +** first zero terminator. ^If nByte is positive, then it is the maximum +** number of bytes read from zSql. When nByte is positive, zSql is read +** up to the first zero terminator or until the nByte bytes have been read, +** whichever comes first. ^If nByte is zero, then no prepared +** statement is generated. +** If the caller knows that the supplied string is nul-terminated, then +** there is a small performance advantage to passing an nByte parameter that +** is the number of bytes in the input string including +** the nul-terminator. +** Note that nByte measure the length of the input in bytes, not +** characters, even for the UTF-16 interfaces. +** +** ^If pzTail is not NULL then *pzTail is made to point to the first byte +** past the end of the first SQL statement in zSql. These routines only +** compile the first statement in zSql, so *pzTail is left pointing to +** what remains uncompiled. +** +** ^*ppStmt is left pointing to a compiled [prepared statement] that can be +** executed using [sqlite3_step()]. ^If there is an error, *ppStmt is set +** to NULL. ^If the input text contains no SQL (if the input is an empty +** string or a comment) then *ppStmt is set to NULL. +** The calling procedure is responsible for deleting the compiled +** SQL statement using [sqlite3_finalize()] after it has finished with it. +** ppStmt may not be NULL. +** +** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; +** otherwise an [error code] is returned. +** +** The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), +** and sqlite3_prepare16_v3() interfaces are recommended for all new programs. +** The older interfaces (sqlite3_prepare() and sqlite3_prepare16()) +** are retained for backwards compatibility, but their use is discouraged. +** ^In the "vX" interfaces, the prepared statement +** that is returned (the [sqlite3_stmt] object) contains a copy of the +** original SQL text. This causes the [sqlite3_step()] interface to +** behave differently in three ways: +** +**
    +**
  1. +** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it +** always used to do, [sqlite3_step()] will automatically recompile the SQL +** statement and try to run it again. As many as [SQLITE_MAX_SCHEMA_RETRY] +** retries will occur before sqlite3_step() gives up and returns an error. +**
  2. +** +**
  3. +** ^When an error occurs, [sqlite3_step()] will return one of the detailed +** [error codes] or [extended error codes]. ^The legacy behavior was that +** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code +** and the application would have to make a second call to [sqlite3_reset()] +** in order to find the underlying cause of the problem. With the "v2" prepare +** interfaces, the underlying reason for the error is returned immediately. +**
  4. +** +**
  5. +** ^If the specific value bound to a [parameter | host parameter] in the +** WHERE clause might influence the choice of query plan for a statement, +** then the statement will be automatically recompiled, as if there had been +** a schema change, on the first [sqlite3_step()] call following any change +** to the [sqlite3_bind_text | bindings] of that [parameter]. +** ^The specific value of a WHERE-clause [parameter] might influence the +** choice of query plan if the parameter is the left-hand side of a [LIKE] +** or [GLOB] operator or if the parameter is compared to an indexed column +** and the [SQLITE_ENABLE_STAT4] compile-time option is enabled. +**
  6. +**
+** +**

^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having +** the extra prepFlags parameter, which is a bit array consisting of zero or +** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The +** sqlite3_prepare_v2() interface works exactly the same as +** sqlite3_prepare_v3() with a zero prepFlags parameter. +*/ +SQLITE_API int sqlite3_prepare( + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL statement, UTF-8 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const char **pzTail /* OUT: Pointer to unused portion of zSql */ +); +SQLITE_API int sqlite3_prepare_v2( + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL statement, UTF-8 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const char **pzTail /* OUT: Pointer to unused portion of zSql */ +); +SQLITE_API int sqlite3_prepare_v3( + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL statement, UTF-8 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const char **pzTail /* OUT: Pointer to unused portion of zSql */ +); +SQLITE_API int sqlite3_prepare16( + sqlite3 *db, /* Database handle */ + const void *zSql, /* SQL statement, UTF-16 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const void **pzTail /* OUT: Pointer to unused portion of zSql */ +); +SQLITE_API int sqlite3_prepare16_v2( + sqlite3 *db, /* Database handle */ + const void *zSql, /* SQL statement, UTF-16 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const void **pzTail /* OUT: Pointer to unused portion of zSql */ +); +SQLITE_API int sqlite3_prepare16_v3( + sqlite3 *db, /* Database handle */ + const void *zSql, /* SQL statement, UTF-16 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const void **pzTail /* OUT: Pointer to unused portion of zSql */ +); + +/* +** CAPI3REF: Retrieving Statement SQL +** METHOD: sqlite3_stmt +** +** ^The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8 +** SQL text used to create [prepared statement] P if P was +** created by [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], +** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. +** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8 +** string containing the SQL text of prepared statement P with +** [bound parameters] expanded. +** ^The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8 +** string containing the normalized SQL text of prepared statement P. The +** semantics used to normalize a SQL statement are unspecified and subject +** to change. At a minimum, literal values will be replaced with suitable +** placeholders. +** +** ^(For example, if a prepared statement is created using the SQL +** text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345 +** and parameter :xyz is unbound, then sqlite3_sql() will return +** the original string, "SELECT $abc,:xyz" but sqlite3_expanded_sql() +** will return "SELECT 2345,NULL".)^ +** +** ^The sqlite3_expanded_sql() interface returns NULL if insufficient memory +** is available to hold the result, or if the result would exceed the +** the maximum string length determined by the [SQLITE_LIMIT_LENGTH]. +** +** ^The [SQLITE_TRACE_SIZE_LIMIT] compile-time option limits the size of +** bound parameter expansions. ^The [SQLITE_OMIT_TRACE] compile-time +** option causes sqlite3_expanded_sql() to always return NULL. +** +** ^The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P) +** are managed by SQLite and are automatically freed when the prepared +** statement is finalized. +** ^The string returned by sqlite3_expanded_sql(P), on the other hand, +** is obtained from [sqlite3_malloc()] and must be freed by the application +** by passing it to [sqlite3_free()]. +** +** ^The sqlite3_normalized_sql() interface is only available if +** the [SQLITE_ENABLE_NORMALIZE] compile-time option is defined. +*/ +SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt); +SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt); +#ifdef SQLITE_ENABLE_NORMALIZE +SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt); +#endif + +/* +** CAPI3REF: Determine If An SQL Statement Writes The Database +** METHOD: sqlite3_stmt +** +** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if +** and only if the [prepared statement] X makes no direct changes to +** the content of the database file. +** +** Note that [application-defined SQL functions] or +** [virtual tables] might change the database indirectly as a side effect. +** ^(For example, if an application defines a function "eval()" that +** calls [sqlite3_exec()], then the following SQL statement would +** change the database file through side-effects: +** +**

+**    SELECT eval('DELETE FROM t1') FROM t2;
+** 
+** +** But because the [SELECT] statement does not change the database file +** directly, sqlite3_stmt_readonly() would still return true.)^ +** +** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK], +** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true, +** since the statements themselves do not actually modify the database but +** rather they control the timing of when other statements modify the +** database. ^The [ATTACH] and [DETACH] statements also cause +** sqlite3_stmt_readonly() to return true since, while those statements +** change the configuration of a database connection, they do not make +** changes to the content of the database files on disk. +** ^The sqlite3_stmt_readonly() interface returns true for [BEGIN] since +** [BEGIN] merely sets internal flags, but the [BEGIN|BEGIN IMMEDIATE] and +** [BEGIN|BEGIN EXCLUSIVE] commands do touch the database and so +** sqlite3_stmt_readonly() returns false for those commands. +** +** ^This routine returns false if there is any possibility that the +** statement might change the database file. ^A false return does +** not guarantee that the statement will change the database file. +** ^For example, an UPDATE statement might have a WHERE clause that +** makes it a no-op, but the sqlite3_stmt_readonly() result would still +** be false. ^Similarly, a CREATE TABLE IF NOT EXISTS statement is a +** read-only no-op if the table already exists, but +** sqlite3_stmt_readonly() still returns false for such a statement. +** +** ^If prepared statement X is an [EXPLAIN] or [EXPLAIN QUERY PLAN] +** statement, then sqlite3_stmt_readonly(X) returns the same value as +** if the EXPLAIN or EXPLAIN QUERY PLAN prefix were omitted. +*/ +SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement +** METHOD: sqlite3_stmt +** +** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the +** prepared statement S is an EXPLAIN statement, or 2 if the +** statement S is an EXPLAIN QUERY PLAN. +** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is +** an ordinary statement or a NULL pointer. +*/ +SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Change The EXPLAIN Setting For A Prepared Statement +** METHOD: sqlite3_stmt +** +** The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN +** setting for [prepared statement] S. If E is zero, then S becomes +** a normal prepared statement. If E is 1, then S behaves as if +** its SQL text began with "[EXPLAIN]". If E is 2, then S behaves as if +** its SQL text began with "[EXPLAIN QUERY PLAN]". +** +** Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared. +** SQLite tries to avoid a reprepare, but a reprepare might be necessary +** on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode. +** +** Because of the potential need to reprepare, a call to +** sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be +** reprepared because it was created using [sqlite3_prepare()] instead of +** the newer [sqlite3_prepare_v2()] or [sqlite3_prepare_v3()] interfaces and +** hence has no saved SQL text with which to reprepare. +** +** Changing the explain setting for a prepared statement does not change +** the original SQL text for the statement. Hence, if the SQL text originally +** began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0) +** is called to convert the statement into an ordinary statement, the EXPLAIN +** or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S) +** output, even though the statement now acts like a normal SQL statement. +** +** This routine returns SQLITE_OK if the explain mode is successfully +** changed, or an error code if the explain mode could not be changed. +** The explain mode cannot be changed while a statement is active. +** Hence, it is good practice to call [sqlite3_reset(S)] +** immediately prior to calling sqlite3_stmt_explain(S,E). +*/ +SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode); + +/* +** CAPI3REF: Determine If A Prepared Statement Has Been Reset +** METHOD: sqlite3_stmt +** +** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the +** [prepared statement] S has been stepped at least once using +** [sqlite3_step(S)] but has neither run to completion (returned +** [SQLITE_DONE] from [sqlite3_step(S)]) nor +** been reset using [sqlite3_reset(S)]. ^The sqlite3_stmt_busy(S) +** interface returns false if S is a NULL pointer. If S is not a +** NULL pointer and is not a pointer to a valid [prepared statement] +** object, then the behavior is undefined and probably undesirable. +** +** This interface can be used in combination [sqlite3_next_stmt()] +** to locate all prepared statements associated with a database +** connection that are in need of being reset. This can be used, +** for example, in diagnostic routines to search for prepared +** statements that are holding a transaction open. +*/ +SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); + +/* +** CAPI3REF: Dynamically Typed Value Object +** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value} +** +** SQLite uses the sqlite3_value object to represent all values +** that can be stored in a database table. SQLite uses dynamic typing +** for the values it stores. ^Values stored in sqlite3_value objects +** can be integers, floating point values, strings, BLOBs, or NULL. +** +** An sqlite3_value object may be either "protected" or "unprotected". +** Some interfaces require a protected sqlite3_value. Other interfaces +** will accept either a protected or an unprotected sqlite3_value. +** Every interface that accepts sqlite3_value arguments specifies +** whether or not it requires a protected sqlite3_value. The +** [sqlite3_value_dup()] interface can be used to construct a new +** protected sqlite3_value from an unprotected sqlite3_value. +** +** The terms "protected" and "unprotected" refer to whether or not +** a mutex is held. An internal mutex is held for a protected +** sqlite3_value object but no mutex is held for an unprotected +** sqlite3_value object. If SQLite is compiled to be single-threaded +** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0) +** or if SQLite is run in one of reduced mutex modes +** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD] +** then there is no distinction between protected and unprotected +** sqlite3_value objects and they can be used interchangeably. However, +** for maximum code portability it is recommended that applications +** still make the distinction between protected and unprotected +** sqlite3_value objects even when not strictly required. +** +** ^The sqlite3_value objects that are passed as parameters into the +** implementation of [application-defined SQL functions] are protected. +** ^The sqlite3_value objects returned by [sqlite3_vtab_rhs_value()] +** are protected. +** ^The sqlite3_value object returned by +** [sqlite3_column_value()] is unprotected. +** Unprotected sqlite3_value objects may only be used as arguments +** to [sqlite3_result_value()], [sqlite3_bind_value()], and +** [sqlite3_value_dup()]. +** The [sqlite3_value_blob | sqlite3_value_type()] family of +** interfaces require protected sqlite3_value objects. +*/ +typedef struct sqlite3_value sqlite3_value; + +/* +** CAPI3REF: SQL Function Context Object +** +** The context in which an SQL function executes is stored in an +** sqlite3_context object. ^A pointer to an sqlite3_context object +** is always first parameter to [application-defined SQL functions]. +** The application-defined SQL function implementation will pass this +** pointer through into calls to [sqlite3_result_int | sqlite3_result()], +** [sqlite3_aggregate_context()], [sqlite3_user_data()], +** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()], +** and/or [sqlite3_set_auxdata()]. +*/ +typedef struct sqlite3_context sqlite3_context; + +/* +** CAPI3REF: Binding Values To Prepared Statements +** KEYWORDS: {host parameter} {host parameters} {host parameter name} +** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding} +** METHOD: sqlite3_stmt +** +** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants, +** literals may be replaced by a [parameter] that matches one of the following +** templates: +** +**
    +**
  • ? +**
  • ?NNN +**
  • :VVV +**
  • @VVV +**
  • $VVV +**
+** +** In the templates above, NNN represents an integer literal, +** and VVV represents an alphanumeric identifier.)^ ^The values of these +** parameters (also called "host parameter names" or "SQL parameters") +** can be set using the sqlite3_bind_*() routines defined here. +** +** ^The first argument to the sqlite3_bind_*() routines is always +** a pointer to the [sqlite3_stmt] object returned from +** [sqlite3_prepare_v2()] or its variants. +** +** ^The second argument is the index of the SQL parameter to be set. +** ^The leftmost SQL parameter has an index of 1. ^When the same named +** SQL parameter is used more than once, second and subsequent +** occurrences have the same index as the first occurrence. +** ^The index for named parameters can be looked up using the +** [sqlite3_bind_parameter_index()] API if desired. ^The index +** for "?NNN" parameters is the value of NNN. +** ^The NNN value must be between 1 and the [sqlite3_limit()] +** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 32766). +** +** ^The third argument is the value to bind to the parameter. +** ^If the third parameter to sqlite3_bind_text() or sqlite3_bind_text16() +** or sqlite3_bind_blob() is a NULL pointer then the fourth parameter +** is ignored and the end result is the same as sqlite3_bind_null(). +** ^If the third parameter to sqlite3_bind_text() is not NULL, then +** it should be a pointer to well-formed UTF8 text. +** ^If the third parameter to sqlite3_bind_text16() is not NULL, then +** it should be a pointer to well-formed UTF16 text. +** ^If the third parameter to sqlite3_bind_text64() is not NULL, then +** it should be a pointer to a well-formed unicode string that is +** either UTF8 if the sixth parameter is SQLITE_UTF8, or UTF16 +** otherwise. +** +** [[byte-order determination rules]] ^The byte-order of +** UTF16 input text is determined by the byte-order mark (BOM, U+FEFF) +** found in the first character, which is removed, or in the absence of a BOM +** the byte order is the native byte order of the host +** machine for sqlite3_bind_text16() or the byte order specified in +** the 6th parameter for sqlite3_bind_text64().)^ +** ^If UTF16 input text contains invalid unicode +** characters, then SQLite might change those invalid characters +** into the unicode replacement character: U+FFFD. +** +** ^(In those routines that have a fourth argument, its value is the +** number of bytes in the parameter. To be clear: the value is the +** number of bytes in the value, not the number of characters.)^ +** ^If the fourth parameter to sqlite3_bind_text() or sqlite3_bind_text16() +** is negative, then the length of the string is +** the number of bytes up to the first zero terminator. +** If the fourth parameter to sqlite3_bind_blob() is negative, then +** the behavior is undefined. +** If a non-negative fourth parameter is provided to sqlite3_bind_text() +** or sqlite3_bind_text16() or sqlite3_bind_text64() then +** that parameter must be the byte offset +** where the NUL terminator would occur assuming the string were NUL +** terminated. If any NUL characters occur at byte offsets less than +** the value of the fourth parameter then the resulting string value will +** contain embedded NULs. The result of expressions involving strings +** with embedded NULs is undefined. +** +** ^The fifth argument to the BLOB and string binding interfaces controls +** or indicates the lifetime of the object referenced by the third parameter. +** These three options exist: +** ^ (1) A destructor to dispose of the BLOB or string after SQLite has finished +** with it may be passed. ^It is called to dispose of the BLOB or string even +** if the call to the bind API fails, except the destructor is not called if +** the third parameter is a NULL pointer or the fourth parameter is negative. +** ^ (2) The special constant, [SQLITE_STATIC], may be passed to indicate that +** the application remains responsible for disposing of the object. ^In this +** case, the object and the provided pointer to it must remain valid until +** either the prepared statement is finalized or the same SQL parameter is +** bound to something else, whichever occurs sooner. +** ^ (3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the +** object is to be copied prior to the return from sqlite3_bind_*(). ^The +** object and pointer to it must remain valid until then. ^SQLite will then +** manage the lifetime of its private copy. +** +** ^The sixth argument to sqlite3_bind_text64() must be one of +** [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE] +** to specify the encoding of the text in the third parameter. If +** the sixth argument to sqlite3_bind_text64() is not one of the +** allowed values shown above, or if the text encoding is different +** from the encoding specified by the sixth parameter, then the behavior +** is undefined. +** +** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that +** is filled with zeroes. ^A zeroblob uses a fixed amount of memory +** (just an integer to hold its size) while it is being processed. +** Zeroblobs are intended to serve as placeholders for BLOBs whose +** content is later written using +** [sqlite3_blob_open | incremental BLOB I/O] routines. +** ^A negative value for the zeroblob results in a zero-length BLOB. +** +** ^The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in +** [prepared statement] S to have an SQL value of NULL, but to also be +** associated with the pointer P of type T. ^D is either a NULL pointer or +** a pointer to a destructor function for P. ^SQLite will invoke the +** destructor D with a single argument of P when it is finished using +** P. The T parameter should be a static string, preferably a string +** literal. The sqlite3_bind_pointer() routine is part of the +** [pointer passing interface] added for SQLite 3.20.0. +** +** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer +** for the [prepared statement] or with a prepared statement for which +** [sqlite3_step()] has been called more recently than [sqlite3_reset()], +** then the call will return [SQLITE_MISUSE]. If any sqlite3_bind_() +** routine is passed a [prepared statement] that has been finalized, the +** result is undefined and probably harmful. +** +** ^Bindings are not cleared by the [sqlite3_reset()] routine. +** ^Unbound parameters are interpreted as NULL. +** +** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an +** [error code] if anything goes wrong. +** ^[SQLITE_TOOBIG] might be returned if the size of a string or BLOB +** exceeds limits imposed by [sqlite3_limit]([SQLITE_LIMIT_LENGTH]) or +** [SQLITE_MAX_LENGTH]. +** ^[SQLITE_RANGE] is returned if the parameter +** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails. +** +** See also: [sqlite3_bind_parameter_count()], +** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()]. +*/ +SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); +SQLITE_API int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64, + void(*)(void*)); +SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double); +SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int); +SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); +SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int); +SQLITE_API int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*)); +SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); +SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64, + void(*)(void*), unsigned char encoding); +SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); +SQLITE_API int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*)); +SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); +SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64); + +/* +** CAPI3REF: Number Of SQL Parameters +** METHOD: sqlite3_stmt +** +** ^This routine can be used to find the number of [SQL parameters] +** in a [prepared statement]. SQL parameters are tokens of the +** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as +** placeholders for values that are [sqlite3_bind_blob | bound] +** to the parameters at a later time. +** +** ^(This routine actually returns the index of the largest (rightmost) +** parameter. For all forms except ?NNN, this will correspond to the +** number of unique parameters. If parameters of the ?NNN form are used, +** there may be gaps in the list.)^ +** +** See also: [sqlite3_bind_blob|sqlite3_bind()], +** [sqlite3_bind_parameter_name()], and +** [sqlite3_bind_parameter_index()]. +*/ +SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); + +/* +** CAPI3REF: Name Of A Host Parameter +** METHOD: sqlite3_stmt +** +** ^The sqlite3_bind_parameter_name(P,N) interface returns +** the name of the N-th [SQL parameter] in the [prepared statement] P. +** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" +** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" +** respectively. +** In other words, the initial ":" or "$" or "@" or "?" +** is included as part of the name.)^ +** ^Parameters of the form "?" without a following integer have no name +** and are referred to as "nameless" or "anonymous parameters". +** +** ^The first host parameter has an index of 1, not 0. +** +** ^If the value N is out of range or if the N-th parameter is +** nameless, then NULL is returned. ^The returned string is +** always in UTF-8 encoding even if the named parameter was +** originally specified as UTF-16 in [sqlite3_prepare16()], +** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. +** +** See also: [sqlite3_bind_blob|sqlite3_bind()], +** [sqlite3_bind_parameter_count()], and +** [sqlite3_bind_parameter_index()]. +*/ +SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); + +/* +** CAPI3REF: Index Of A Parameter With A Given Name +** METHOD: sqlite3_stmt +** +** ^Return the index of an SQL parameter given its name. ^The +** index value returned is suitable for use as the second +** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero +** is returned if no matching parameter is found. ^The parameter +** name must be given in UTF-8 even if the original statement +** was prepared from UTF-16 text using [sqlite3_prepare16_v2()] or +** [sqlite3_prepare16_v3()]. +** +** See also: [sqlite3_bind_blob|sqlite3_bind()], +** [sqlite3_bind_parameter_count()], and +** [sqlite3_bind_parameter_name()]. +*/ +SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName); + +/* +** CAPI3REF: Reset All Bindings On A Prepared Statement +** METHOD: sqlite3_stmt +** +** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset +** the [sqlite3_bind_blob | bindings] on a [prepared statement]. +** ^Use this routine to reset all host parameters to NULL. +*/ +SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); + +/* +** CAPI3REF: Number Of Columns In A Result Set +** METHOD: sqlite3_stmt +** +** ^Return the number of columns in the result set returned by the +** [prepared statement]. ^If this routine returns 0, that means the +** [prepared statement] returns no data (for example an [UPDATE]). +** ^However, just because this routine returns a positive number does not +** mean that one or more rows of data will be returned. ^A SELECT statement +** will always have a positive sqlite3_column_count() but depending on the +** WHERE clause constraints and the table content, it might return no rows. +** +** See also: [sqlite3_data_count()] +*/ +SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Column Names In A Result Set +** METHOD: sqlite3_stmt +** +** ^These routines return the name assigned to a particular column +** in the result set of a [SELECT] statement. ^The sqlite3_column_name() +** interface returns a pointer to a zero-terminated UTF-8 string +** and sqlite3_column_name16() returns a pointer to a zero-terminated +** UTF-16 string. ^The first parameter is the [prepared statement] +** that implements the [SELECT] statement. ^The second parameter is the +** column number. ^The leftmost column is number 0. +** +** ^The returned string pointer is valid until either the [prepared statement] +** is destroyed by [sqlite3_finalize()] or until the statement is automatically +** reprepared by the first call to [sqlite3_step()] for a particular run +** or until the next call to +** sqlite3_column_name() or sqlite3_column_name16() on the same column. +** +** ^If sqlite3_malloc() fails during the processing of either routine +** (for example during a conversion from UTF-8 to UTF-16) then a +** NULL pointer is returned. +** +** ^The name of a result column is the value of the "AS" clause for +** that column, if there is an AS clause. If there is no AS clause +** then the name of the column is unspecified and may change from +** one release of SQLite to the next. +*/ +SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N); +SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N); + +/* +** CAPI3REF: Source Of Data In A Query Result +** METHOD: sqlite3_stmt +** +** ^These routines provide a means to determine the database, table, and +** table column that is the origin of a particular result column in a +** [SELECT] statement. +** ^The name of the database or table or column can be returned as +** either a UTF-8 or UTF-16 string. ^The _database_ routines return +** the database name, the _table_ routines return the table name, and +** the origin_ routines return the column name. +** ^The returned string is valid until the [prepared statement] is destroyed +** using [sqlite3_finalize()] or until the statement is automatically +** reprepared by the first call to [sqlite3_step()] for a particular run +** or until the same information is requested +** again in a different encoding. +** +** ^The names returned are the original un-aliased names of the +** database, table, and column. +** +** ^The first argument to these interfaces is a [prepared statement]. +** ^These functions return information about the Nth result column returned by +** the statement, where N is the second function argument. +** ^The left-most column is column 0 for these routines. +** +** ^If the Nth column returned by the statement is an expression or +** subquery and is not a column value, then all of these functions return +** NULL. ^These routines might also return NULL if a memory allocation error +** occurs. ^Otherwise, they return the name of the attached database, table, +** or column that query result column was extracted from. +** +** ^As with all other SQLite APIs, those whose names end with "16" return +** UTF-16 encoded strings and the other functions return UTF-8. +** +** ^These APIs are only available if the library was compiled with the +** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol. +** +** If two or more threads call one or more +** [sqlite3_column_database_name | column metadata interfaces] +** for the same [prepared statement] and result column +** at the same time then the results are undefined. +*/ +SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int); +SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int); +SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int); + +/* +** CAPI3REF: Declared Datatype Of A Query Result +** METHOD: sqlite3_stmt +** +** ^(The first parameter is a [prepared statement]. +** If this statement is a [SELECT] statement and the Nth column of the +** returned result set of that [SELECT] is a table column (not an +** expression or subquery) then the declared type of the table +** column is returned.)^ ^If the Nth column of the result set is an +** expression or subquery, then a NULL pointer is returned. +** ^The returned string is always UTF-8 encoded. +** +** ^(For example, given the database schema: +** +** CREATE TABLE t1(c1 VARIANT); +** +** and the following statement to be compiled: +** +** SELECT c1 + 1, c1 FROM t1; +** +** this routine would return the string "VARIANT" for the second result +** column (i==1), and a NULL pointer for the first result column (i==0).)^ +** +** ^SQLite uses dynamic run-time typing. ^So just because a column +** is declared to contain a particular type does not mean that the +** data stored in that column is of the declared type. SQLite is +** strongly typed, but the typing is dynamic not static. ^Type +** is associated with individual values, not with the containers +** used to hold those values. +*/ +SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int); +SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); + +/* +** CAPI3REF: Evaluate An SQL Statement +** METHOD: sqlite3_stmt +** +** After a [prepared statement] has been prepared using any of +** [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], [sqlite3_prepare16_v2()], +** or [sqlite3_prepare16_v3()] or one of the legacy +** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function +** must be called one or more times to evaluate the statement. +** +** The details of the behavior of the sqlite3_step() interface depend +** on whether the statement was prepared using the newer "vX" interfaces +** [sqlite3_prepare_v3()], [sqlite3_prepare_v2()], [sqlite3_prepare16_v3()], +** [sqlite3_prepare16_v2()] or the older legacy +** interfaces [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the +** new "vX" interface is recommended for new applications but the legacy +** interface will continue to be supported. +** +** ^In the legacy interface, the return value will be either [SQLITE_BUSY], +** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE]. +** ^With the "v2" interface, any of the other [result codes] or +** [extended result codes] might be returned as well. +** +** ^[SQLITE_BUSY] means that the database engine was unable to acquire the +** database locks it needs to do its job. ^If the statement is a [COMMIT] +** or occurs outside of an explicit transaction, then you can retry the +** statement. If the statement is not a [COMMIT] and occurs within an +** explicit transaction then you should rollback the transaction before +** continuing. +** +** ^[SQLITE_DONE] means that the statement has finished executing +** successfully. sqlite3_step() should not be called again on this virtual +** machine without first calling [sqlite3_reset()] to reset the virtual +** machine back to its initial state. +** +** ^If the SQL statement being executed returns any data, then [SQLITE_ROW] +** is returned each time a new row of data is ready for processing by the +** caller. The values may be accessed using the [column access functions]. +** sqlite3_step() is called again to retrieve the next row of data. +** +** ^[SQLITE_ERROR] means that a run-time error (such as a constraint +** violation) has occurred. sqlite3_step() should not be called again on +** the VM. More information may be found by calling [sqlite3_errmsg()]. +** ^With the legacy interface, a more specific error code (for example, +** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth) +** can be obtained by calling [sqlite3_reset()] on the +** [prepared statement]. ^In the "v2" interface, +** the more specific error code is returned directly by sqlite3_step(). +** +** [SQLITE_MISUSE] means that the this routine was called inappropriately. +** Perhaps it was called on a [prepared statement] that has +** already been [sqlite3_finalize | finalized] or on one that had +** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could +** be the case that the same database connection is being used by two or +** more threads at the same moment in time. +** +** For all versions of SQLite up to and including 3.6.23.1, a call to +** [sqlite3_reset()] was required after sqlite3_step() returned anything +** other than [SQLITE_ROW] before any subsequent invocation of +** sqlite3_step(). Failure to reset the prepared statement using +** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from +** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1]), +** sqlite3_step() began +** calling [sqlite3_reset()] automatically in this circumstance rather +** than returning [SQLITE_MISUSE]. This is not considered a compatibility +** break because any application that ever receives an SQLITE_MISUSE error +** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option +** can be used to restore the legacy behavior. +** +** Goofy Interface Alert: In the legacy interface, the sqlite3_step() +** API always returns a generic error code, [SQLITE_ERROR], following any +** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call +** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the +** specific [error codes] that better describes the error. +** We admit that this is a goofy design. The problem has been fixed +** with the "v2" interface. If you prepare all of your SQL statements +** using [sqlite3_prepare_v3()] or [sqlite3_prepare_v2()] +** or [sqlite3_prepare16_v2()] or [sqlite3_prepare16_v3()] instead +** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, +** then the more specific [error codes] are returned directly +** by sqlite3_step(). The use of the "vX" interfaces is recommended. +*/ +SQLITE_API int sqlite3_step(sqlite3_stmt*); + +/* +** CAPI3REF: Number of columns in a result set +** METHOD: sqlite3_stmt +** +** ^The sqlite3_data_count(P) interface returns the number of columns in the +** current row of the result set of [prepared statement] P. +** ^If prepared statement P does not have results ready to return +** (via calls to the [sqlite3_column_int | sqlite3_column()] family of +** interfaces) then sqlite3_data_count(P) returns 0. +** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer. +** ^The sqlite3_data_count(P) routine returns 0 if the previous call to +** [sqlite3_step](P) returned [SQLITE_DONE]. ^The sqlite3_data_count(P) +** will return non-zero if previous call to [sqlite3_step](P) returned +** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum] +** where it always returns zero since each step of that multi-step +** pragma returns 0 columns of data. +** +** See also: [sqlite3_column_count()] +*/ +SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Fundamental Datatypes +** KEYWORDS: SQLITE_TEXT +** +** ^(Every value in SQLite has one of five fundamental datatypes: +** +**
    +**
  • 64-bit signed integer +**
  • 64-bit IEEE floating point number +**
  • string +**
  • BLOB +**
  • NULL +**
)^ +** +** These constants are codes for each of those types. +** +** Note that the SQLITE_TEXT constant was also used in SQLite version 2 +** for a completely different meaning. Software that links against both +** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not +** SQLITE_TEXT. +*/ +#define SQLITE_INTEGER 1 +#define SQLITE_FLOAT 2 +#define SQLITE_BLOB 4 +#define SQLITE_NULL 5 +#ifdef SQLITE_TEXT +# undef SQLITE_TEXT +#else +# define SQLITE_TEXT 3 +#endif +#define SQLITE3_TEXT 3 + +/* +** CAPI3REF: Result Values From A Query +** KEYWORDS: {column access functions} +** METHOD: sqlite3_stmt +** +** Summary: +**
+**
sqlite3_column_blobBLOB result +**
sqlite3_column_doubleREAL result +**
sqlite3_column_int32-bit INTEGER result +**
sqlite3_column_int6464-bit INTEGER result +**
sqlite3_column_textUTF-8 TEXT result +**
sqlite3_column_text16UTF-16 TEXT result +**
sqlite3_column_valueThe result as an +** [sqlite3_value|unprotected sqlite3_value] object. +**
    +**
sqlite3_column_bytesSize of a BLOB +** or a UTF-8 TEXT result in bytes +**
sqlite3_column_bytes16   +** →  Size of UTF-16 +** TEXT in bytes +**
sqlite3_column_typeDefault +** datatype of the result +**
+** +** Details: +** +** ^These routines return information about a single column of the current +** result row of a query. ^In every case the first argument is a pointer +** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] +** that was returned from [sqlite3_prepare_v2()] or one of its variants) +** and the second argument is the index of the column for which information +** should be returned. ^The leftmost column of the result set has the index 0. +** ^The number of columns in the result can be determined using +** [sqlite3_column_count()]. +** +** If the SQL statement does not currently point to a valid row, or if the +** column index is out of range, the result is undefined. +** These routines may only be called when the most recent call to +** [sqlite3_step()] has returned [SQLITE_ROW] and neither +** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently. +** If any of these routines are called after [sqlite3_reset()] or +** [sqlite3_finalize()] or after [sqlite3_step()] has returned +** something other than [SQLITE_ROW], the results are undefined. +** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()] +** are called from a different thread while any of these routines +** are pending, then the results are undefined. +** +** The first six interfaces (_blob, _double, _int, _int64, _text, and _text16) +** each return the value of a result column in a specific data format. If +** the result column is not initially in the requested format (for example, +** if the query returns an integer but the sqlite3_column_text() interface +** is used to extract the value) then an automatic type conversion is performed. +** +** ^The sqlite3_column_type() routine returns the +** [SQLITE_INTEGER | datatype code] for the initial data type +** of the result column. ^The returned value is one of [SQLITE_INTEGER], +** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. +** The return value of sqlite3_column_type() can be used to decide which +** of the first six interface should be used to extract the column value. +** The value returned by sqlite3_column_type() is only meaningful if no +** automatic type conversions have occurred for the value in question. +** After a type conversion, the result of calling sqlite3_column_type() +** is undefined, though harmless. Future +** versions of SQLite may change the behavior of sqlite3_column_type() +** following a type conversion. +** +** If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes() +** or sqlite3_column_bytes16() interfaces can be used to determine the size +** of that BLOB or string. +** +** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() +** routine returns the number of bytes in that BLOB or string. +** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts +** the string to UTF-8 and then returns the number of bytes. +** ^If the result is a numeric value then sqlite3_column_bytes() uses +** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns +** the number of bytes in that string. +** ^If the result is NULL, then sqlite3_column_bytes() returns zero. +** +** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16() +** routine returns the number of bytes in that BLOB or string. +** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts +** the string to UTF-16 and then returns the number of bytes. +** ^If the result is a numeric value then sqlite3_column_bytes16() uses +** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns +** the number of bytes in that string. +** ^If the result is NULL, then sqlite3_column_bytes16() returns zero. +** +** ^The values returned by [sqlite3_column_bytes()] and +** [sqlite3_column_bytes16()] do not include the zero terminators at the end +** of the string. ^For clarity: the values returned by +** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of +** bytes in the string, not the number of characters. +** +** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(), +** even empty strings, are always zero-terminated. ^The return +** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer. +** +** ^Strings returned by sqlite3_column_text16() always have the endianness +** which is native to the platform, regardless of the text encoding set +** for the database. +** +** Warning: ^The object returned by [sqlite3_column_value()] is an +** [unprotected sqlite3_value] object. In a multithreaded environment, +** an unprotected sqlite3_value object may only be used safely with +** [sqlite3_bind_value()] and [sqlite3_result_value()]. +** If the [unprotected sqlite3_value] object returned by +** [sqlite3_column_value()] is used in any other way, including calls +** to routines like [sqlite3_value_int()], [sqlite3_value_text()], +** or [sqlite3_value_bytes()], the behavior is not threadsafe. +** Hence, the sqlite3_column_value() interface +** is normally only useful within the implementation of +** [application-defined SQL functions] or [virtual tables], not within +** top-level application code. +** +** These routines may attempt to convert the datatype of the result. +** ^For example, if the internal representation is FLOAT and a text result +** is requested, [sqlite3_snprintf()] is used internally to perform the +** conversion automatically. ^(The following table details the conversions +** that are applied: +** +**
+** +**
Internal
Type
Requested
Type
Conversion +** +**
NULL INTEGER Result is 0 +**
NULL FLOAT Result is 0.0 +**
NULL TEXT Result is a NULL pointer +**
NULL BLOB Result is a NULL pointer +**
INTEGER FLOAT Convert from integer to float +**
INTEGER TEXT ASCII rendering of the integer +**
INTEGER BLOB Same as INTEGER->TEXT +**
FLOAT INTEGER [CAST] to INTEGER +**
FLOAT TEXT ASCII rendering of the float +**
FLOAT BLOB [CAST] to BLOB +**
TEXT INTEGER [CAST] to INTEGER +**
TEXT FLOAT [CAST] to REAL +**
TEXT BLOB No change +**
BLOB INTEGER [CAST] to INTEGER +**
BLOB FLOAT [CAST] to REAL +**
BLOB TEXT [CAST] to TEXT, ensure zero terminator +**
+**
)^ +** +** Note that when type conversions occur, pointers returned by prior +** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or +** sqlite3_column_text16() may be invalidated. +** Type conversions and pointer invalidations might occur +** in the following cases: +** +**
    +**
  • The initial content is a BLOB and sqlite3_column_text() or +** sqlite3_column_text16() is called. A zero-terminator might +** need to be added to the string.
  • +**
  • The initial content is UTF-8 text and sqlite3_column_bytes16() or +** sqlite3_column_text16() is called. The content must be converted +** to UTF-16.
  • +**
  • The initial content is UTF-16 text and sqlite3_column_bytes() or +** sqlite3_column_text() is called. The content must be converted +** to UTF-8.
  • +**
+** +** ^Conversions between UTF-16be and UTF-16le are always done in place and do +** not invalidate a prior pointer, though of course the content of the buffer +** that the prior pointer references will have been modified. Other kinds +** of conversion are done in place when it is possible, but sometimes they +** are not possible and in those cases prior pointers are invalidated. +** +** The safest policy is to invoke these routines +** in one of the following ways: +** +**
    +**
  • sqlite3_column_text() followed by sqlite3_column_bytes()
  • +**
  • sqlite3_column_blob() followed by sqlite3_column_bytes()
  • +**
  • sqlite3_column_text16() followed by sqlite3_column_bytes16()
  • +**
+** +** In other words, you should call sqlite3_column_text(), +** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result +** into the desired format, then invoke sqlite3_column_bytes() or +** sqlite3_column_bytes16() to find the size of the result. Do not mix calls +** to sqlite3_column_text() or sqlite3_column_blob() with calls to +** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16() +** with calls to sqlite3_column_bytes(). +** +** ^The pointers returned are valid until a type conversion occurs as +** described above, or until [sqlite3_step()] or [sqlite3_reset()] or +** [sqlite3_finalize()] is called. ^The memory space used to hold strings +** and BLOBs is freed automatically. Do not pass the pointers returned +** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into +** [sqlite3_free()]. +** +** As long as the input parameters are correct, these routines will only +** fail if an out-of-memory error occurs during a format conversion. +** Only the following subset of interfaces are subject to out-of-memory +** errors: +** +**
    +**
  • sqlite3_column_blob() +**
  • sqlite3_column_text() +**
  • sqlite3_column_text16() +**
  • sqlite3_column_bytes() +**
  • sqlite3_column_bytes16() +**
+** +** If an out-of-memory error occurs, then the return value from these +** routines is the same as if the column had contained an SQL NULL value. +** Valid SQL NULL returns can be distinguished from out-of-memory errors +** by invoking the [sqlite3_errcode()] immediately after the suspect +** return value is obtained and before any +** other SQLite interface is called on the same [database connection]. +*/ +SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); +SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); +SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); +SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); +SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); +SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); + +/* +** CAPI3REF: Destroy A Prepared Statement Object +** DESTRUCTOR: sqlite3_stmt +** +** ^The sqlite3_finalize() function is called to delete a [prepared statement]. +** ^If the most recent evaluation of the statement encountered no errors +** or if the statement is never been evaluated, then sqlite3_finalize() returns +** SQLITE_OK. ^If the most recent evaluation of statement S failed, then +** sqlite3_finalize(S) returns the appropriate [error code] or +** [extended error code]. +** +** ^The sqlite3_finalize(S) routine can be called at any point during +** the life cycle of [prepared statement] S: +** before statement S is ever evaluated, after +** one or more calls to [sqlite3_reset()], or after any call +** to [sqlite3_step()] regardless of whether or not the statement has +** completed execution. +** +** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op. +** +** The application must finalize every [prepared statement] in order to avoid +** resource leaks. It is a grievous error for the application to try to use +** a prepared statement after it has been finalized. Any use of a prepared +** statement after it has been finalized can result in undefined and +** undesirable behavior such as segfaults and heap corruption. +*/ +SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Reset A Prepared Statement Object +** METHOD: sqlite3_stmt +** +** The sqlite3_reset() function is called to reset a [prepared statement] +** object back to its initial state, ready to be re-executed. +** ^Any SQL statement variables that had values bound to them using +** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values. +** Use [sqlite3_clear_bindings()] to reset the bindings. +** +** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S +** back to the beginning of its program. +** +** ^The return code from [sqlite3_reset(S)] indicates whether or not +** the previous evaluation of prepared statement S completed successfully. +** ^If [sqlite3_step(S)] has never before been called on S or if +** [sqlite3_step(S)] has not been called since the previous call +** to [sqlite3_reset(S)], then [sqlite3_reset(S)] will return +** [SQLITE_OK]. +** +** ^If the most recent call to [sqlite3_step(S)] for the +** [prepared statement] S indicated an error, then +** [sqlite3_reset(S)] returns an appropriate [error code]. +** ^The [sqlite3_reset(S)] interface might also return an [error code] +** if there were no prior errors but the process of resetting +** the prepared statement caused a new error. ^For example, if an +** [INSERT] statement with a [RETURNING] clause is only stepped one time, +** that one call to [sqlite3_step(S)] might return SQLITE_ROW but +** the overall statement might still fail and the [sqlite3_reset(S)] call +** might return SQLITE_BUSY if locking constraints prevent the +** database change from committing. Therefore, it is important that +** applications check the return code from [sqlite3_reset(S)] even if +** no prior call to [sqlite3_step(S)] indicated a problem. +** +** ^The [sqlite3_reset(S)] interface does not change the values +** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. +*/ +SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); + + +/* +** CAPI3REF: Create Or Redefine SQL Functions +** KEYWORDS: {function creation routines} +** METHOD: sqlite3 +** +** ^These functions (collectively known as "function creation routines") +** are used to add SQL functions or aggregates or to redefine the behavior +** of existing SQL functions or aggregates. The only differences between +** the three "sqlite3_create_function*" routines are the text encoding +** expected for the second parameter (the name of the function being +** created) and the presence or absence of a destructor callback for +** the application data pointer. Function sqlite3_create_window_function() +** is similar, but allows the user to supply the extra callback functions +** needed by [aggregate window functions]. +** +** ^The first parameter is the [database connection] to which the SQL +** function is to be added. ^If an application uses more than one database +** connection then application-defined SQL functions must be added +** to each database connection separately. +** +** ^The second parameter is the name of the SQL function to be created or +** redefined. ^The length of the name is limited to 255 bytes in a UTF-8 +** representation, exclusive of the zero-terminator. ^Note that the name +** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes. +** ^Any attempt to create a function with a longer name +** will result in [SQLITE_MISUSE] being returned. +** +** ^The third parameter (nArg) +** is the number of arguments that the SQL function or +** aggregate takes. ^If this parameter is -1, then the SQL function or +** aggregate may take any number of arguments between 0 and the limit +** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third +** parameter is less than -1 or greater than 127 then the behavior is +** undefined. +** +** ^The fourth parameter, eTextRep, specifies what +** [SQLITE_UTF8 | text encoding] this SQL function prefers for +** its parameters. The application should set this parameter to +** [SQLITE_UTF16LE] if the function implementation invokes +** [sqlite3_value_text16le()] on an input, or [SQLITE_UTF16BE] if the +** implementation invokes [sqlite3_value_text16be()] on an input, or +** [SQLITE_UTF16] if [sqlite3_value_text16()] is used, or [SQLITE_UTF8] +** otherwise. ^The same SQL function may be registered multiple times using +** different preferred text encodings, with different implementations for +** each encoding. +** ^When multiple implementations of the same function are available, SQLite +** will pick the one that involves the least amount of data conversion. +** +** ^The fourth parameter may optionally be ORed with [SQLITE_DETERMINISTIC] +** to signal that the function will always return the same result given +** the same inputs within a single SQL statement. Most SQL functions are +** deterministic. The built-in [random()] SQL function is an example of a +** function that is not deterministic. The SQLite query planner is able to +** perform additional optimizations on deterministic functions, so use +** of the [SQLITE_DETERMINISTIC] flag is recommended where possible. +** +** ^The fourth parameter may also optionally include the [SQLITE_DIRECTONLY] +** flag, which if present prevents the function from being invoked from +** within VIEWs, TRIGGERs, CHECK constraints, generated column expressions, +** index expressions, or the WHERE clause of partial indexes. +** +** For best security, the [SQLITE_DIRECTONLY] flag is recommended for +** all application-defined SQL functions that do not need to be +** used inside of triggers, views, CHECK constraints, or other elements of +** the database schema. This flag is especially recommended for SQL +** functions that have side effects or reveal internal application state. +** Without this flag, an attacker might be able to modify the schema of +** a database file to include invocations of the function with parameters +** chosen by the attacker, which the application will then execute when +** the database file is opened and read. +** +** ^(The fifth parameter is an arbitrary pointer. The implementation of the +** function can gain access to this pointer using [sqlite3_user_data()].)^ +** +** ^The sixth, seventh and eighth parameters passed to the three +** "sqlite3_create_function*" functions, xFunc, xStep and xFinal, are +** pointers to C-language functions that implement the SQL function or +** aggregate. ^A scalar SQL function requires an implementation of the xFunc +** callback only; NULL pointers must be passed as the xStep and xFinal +** parameters. ^An aggregate SQL function requires an implementation of xStep +** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing +** SQL function or aggregate, pass NULL pointers for all three function +** callbacks. +** +** ^The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue +** and xInverse) passed to sqlite3_create_window_function are pointers to +** C-language callbacks that implement the new function. xStep and xFinal +** must both be non-NULL. xValue and xInverse may either both be NULL, in +** which case a regular aggregate function is created, or must both be +** non-NULL, in which case the new function may be used as either an aggregate +** or aggregate window function. More details regarding the implementation +** of aggregate window functions are +** [user-defined window functions|available here]. +** +** ^(If the final parameter to sqlite3_create_function_v2() or +** sqlite3_create_window_function() is not NULL, then it is the destructor for +** the application data pointer. The destructor is invoked when the function +** is deleted, either by being overloaded or when the database connection +** closes.)^ ^The destructor is also invoked if the call to +** sqlite3_create_function_v2() fails. ^When the destructor callback is +** invoked, it is passed a single argument which is a copy of the application +** data pointer which was the fifth parameter to sqlite3_create_function_v2(). +** +** ^It is permitted to register multiple implementations of the same +** functions with the same name but with either differing numbers of +** arguments or differing preferred text encodings. ^SQLite will use +** the implementation that most closely matches the way in which the +** SQL function is used. ^A function implementation with a non-negative +** nArg parameter is a better match than a function implementation with +** a negative nArg. ^A function where the preferred text encoding +** matches the database encoding is a better +** match than a function where the encoding is different. +** ^A function where the encoding difference is between UTF16le and UTF16be +** is a closer match than a function where the encoding difference is +** between UTF8 and UTF16. +** +** ^Built-in functions may be overloaded by new application-defined functions. +** +** ^An application-defined function is permitted to call other +** SQLite interfaces. However, such calls must not +** close the database connection nor finalize or reset the prepared +** statement in which the function is running. +*/ +SQLITE_API int sqlite3_create_function( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*) +); +SQLITE_API int sqlite3_create_function16( + sqlite3 *db, + const void *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*) +); +SQLITE_API int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*) +); +SQLITE_API int sqlite3_create_window_function( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int eTextRep, + void *pApp, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*) +); + +/* +** CAPI3REF: Text Encodings +** +** These constant define integer codes that represent the various +** text encodings supported by SQLite. +*/ +#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */ +#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */ +#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */ +#define SQLITE_UTF16 4 /* Use native byte order */ +#define SQLITE_ANY 5 /* Deprecated */ +#define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */ + +/* +** CAPI3REF: Function Flags +** +** These constants may be ORed together with the +** [SQLITE_UTF8 | preferred text encoding] as the fourth argument +** to [sqlite3_create_function()], [sqlite3_create_function16()], or +** [sqlite3_create_function_v2()]. +** +**
+** [[SQLITE_DETERMINISTIC]]
SQLITE_DETERMINISTIC
+** The SQLITE_DETERMINISTIC flag means that the new function always gives +** the same output when the input parameters are the same. +** The [abs|abs() function] is deterministic, for example, but +** [randomblob|randomblob()] is not. Functions must +** be deterministic in order to be used in certain contexts such as +** with the WHERE clause of [partial indexes] or in [generated columns]. +** SQLite might also optimize deterministic functions by factoring them +** out of inner loops. +**
+** +** [[SQLITE_DIRECTONLY]]
SQLITE_DIRECTONLY
+** The SQLITE_DIRECTONLY flag means that the function may only be invoked +** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in +** schema structures such as [CHECK constraints], [DEFAULT clauses], +** [expression indexes], [partial indexes], or [generated columns]. +**

+** The SQLITE_DIRECTONLY flag is recommended for any +** [application-defined SQL function] +** that has side-effects or that could potentially leak sensitive information. +** This will prevent attacks in which an application is tricked +** into using a database file that has had its schema surreptitiously +** modified to invoke the application-defined function in ways that are +** harmful. +**

+** Some people say it is good practice to set SQLITE_DIRECTONLY on all +** [application-defined SQL functions], regardless of whether or not they +** are security sensitive, as doing so prevents those functions from being used +** inside of the database schema, and thus ensures that the database +** can be inspected and modified using generic tools (such as the [CLI]) +** that do not have access to the application-defined functions. +**

+** +** [[SQLITE_INNOCUOUS]]
SQLITE_INNOCUOUS
+** The SQLITE_INNOCUOUS flag means that the function is unlikely +** to cause problems even if misused. An innocuous function should have +** no side effects and should not depend on any values other than its +** input parameters. The [abs|abs() function] is an example of an +** innocuous function. +** The [load_extension() SQL function] is not innocuous because of its +** side effects. +**

SQLITE_INNOCUOUS is similar to SQLITE_DETERMINISTIC, but is not +** exactly the same. The [random|random() function] is an example of a +** function that is innocuous but not deterministic. +**

Some heightened security settings +** ([SQLITE_DBCONFIG_TRUSTED_SCHEMA] and [PRAGMA trusted_schema=OFF]) +** disable the use of SQL functions inside views and triggers and in +** schema structures such as [CHECK constraints], [DEFAULT clauses], +** [expression indexes], [partial indexes], and [generated columns] unless +** the function is tagged with SQLITE_INNOCUOUS. Most built-in functions +** are innocuous. Developers are advised to avoid using the +** SQLITE_INNOCUOUS flag for application-defined functions unless the +** function has been carefully audited and found to be free of potentially +** security-adverse side-effects and information-leaks. +**

+** +** [[SQLITE_SUBTYPE]]
SQLITE_SUBTYPE
+** The SQLITE_SUBTYPE flag indicates to SQLite that a function might call +** [sqlite3_value_subtype()] to inspect the sub-types of its arguments. +** This flag instructs SQLite to omit some corner-case optimizations that +** might disrupt the operation of the [sqlite3_value_subtype()] function, +** causing it to return zero rather than the correct subtype(). +** All SQL functions that invoke [sqlite3_value_subtype()] should have this +** property. If the SQLITE_SUBTYPE property is omitted, then the return +** value from [sqlite3_value_subtype()] might sometimes be zero even though +** a non-zero subtype was specified by the function argument expression. +** +** [[SQLITE_RESULT_SUBTYPE]]
SQLITE_RESULT_SUBTYPE
+** The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call +** [sqlite3_result_subtype()] to cause a sub-type to be associated with its +** result. +** Every function that invokes [sqlite3_result_subtype()] should have this +** property. If it does not, then the call to [sqlite3_result_subtype()] +** might become a no-op if the function is used as term in an +** [expression index]. On the other hand, SQL functions that never invoke +** [sqlite3_result_subtype()] should avoid setting this property, as the +** purpose of this property is to disable certain optimizations that are +** incompatible with subtypes. +** +** [[SQLITE_SELFORDER1]]
SQLITE_SELFORDER1
+** The SQLITE_SELFORDER1 flag indicates that the function is an aggregate +** that internally orders the values provided to the first argument. The +** ordered-set aggregate SQL notation with a single ORDER BY term can be +** used to invoke this function. If the ordered-set aggregate notation is +** used on a function that lacks this flag, then an error is raised. Note +** that the ordered-set aggregate syntax is only available if SQLite is +** built using the -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES compile-time option. +**
+**
+*/ +#define SQLITE_DETERMINISTIC 0x000000800 +#define SQLITE_DIRECTONLY 0x000080000 +#define SQLITE_SUBTYPE 0x000100000 +#define SQLITE_INNOCUOUS 0x000200000 +#define SQLITE_RESULT_SUBTYPE 0x001000000 +#define SQLITE_SELFORDER1 0x002000000 + +/* +** CAPI3REF: Deprecated Functions +** DEPRECATED +** +** These functions are [deprecated]. In order to maintain +** backwards compatibility with older code, these functions continue +** to be supported. However, new applications should avoid +** the use of these functions. To encourage programmers to avoid +** these functions, we will not explain what they do. +*/ +#ifndef SQLITE_OMIT_DEPRECATED +SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*); +SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*); +SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*); +SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void); +SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void); +SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int), + void*,sqlite3_int64); +#endif + +/* +** CAPI3REF: Obtaining SQL Values +** METHOD: sqlite3_value +** +** Summary: +**
+**
sqlite3_value_blobBLOB value +**
sqlite3_value_doubleREAL value +**
sqlite3_value_int32-bit INTEGER value +**
sqlite3_value_int6464-bit INTEGER value +**
sqlite3_value_pointerPointer value +**
sqlite3_value_textUTF-8 TEXT value +**
sqlite3_value_text16UTF-16 TEXT value in +** the native byteorder +**
sqlite3_value_text16beUTF-16be TEXT value +**
sqlite3_value_text16leUTF-16le TEXT value +**
    +**
sqlite3_value_bytesSize of a BLOB +** or a UTF-8 TEXT in bytes +**
sqlite3_value_bytes16   +** →  Size of UTF-16 +** TEXT in bytes +**
sqlite3_value_typeDefault +** datatype of the value +**
sqlite3_value_numeric_type   +** →  Best numeric datatype of the value +**
sqlite3_value_nochange   +** →  True if the column is unchanged in an UPDATE +** against a virtual table. +**
sqlite3_value_frombind   +** →  True if value originated from a [bound parameter] +**
+** +** Details: +** +** These routines extract type, size, and content information from +** [protected sqlite3_value] objects. Protected sqlite3_value objects +** are used to pass parameter information into the functions that +** implement [application-defined SQL functions] and [virtual tables]. +** +** These routines work only with [protected sqlite3_value] objects. +** Any attempt to use these routines on an [unprotected sqlite3_value] +** is not threadsafe. +** +** ^These routines work just like the corresponding [column access functions] +** except that these routines take a single [protected sqlite3_value] object +** pointer instead of a [sqlite3_stmt*] pointer and an integer column number. +** +** ^The sqlite3_value_text16() interface extracts a UTF-16 string +** in the native byte-order of the host machine. ^The +** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces +** extract UTF-16 strings as big-endian and little-endian respectively. +** +** ^If [sqlite3_value] object V was initialized +** using [sqlite3_bind_pointer(S,I,P,X,D)] or [sqlite3_result_pointer(C,P,X,D)] +** and if X and Y are strings that compare equal according to strcmp(X,Y), +** then sqlite3_value_pointer(V,Y) will return the pointer P. ^Otherwise, +** sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer() +** routine is part of the [pointer passing interface] added for SQLite 3.20.0. +** +** ^(The sqlite3_value_type(V) interface returns the +** [SQLITE_INTEGER | datatype code] for the initial datatype of the +** [sqlite3_value] object V. The returned value is one of [SQLITE_INTEGER], +** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].)^ +** Other interfaces might change the datatype for an sqlite3_value object. +** For example, if the datatype is initially SQLITE_INTEGER and +** sqlite3_value_text(V) is called to extract a text value for that +** integer, then subsequent calls to sqlite3_value_type(V) might return +** SQLITE_TEXT. Whether or not a persistent internal datatype conversion +** occurs is undefined and may change from one release of SQLite to the next. +** +** ^(The sqlite3_value_numeric_type() interface attempts to apply +** numeric affinity to the value. This means that an attempt is +** made to convert the value to an integer or floating point. If +** such a conversion is possible without loss of information (in other +** words, if the value is a string that looks like a number) +** then the conversion is performed. Otherwise no conversion occurs. +** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ +** +** ^Within the [xUpdate] method of a [virtual table], the +** sqlite3_value_nochange(X) interface returns true if and only if +** the column corresponding to X is unchanged by the UPDATE operation +** that the xUpdate method call was invoked to implement and if +** and the prior [xColumn] method call that was invoked to extracted +** the value for that column returned without setting a result (probably +** because it queried [sqlite3_vtab_nochange()] and found that the column +** was unchanging). ^Within an [xUpdate] method, any value for which +** sqlite3_value_nochange(X) is true will in all other respects appear +** to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other +** than within an [xUpdate] method call for an UPDATE statement, then +** the return value is arbitrary and meaningless. +** +** ^The sqlite3_value_frombind(X) interface returns non-zero if the +** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()] +** interfaces. ^If X comes from an SQL literal value, or a table column, +** or an expression, then sqlite3_value_frombind(X) returns zero. +** +** Please pay particular attention to the fact that the pointer returned +** from [sqlite3_value_blob()], [sqlite3_value_text()], or +** [sqlite3_value_text16()] can be invalidated by a subsequent call to +** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()], +** or [sqlite3_value_text16()]. +** +** These routines must be called from the same thread as +** the SQL function that supplied the [sqlite3_value*] parameters. +** +** As long as the input parameter is correct, these routines can only +** fail if an out-of-memory error occurs during a format conversion. +** Only the following subset of interfaces are subject to out-of-memory +** errors: +** +**
    +**
  • sqlite3_value_blob() +**
  • sqlite3_value_text() +**
  • sqlite3_value_text16() +**
  • sqlite3_value_text16le() +**
  • sqlite3_value_text16be() +**
  • sqlite3_value_bytes() +**
  • sqlite3_value_bytes16() +**
+** +** If an out-of-memory error occurs, then the return value from these +** routines is the same as if the column had contained an SQL NULL value. +** Valid SQL NULL returns can be distinguished from out-of-memory errors +** by invoking the [sqlite3_errcode()] immediately after the suspect +** return value is obtained and before any +** other SQLite interface is called on the same [database connection]. +*/ +SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); +SQLITE_API double sqlite3_value_double(sqlite3_value*); +SQLITE_API int sqlite3_value_int(sqlite3_value*); +SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*); +SQLITE_API void *sqlite3_value_pointer(sqlite3_value*, const char*); +SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*); +SQLITE_API const void *sqlite3_value_text16(sqlite3_value*); +SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*); +SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); +SQLITE_API int sqlite3_value_type(sqlite3_value*); +SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); +SQLITE_API int sqlite3_value_nochange(sqlite3_value*); +SQLITE_API int sqlite3_value_frombind(sqlite3_value*); + +/* +** CAPI3REF: Report the internal text encoding state of an sqlite3_value object +** METHOD: sqlite3_value +** +** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8], +** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding +** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X) +** returns something other than SQLITE_TEXT, then the return value from +** sqlite3_value_encoding(X) is meaningless. ^Calls to +** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)], +** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or +** [sqlite3_value_bytes16(X)] might change the encoding of the value X and +** thus change the return from subsequent calls to sqlite3_value_encoding(X). +** +** This routine is intended for used by applications that test and validate +** the SQLite implementation. This routine is inquiring about the opaque +** internal state of an [sqlite3_value] object. Ordinary applications should +** not need to know what the internal state of an sqlite3_value object is and +** hence should not need to use this interface. +*/ +SQLITE_API int sqlite3_value_encoding(sqlite3_value*); + +/* +** CAPI3REF: Finding The Subtype Of SQL Values +** METHOD: sqlite3_value +** +** The sqlite3_value_subtype(V) function returns the subtype for +** an [application-defined SQL function] argument V. The subtype +** information can be used to pass a limited amount of context from +** one SQL function to another. Use the [sqlite3_result_subtype()] +** routine to set the subtype for the return value of an SQL function. +** +** Every [application-defined SQL function] that invokes this interface +** should include the [SQLITE_SUBTYPE] property in the text +** encoding argument when the function is [sqlite3_create_function|registered]. +** If the [SQLITE_SUBTYPE] property is omitted, then sqlite3_value_subtype() +** might return zero instead of the upstream subtype in some corner cases. +*/ +SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*); + +/* +** CAPI3REF: Copy And Free SQL Values +** METHOD: sqlite3_value +** +** ^The sqlite3_value_dup(V) interface makes a copy of the [sqlite3_value] +** object V and returns a pointer to that copy. ^The [sqlite3_value] returned +** is a [protected sqlite3_value] object even if the input is not. +** ^The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a +** memory allocation fails. ^If V is a [pointer value], then the result +** of sqlite3_value_dup(V) is a NULL value. +** +** ^The sqlite3_value_free(V) interface frees an [sqlite3_value] object +** previously obtained from [sqlite3_value_dup()]. ^If V is a NULL pointer +** then sqlite3_value_free(V) is a harmless no-op. +*/ +SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value*); +SQLITE_API void sqlite3_value_free(sqlite3_value*); + +/* +** CAPI3REF: Obtain Aggregate Function Context +** METHOD: sqlite3_context +** +** Implementations of aggregate SQL functions use this +** routine to allocate memory for storing their state. +** +** ^The first time the sqlite3_aggregate_context(C,N) routine is called +** for a particular aggregate function, SQLite allocates +** N bytes of memory, zeroes out that memory, and returns a pointer +** to the new memory. ^On second and subsequent calls to +** sqlite3_aggregate_context() for the same aggregate function instance, +** the same buffer is returned. Sqlite3_aggregate_context() is normally +** called once for each invocation of the xStep callback and then one +** last time when the xFinal callback is invoked. ^(When no rows match +** an aggregate query, the xStep() callback of the aggregate function +** implementation is never called and xFinal() is called exactly once. +** In those cases, sqlite3_aggregate_context() might be called for the +** first time from within xFinal().)^ +** +** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer +** when first called if N is less than or equal to zero or if a memory +** allocation error occurs. +** +** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is +** determined by the N parameter on the first successful call. Changing the +** value of N in any subsequent call to sqlite3_aggregate_context() within +** the same aggregate function instance will not resize the memory +** allocation.)^ Within the xFinal callback, it is customary to set +** N=0 in calls to sqlite3_aggregate_context(C,N) so that no +** pointless memory allocations occur. +** +** ^SQLite automatically frees the memory allocated by +** sqlite3_aggregate_context() when the aggregate query concludes. +** +** The first parameter must be a copy of the +** [sqlite3_context | SQL function context] that is the first parameter +** to the xStep or xFinal callback routine that implements the aggregate +** function. +** +** This routine must be called from the same thread in which +** the aggregate SQL function is running. +*/ +SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes); + +/* +** CAPI3REF: User Data For Functions +** METHOD: sqlite3_context +** +** ^The sqlite3_user_data() interface returns a copy of +** the pointer that was the pUserData parameter (the 5th parameter) +** of the [sqlite3_create_function()] +** and [sqlite3_create_function16()] routines that originally +** registered the application defined function. +** +** This routine must be called from the same thread in which +** the application-defined function is running. +*/ +SQLITE_API void *sqlite3_user_data(sqlite3_context*); + +/* +** CAPI3REF: Database Connection For Functions +** METHOD: sqlite3_context +** +** ^The sqlite3_context_db_handle() interface returns a copy of +** the pointer to the [database connection] (the 1st parameter) +** of the [sqlite3_create_function()] +** and [sqlite3_create_function16()] routines that originally +** registered the application defined function. +*/ +SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); + +/* +** CAPI3REF: Function Auxiliary Data +** METHOD: sqlite3_context +** +** These functions may be used by (non-aggregate) SQL functions to +** associate auxiliary data with argument values. If the same argument +** value is passed to multiple invocations of the same SQL function during +** query execution, under some circumstances the associated auxiliary data +** might be preserved. An example of where this might be useful is in a +** regular-expression matching function. The compiled version of the regular +** expression can be stored as auxiliary data associated with the pattern string. +** Then as long as the pattern string remains the same, +** the compiled regular expression can be reused on multiple +** invocations of the same function. +** +** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the auxiliary data +** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument +** value to the application-defined function. ^N is zero for the left-most +** function argument. ^If there is no auxiliary data +** associated with the function argument, the sqlite3_get_auxdata(C,N) interface +** returns a NULL pointer. +** +** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as auxiliary data for the +** N-th argument of the application-defined function. ^Subsequent +** calls to sqlite3_get_auxdata(C,N) return P from the most recent +** sqlite3_set_auxdata(C,N,P,X) call if the auxiliary data is still valid or +** NULL if the auxiliary data has been discarded. +** ^After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL, +** SQLite will invoke the destructor function X with parameter P exactly +** once, when the auxiliary data is discarded. +** SQLite is free to discard the auxiliary data at any time, including:
    +**
  • ^(when the corresponding function parameter changes)^, or +**
  • ^(when [sqlite3_reset()] or [sqlite3_finalize()] is called for the +** SQL statement)^, or +**
  • ^(when sqlite3_set_auxdata() is invoked again on the same +** parameter)^, or +**
  • ^(during the original sqlite3_set_auxdata() call when a memory +** allocation error occurs.)^ +**
  • ^(during the original sqlite3_set_auxdata() call if the function +** is evaluated during query planning instead of during query execution, +** as sometimes happens with [SQLITE_ENABLE_STAT4].)^
+** +** Note the last two bullets in particular. The destructor X in +** sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the +** sqlite3_set_auxdata() interface even returns. Hence sqlite3_set_auxdata() +** should be called near the end of the function implementation and the +** function implementation should not make any use of P after +** sqlite3_set_auxdata() has been called. Furthermore, a call to +** sqlite3_get_auxdata() that occurs immediately after a corresponding call +** to sqlite3_set_auxdata() might still return NULL if an out-of-memory +** condition occurred during the sqlite3_set_auxdata() call or if the +** function is being evaluated during query planning rather than during +** query execution. +** +** ^(In practice, auxiliary data is preserved between function calls for +** function parameters that are compile-time constants, including literal +** values and [parameters] and expressions composed from the same.)^ +** +** The value of the N parameter to these interfaces should be non-negative. +** Future enhancements may make use of negative N values to define new +** kinds of function caching behavior. +** +** These routines must be called from the same thread in which +** the SQL function is running. +** +** See also: [sqlite3_get_clientdata()] and [sqlite3_set_clientdata()]. +*/ +SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); +SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); + +/* +** CAPI3REF: Database Connection Client Data +** METHOD: sqlite3 +** +** These functions are used to associate one or more named pointers +** with a [database connection]. +** A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P +** to be attached to [database connection] D using name N. Subsequent +** calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P +** or a NULL pointer if there were no prior calls to +** sqlite3_set_clientdata() with the same values of D and N. +** Names are compared using strcmp() and are thus case sensitive. +** +** If P and X are both non-NULL, then the destructor X is invoked with +** argument P on the first of the following occurrences: +**
    +**
  • An out-of-memory error occurs during the call to +** sqlite3_set_clientdata() which attempts to register pointer P. +**
  • A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made +** with the same D and N parameters. +**
  • The database connection closes. SQLite does not make any guarantees +** about the order in which destructors are called, only that all +** destructors will be called exactly once at some point during the +** database connection closing process. +**
+** +** SQLite does not do anything with client data other than invoke +** destructors on the client data at the appropriate time. The intended +** use for client data is to provide a mechanism for wrapper libraries +** to store additional information about an SQLite database connection. +** +** There is no limit (other than available memory) on the number of different +** client data pointers (with different names) that can be attached to a +** single database connection. However, the implementation is optimized +** for the case of having only one or two different client data names. +** Applications and wrapper libraries are discouraged from using more than +** one client data name each. +** +** There is no way to enumerate the client data pointers +** associated with a database connection. The N parameter can be thought +** of as a secret key such that only code that knows the secret key is able +** to access the associated data. +** +** Security Warning: These interfaces should not be exposed in scripting +** languages or in other circumstances where it might be possible for an +** attacker to invoke them. Any agent that can invoke these interfaces +** can probably also take control of the process. +** +** Database connection client data is only available for SQLite +** version 3.44.0 ([dateof:3.44.0]) and later. +** +** See also: [sqlite3_set_auxdata()] and [sqlite3_get_auxdata()]. +*/ +SQLITE_API void *sqlite3_get_clientdata(sqlite3*,const char*); +SQLITE_API int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*)); + +/* +** CAPI3REF: Constants Defining Special Destructor Behavior +** +** These are special values for the destructor that is passed in as the +** final argument to routines like [sqlite3_result_blob()]. ^If the destructor +** argument is SQLITE_STATIC, it means that the content pointer is constant +** and will never change. It does not need to be destroyed. ^The +** SQLITE_TRANSIENT value means that the content will likely change in +** the near future and that SQLite should make its own private copy of +** the content before returning. +** +** The typedef is necessary to work around problems in certain +** C++ compilers. +*/ +typedef void (*sqlite3_destructor_type)(void*); +#define SQLITE_STATIC ((sqlite3_destructor_type)0) +#define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1) + +/* +** CAPI3REF: Setting The Result Of An SQL Function +** METHOD: sqlite3_context +** +** These routines are used by the xFunc or xFinal callbacks that +** implement SQL functions and aggregates. See +** [sqlite3_create_function()] and [sqlite3_create_function16()] +** for additional information. +** +** These functions work very much like the [parameter binding] family of +** functions used to bind values to host parameters in prepared statements. +** Refer to the [SQL parameter] documentation for additional information. +** +** ^The sqlite3_result_blob() interface sets the result from +** an application-defined function to be the BLOB whose content is pointed +** to by the second parameter and which is N bytes long where N is the +** third parameter. +** +** ^The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N) +** interfaces set the result of the application-defined function to be +** a BLOB containing all zero bytes and N bytes in size. +** +** ^The sqlite3_result_double() interface sets the result from +** an application-defined function to be a floating point value specified +** by its 2nd argument. +** +** ^The sqlite3_result_error() and sqlite3_result_error16() functions +** cause the implemented SQL function to throw an exception. +** ^SQLite uses the string pointed to by the +** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() +** as the text of an error message. ^SQLite interprets the error +** message string from sqlite3_result_error() as UTF-8. ^SQLite +** interprets the string from sqlite3_result_error16() as UTF-16 using +** the same [byte-order determination rules] as [sqlite3_bind_text16()]. +** ^If the third parameter to sqlite3_result_error() +** or sqlite3_result_error16() is negative then SQLite takes as the error +** message all text up through the first zero character. +** ^If the third parameter to sqlite3_result_error() or +** sqlite3_result_error16() is non-negative then SQLite takes that many +** bytes (not characters) from the 2nd parameter as the error message. +** ^The sqlite3_result_error() and sqlite3_result_error16() +** routines make a private copy of the error message text before +** they return. Hence, the calling function can deallocate or +** modify the text after they return without harm. +** ^The sqlite3_result_error_code() function changes the error code +** returned by SQLite as a result of an error in a function. ^By default, +** the error code is SQLITE_ERROR. ^A subsequent call to sqlite3_result_error() +** or sqlite3_result_error16() resets the error code to SQLITE_ERROR. +** +** ^The sqlite3_result_error_toobig() interface causes SQLite to throw an +** error indicating that a string or BLOB is too long to represent. +** +** ^The sqlite3_result_error_nomem() interface causes SQLite to throw an +** error indicating that a memory allocation failed. +** +** ^The sqlite3_result_int() interface sets the return value +** of the application-defined function to be the 32-bit signed integer +** value given in the 2nd argument. +** ^The sqlite3_result_int64() interface sets the return value +** of the application-defined function to be the 64-bit signed integer +** value given in the 2nd argument. +** +** ^The sqlite3_result_null() interface sets the return value +** of the application-defined function to be NULL. +** +** ^The sqlite3_result_text(), sqlite3_result_text16(), +** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces +** set the return value of the application-defined function to be +** a text string which is represented as UTF-8, UTF-16 native byte order, +** UTF-16 little endian, or UTF-16 big endian, respectively. +** ^The sqlite3_result_text64() interface sets the return value of an +** application-defined function to be a text string in an encoding +** specified by the fifth (and last) parameter, which must be one +** of [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE]. +** ^SQLite takes the text result from the application from +** the 2nd parameter of the sqlite3_result_text* interfaces. +** ^If the 3rd parameter to any of the sqlite3_result_text* interfaces +** other than sqlite3_result_text64() is negative, then SQLite computes +** the string length itself by searching the 2nd parameter for the first +** zero character. +** ^If the 3rd parameter to the sqlite3_result_text* interfaces +** is non-negative, then as many bytes (not characters) of the text +** pointed to by the 2nd parameter are taken as the application-defined +** function result. If the 3rd parameter is non-negative, then it +** must be the byte offset into the string where the NUL terminator would +** appear if the string were NUL terminated. If any NUL characters occur +** in the string at a byte offset that is less than the value of the 3rd +** parameter, then the resulting string will contain embedded NULs and the +** result of expressions operating on strings with embedded NULs is undefined. +** ^If the 4th parameter to the sqlite3_result_text* interfaces +** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that +** function as the destructor on the text or BLOB result when it has +** finished using that result. +** ^If the 4th parameter to the sqlite3_result_text* interfaces or to +** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite +** assumes that the text or BLOB result is in constant space and does not +** copy the content of the parameter nor call a destructor on the content +** when it has finished using that result. +** ^If the 4th parameter to the sqlite3_result_text* interfaces +** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT +** then SQLite makes a copy of the result into space obtained +** from [sqlite3_malloc()] before it returns. +** +** ^For the sqlite3_result_text16(), sqlite3_result_text16le(), and +** sqlite3_result_text16be() routines, and for sqlite3_result_text64() +** when the encoding is not UTF8, if the input UTF16 begins with a +** byte-order mark (BOM, U+FEFF) then the BOM is removed from the +** string and the rest of the string is interpreted according to the +** byte-order specified by the BOM. ^The byte-order specified by +** the BOM at the beginning of the text overrides the byte-order +** specified by the interface procedure. ^So, for example, if +** sqlite3_result_text16le() is invoked with text that begins +** with bytes 0xfe, 0xff (a big-endian byte-order mark) then the +** first two bytes of input are skipped and the remaining input +** is interpreted as UTF16BE text. +** +** ^For UTF16 input text to the sqlite3_result_text16(), +** sqlite3_result_text16be(), sqlite3_result_text16le(), and +** sqlite3_result_text64() routines, if the text contains invalid +** UTF16 characters, the invalid characters might be converted +** into the unicode replacement character, U+FFFD. +** +** ^The sqlite3_result_value() interface sets the result of +** the application-defined function to be a copy of the +** [unprotected sqlite3_value] object specified by the 2nd parameter. ^The +** sqlite3_result_value() interface makes a copy of the [sqlite3_value] +** so that the [sqlite3_value] specified in the parameter may change or +** be deallocated after sqlite3_result_value() returns without harm. +** ^A [protected sqlite3_value] object may always be used where an +** [unprotected sqlite3_value] object is required, so either +** kind of [sqlite3_value] object can be used with this interface. +** +** ^The sqlite3_result_pointer(C,P,T,D) interface sets the result to an +** SQL NULL value, just like [sqlite3_result_null(C)], except that it +** also associates the host-language pointer P or type T with that +** NULL value such that the pointer can be retrieved within an +** [application-defined SQL function] using [sqlite3_value_pointer()]. +** ^If the D parameter is not NULL, then it is a pointer to a destructor +** for the P parameter. ^SQLite invokes D with P as its only argument +** when SQLite is finished with P. The T parameter should be a static +** string and preferably a string literal. The sqlite3_result_pointer() +** routine is part of the [pointer passing interface] added for SQLite 3.20.0. +** +** If these routines are called from within a different thread +** than the one containing the application-defined function that received +** the [sqlite3_context] pointer, the results are undefined. +*/ +SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); +SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*, + sqlite3_uint64,void(*)(void*)); +SQLITE_API void sqlite3_result_double(sqlite3_context*, double); +SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int); +SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int); +SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*); +SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*); +SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int); +SQLITE_API void sqlite3_result_int(sqlite3_context*, int); +SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); +SQLITE_API void sqlite3_result_null(sqlite3_context*); +SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); +SQLITE_API void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64, + void(*)(void*), unsigned char encoding); +SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); +SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); +SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); +SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); +SQLITE_API void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*)); +SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); +SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n); + + +/* +** CAPI3REF: Setting The Subtype Of An SQL Function +** METHOD: sqlite3_context +** +** The sqlite3_result_subtype(C,T) function causes the subtype of +** the result from the [application-defined SQL function] with +** [sqlite3_context] C to be the value T. Only the lower 8 bits +** of the subtype T are preserved in current versions of SQLite; +** higher order bits are discarded. +** The number of subtype bytes preserved by SQLite might increase +** in future releases of SQLite. +** +** Every [application-defined SQL function] that invokes this interface +** should include the [SQLITE_RESULT_SUBTYPE] property in its +** text encoding argument when the SQL function is +** [sqlite3_create_function|registered]. If the [SQLITE_RESULT_SUBTYPE] +** property is omitted from the function that invokes sqlite3_result_subtype(), +** then in some cases the sqlite3_result_subtype() might fail to set +** the result subtype. +** +** If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any +** SQL function that invokes the sqlite3_result_subtype() interface +** and that does not have the SQLITE_RESULT_SUBTYPE property will raise +** an error. Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1 +** by default. +*/ +SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int); + +/* +** CAPI3REF: Define New Collating Sequences +** METHOD: sqlite3 +** +** ^These functions add, remove, or modify a [collation] associated +** with the [database connection] specified as the first argument. +** +** ^The name of the collation is a UTF-8 string +** for sqlite3_create_collation() and sqlite3_create_collation_v2() +** and a UTF-16 string in native byte order for sqlite3_create_collation16(). +** ^Collation names that compare equal according to [sqlite3_strnicmp()] are +** considered to be the same name. +** +** ^(The third argument (eTextRep) must be one of the constants: +**
    +**
  • [SQLITE_UTF8], +**
  • [SQLITE_UTF16LE], +**
  • [SQLITE_UTF16BE], +**
  • [SQLITE_UTF16], or +**
  • [SQLITE_UTF16_ALIGNED]. +**
)^ +** ^The eTextRep argument determines the encoding of strings passed +** to the collating function callback, xCompare. +** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep +** force strings to be UTF16 with native byte order. +** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin +** on an even byte address. +** +** ^The fourth argument, pArg, is an application data pointer that is passed +** through as the first argument to the collating function callback. +** +** ^The fifth argument, xCompare, is a pointer to the collating function. +** ^Multiple collating functions can be registered using the same name but +** with different eTextRep parameters and SQLite will use whichever +** function requires the least amount of data transformation. +** ^If the xCompare argument is NULL then the collating function is +** deleted. ^When all collating functions having the same name are deleted, +** that collation is no longer usable. +** +** ^The collating function callback is invoked with a copy of the pArg +** application data pointer and with two strings in the encoding specified +** by the eTextRep argument. The two integer parameters to the collating +** function callback are the length of the two strings, in bytes. The collating +** function must return an integer that is negative, zero, or positive +** if the first string is less than, equal to, or greater than the second, +** respectively. A collating function must always return the same answer +** given the same inputs. If two or more collating functions are registered +** to the same collation name (using different eTextRep values) then all +** must give an equivalent answer when invoked with equivalent strings. +** The collating function must obey the following properties for all +** strings A, B, and C: +** +**
    +**
  1. If A==B then B==A. +**
  2. If A==B and B==C then A==C. +**
  3. If A<B THEN B>A. +**
  4. If A<B and B<C then A<C. +**
+** +** If a collating function fails any of the above constraints and that +** collating function is registered and used, then the behavior of SQLite +** is undefined. +** +** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation() +** with the addition that the xDestroy callback is invoked on pArg when +** the collating function is deleted. +** ^Collating functions are deleted when they are overridden by later +** calls to the collation creation functions or when the +** [database connection] is closed using [sqlite3_close()]. +** +** ^The xDestroy callback is not called if the +** sqlite3_create_collation_v2() function fails. Applications that invoke +** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should +** check the return code and dispose of the application data pointer +** themselves rather than expecting SQLite to deal with it for them. +** This is different from every other SQLite interface. The inconsistency +** is unfortunate but cannot be changed without breaking backwards +** compatibility. +** +** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()]. +*/ +SQLITE_API int sqlite3_create_collation( + sqlite3*, + const char *zName, + int eTextRep, + void *pArg, + int(*xCompare)(void*,int,const void*,int,const void*) +); +SQLITE_API int sqlite3_create_collation_v2( + sqlite3*, + const char *zName, + int eTextRep, + void *pArg, + int(*xCompare)(void*,int,const void*,int,const void*), + void(*xDestroy)(void*) +); +SQLITE_API int sqlite3_create_collation16( + sqlite3*, + const void *zName, + int eTextRep, + void *pArg, + int(*xCompare)(void*,int,const void*,int,const void*) +); + +/* +** CAPI3REF: Collation Needed Callbacks +** METHOD: sqlite3 +** +** ^To avoid having to register all collation sequences before a database +** can be used, a single callback function may be registered with the +** [database connection] to be invoked whenever an undefined collation +** sequence is required. +** +** ^If the function is registered using the sqlite3_collation_needed() API, +** then it is passed the names of undefined collation sequences as strings +** encoded in UTF-8. ^If sqlite3_collation_needed16() is used, +** the names are passed as UTF-16 in machine native byte order. +** ^A call to either function replaces the existing collation-needed callback. +** +** ^(When the callback is invoked, the first argument passed is a copy +** of the second argument to sqlite3_collation_needed() or +** sqlite3_collation_needed16(). The second argument is the database +** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE], +** or [SQLITE_UTF16LE], indicating the most desirable form of the collation +** sequence function required. The fourth parameter is the name of the +** required collation sequence.)^ +** +** The callback function should register the desired collation using +** [sqlite3_create_collation()], [sqlite3_create_collation16()], or +** [sqlite3_create_collation_v2()]. +*/ +SQLITE_API int sqlite3_collation_needed( + sqlite3*, + void*, + void(*)(void*,sqlite3*,int eTextRep,const char*) +); +SQLITE_API int sqlite3_collation_needed16( + sqlite3*, + void*, + void(*)(void*,sqlite3*,int eTextRep,const void*) +); + +#ifdef SQLITE_ENABLE_CEROD +/* +** Specify the activation key for a CEROD database. Unless +** activated, none of the CEROD routines will work. +*/ +SQLITE_API void sqlite3_activate_cerod( + const char *zPassPhrase /* Activation phrase */ +); +#endif + +/* +** CAPI3REF: Suspend Execution For A Short Time +** +** The sqlite3_sleep() function causes the current thread to suspend execution +** for at least a number of milliseconds specified in its parameter. +** +** If the operating system does not support sleep requests with +** millisecond time resolution, then the time will be rounded up to +** the nearest second. The number of milliseconds of sleep actually +** requested from the operating system is returned. +** +** ^SQLite implements this interface by calling the xSleep() +** method of the default [sqlite3_vfs] object. If the xSleep() method +** of the default VFS is not implemented correctly, or not implemented at +** all, then the behavior of sqlite3_sleep() may deviate from the description +** in the previous paragraphs. +** +** If a negative argument is passed to sqlite3_sleep() the results vary by +** VFS and operating system. Some system treat a negative argument as an +** instruction to sleep forever. Others understand it to mean do not sleep +** at all. ^In SQLite version 3.42.0 and later, a negative +** argument passed into sqlite3_sleep() is changed to zero before it is relayed +** down into the xSleep method of the VFS. +*/ +SQLITE_API int sqlite3_sleep(int); + +/* +** CAPI3REF: Name Of The Folder Holding Temporary Files +** +** ^(If this global variable is made to point to a string which is +** the name of a folder (a.k.a. directory), then all temporary files +** created by SQLite when using a built-in [sqlite3_vfs | VFS] +** will be placed in that directory.)^ ^If this variable +** is a NULL pointer, then SQLite performs a search for an appropriate +** temporary file directory. +** +** Applications are strongly discouraged from using this global variable. +** It is required to set a temporary folder on Windows Runtime (WinRT). +** But for all other platforms, it is highly recommended that applications +** neither read nor write this variable. This global variable is a relic +** that exists for backwards compatibility of legacy applications and should +** be avoided in new projects. +** +** It is not safe to read or modify this variable in more than one +** thread at a time. It is not safe to read or modify this variable +** if a [database connection] is being used at the same time in a separate +** thread. +** It is intended that this variable be set once +** as part of process initialization and before any SQLite interface +** routines have been called and that this variable remain unchanged +** thereafter. +** +** ^The [temp_store_directory pragma] may modify this variable and cause +** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, +** the [temp_store_directory pragma] always assumes that any string +** that this variable points to is held in memory obtained from +** [sqlite3_malloc] and the pragma may attempt to free that memory +** using [sqlite3_free]. +** Hence, if this variable is modified directly, either it should be +** made NULL or made to point to memory obtained from [sqlite3_malloc] +** or else the use of the [temp_store_directory pragma] should be avoided. +** Except when requested by the [temp_store_directory pragma], SQLite +** does not free the memory that sqlite3_temp_directory points to. If +** the application wants that memory to be freed, it must do +** so itself, taking care to only do so after all [database connection] +** objects have been destroyed. +** +** Note to Windows Runtime users: The temporary directory must be set +** prior to calling [sqlite3_open] or [sqlite3_open_v2]. Otherwise, various +** features that require the use of temporary files may fail. Here is an +** example of how to do this using C++ with the Windows Runtime: +** +**
+** LPCWSTR zPath = Windows::Storage::ApplicationData::Current->
+**       TemporaryFolder->Path->Data();
+** char zPathBuf[MAX_PATH + 1];
+** memset(zPathBuf, 0, sizeof(zPathBuf));
+** WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf),
+**       NULL, NULL);
+** sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf);
+** 
+*/ +SQLITE_API SQLITE_EXTERN char *sqlite3_temp_directory; + +/* +** CAPI3REF: Name Of The Folder Holding Database Files +** +** ^(If this global variable is made to point to a string which is +** the name of a folder (a.k.a. directory), then all database files +** specified with a relative pathname and created or accessed by +** SQLite when using a built-in windows [sqlite3_vfs | VFS] will be assumed +** to be relative to that directory.)^ ^If this variable is a NULL +** pointer, then SQLite assumes that all database files specified +** with a relative pathname are relative to the current directory +** for the process. Only the windows VFS makes use of this global +** variable; it is ignored by the unix VFS. +** +** Changing the value of this variable while a database connection is +** open can result in a corrupt database. +** +** It is not safe to read or modify this variable in more than one +** thread at a time. It is not safe to read or modify this variable +** if a [database connection] is being used at the same time in a separate +** thread. +** It is intended that this variable be set once +** as part of process initialization and before any SQLite interface +** routines have been called and that this variable remain unchanged +** thereafter. +** +** ^The [data_store_directory pragma] may modify this variable and cause +** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore, +** the [data_store_directory pragma] always assumes that any string +** that this variable points to is held in memory obtained from +** [sqlite3_malloc] and the pragma may attempt to free that memory +** using [sqlite3_free]. +** Hence, if this variable is modified directly, either it should be +** made NULL or made to point to memory obtained from [sqlite3_malloc] +** or else the use of the [data_store_directory pragma] should be avoided. +*/ +SQLITE_API SQLITE_EXTERN char *sqlite3_data_directory; + +/* +** CAPI3REF: Win32 Specific Interface +** +** These interfaces are available only on Windows. The +** [sqlite3_win32_set_directory] interface is used to set the value associated +** with the [sqlite3_temp_directory] or [sqlite3_data_directory] variable, to +** zValue, depending on the value of the type parameter. The zValue parameter +** should be NULL to cause the previous value to be freed via [sqlite3_free]; +** a non-NULL value will be copied into memory obtained from [sqlite3_malloc] +** prior to being used. The [sqlite3_win32_set_directory] interface returns +** [SQLITE_OK] to indicate success, [SQLITE_ERROR] if the type is unsupported, +** or [SQLITE_NOMEM] if memory could not be allocated. The value of the +** [sqlite3_data_directory] variable is intended to act as a replacement for +** the current directory on the sub-platforms of Win32 where that concept is +** not present, e.g. WinRT and UWP. The [sqlite3_win32_set_directory8] and +** [sqlite3_win32_set_directory16] interfaces behave exactly the same as the +** sqlite3_win32_set_directory interface except the string parameter must be +** UTF-8 or UTF-16, respectively. +*/ +SQLITE_API int sqlite3_win32_set_directory( + unsigned long type, /* Identifier for directory being set or reset */ + void *zValue /* New value for directory being set or reset */ +); +SQLITE_API int sqlite3_win32_set_directory8(unsigned long type, const char *zValue); +SQLITE_API int sqlite3_win32_set_directory16(unsigned long type, const void *zValue); + +/* +** CAPI3REF: Win32 Directory Types +** +** These macros are only available on Windows. They define the allowed values +** for the type argument to the [sqlite3_win32_set_directory] interface. +*/ +#define SQLITE_WIN32_DATA_DIRECTORY_TYPE 1 +#define SQLITE_WIN32_TEMP_DIRECTORY_TYPE 2 + +/* +** CAPI3REF: Test For Auto-Commit Mode +** KEYWORDS: {autocommit mode} +** METHOD: sqlite3 +** +** ^The sqlite3_get_autocommit() interface returns non-zero or +** zero if the given database connection is or is not in autocommit mode, +** respectively. ^Autocommit mode is on by default. +** ^Autocommit mode is disabled by a [BEGIN] statement. +** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK]. +** +** If certain kinds of errors occur on a statement within a multi-statement +** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR], +** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the +** transaction might be rolled back automatically. The only way to +** find out whether SQLite automatically rolled back the transaction after +** an error is to use this function. +** +** If another thread changes the autocommit status of the database +** connection while this routine is running, then the return value +** is undefined. +*/ +SQLITE_API int sqlite3_get_autocommit(sqlite3*); + +/* +** CAPI3REF: Find The Database Handle Of A Prepared Statement +** METHOD: sqlite3_stmt +** +** ^The sqlite3_db_handle interface returns the [database connection] handle +** to which a [prepared statement] belongs. ^The [database connection] +** returned by sqlite3_db_handle is the same [database connection] +** that was the first argument +** to the [sqlite3_prepare_v2()] call (or its variants) that was used to +** create the statement in the first place. +*/ +SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*); + +/* +** CAPI3REF: Return The Schema Name For A Database Connection +** METHOD: sqlite3 +** +** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name +** for the N-th database on database connection D, or a NULL pointer if N is +** out of range. An N value of 0 means the main database file. An N of 1 is +** the "temp" schema. Larger values of N correspond to various ATTACH-ed +** databases. +** +** Space to hold the string that is returned by sqlite3_db_name() is managed +** by SQLite itself. The string might be deallocated by any operation that +** changes the schema, including [ATTACH] or [DETACH] or calls to +** [sqlite3_serialize()] or [sqlite3_deserialize()], even operations that +** occur on a different thread. Applications that need to +** remember the string long-term should make their own copy. Applications that +** are accessing the same database connection simultaneously on multiple +** threads should mutex-protect calls to this API and should make their own +** private copy of the result prior to releasing the mutex. +*/ +SQLITE_API const char *sqlite3_db_name(sqlite3 *db, int N); + +/* +** CAPI3REF: Return The Filename For A Database Connection +** METHOD: sqlite3 +** +** ^The sqlite3_db_filename(D,N) interface returns a pointer to the filename +** associated with database N of connection D. +** ^If there is no attached database N on the database +** connection D, or if database N is a temporary or in-memory database, then +** this function will return either a NULL pointer or an empty string. +** +** ^The string value returned by this routine is owned and managed by +** the database connection. ^The value will be valid until the database N +** is [DETACH]-ed or until the database connection closes. +** +** ^The filename returned by this function is the output of the +** xFullPathname method of the [VFS]. ^In other words, the filename +** will be an absolute pathname, even if the filename used +** to open the database originally was a URI or relative pathname. +** +** If the filename pointer returned by this routine is not NULL, then it +** can be used as the filename input parameter to these routines: +**
    +**
  • [sqlite3_uri_parameter()] +**
  • [sqlite3_uri_boolean()] +**
  • [sqlite3_uri_int64()] +**
  • [sqlite3_filename_database()] +**
  • [sqlite3_filename_journal()] +**
  • [sqlite3_filename_wal()] +**
+*/ +SQLITE_API sqlite3_filename sqlite3_db_filename(sqlite3 *db, const char *zDbName); + +/* +** CAPI3REF: Determine if a database is read-only +** METHOD: sqlite3 +** +** ^The sqlite3_db_readonly(D,N) interface returns 1 if the database N +** of connection D is read-only, 0 if it is read/write, or -1 if N is not +** the name of a database on connection D. +*/ +SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); + +/* +** CAPI3REF: Determine the transaction state of a database +** METHOD: sqlite3 +** +** ^The sqlite3_txn_state(D,S) interface returns the current +** [transaction state] of schema S in database connection D. ^If S is NULL, +** then the highest transaction state of any schema on database connection D +** is returned. Transaction states are (in order of lowest to highest): +**
    +**
  1. SQLITE_TXN_NONE +**
  2. SQLITE_TXN_READ +**
  3. SQLITE_TXN_WRITE +**
+** ^If the S argument to sqlite3_txn_state(D,S) is not the name of +** a valid schema, then -1 is returned. +*/ +SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema); + +/* +** CAPI3REF: Allowed return values from sqlite3_txn_state() +** KEYWORDS: {transaction state} +** +** These constants define the current transaction state of a database file. +** ^The [sqlite3_txn_state(D,S)] interface returns one of these +** constants in order to describe the transaction state of schema S +** in [database connection] D. +** +**
+** [[SQLITE_TXN_NONE]]
SQLITE_TXN_NONE
+**
The SQLITE_TXN_NONE state means that no transaction is currently +** pending.
+** +** [[SQLITE_TXN_READ]]
SQLITE_TXN_READ
+**
The SQLITE_TXN_READ state means that the database is currently +** in a read transaction. Content has been read from the database file +** but nothing in the database file has changed. The transaction state +** will be advanced to SQLITE_TXN_WRITE if any changes occur and there are +** no other conflicting concurrent write transactions. The transaction +** state will revert to SQLITE_TXN_NONE following a [ROLLBACK] or +** [COMMIT].
+** +** [[SQLITE_TXN_WRITE]]
SQLITE_TXN_WRITE
+**
The SQLITE_TXN_WRITE state means that the database is currently +** in a write transaction. Content has been written to the database file +** but has not yet committed. The transaction state will change to +** SQLITE_TXN_NONE at the next [ROLLBACK] or [COMMIT].
+*/ +#define SQLITE_TXN_NONE 0 +#define SQLITE_TXN_READ 1 +#define SQLITE_TXN_WRITE 2 + +/* +** CAPI3REF: Find the next prepared statement +** METHOD: sqlite3 +** +** ^This interface returns a pointer to the next [prepared statement] after +** pStmt associated with the [database connection] pDb. ^If pStmt is NULL +** then this interface returns a pointer to the first prepared statement +** associated with the database connection pDb. ^If no prepared statement +** satisfies the conditions of this routine, it returns NULL. +** +** The [database connection] pointer D in a call to +** [sqlite3_next_stmt(D,S)] must refer to an open database +** connection and in particular must not be a NULL pointer. +*/ +SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt); + +/* +** CAPI3REF: Commit And Rollback Notification Callbacks +** METHOD: sqlite3 +** +** ^The sqlite3_commit_hook() interface registers a callback +** function to be invoked whenever a transaction is [COMMIT | committed]. +** ^Any callback set by a previous call to sqlite3_commit_hook() +** for the same database connection is overridden. +** ^The sqlite3_rollback_hook() interface registers a callback +** function to be invoked whenever a transaction is [ROLLBACK | rolled back]. +** ^Any callback set by a previous call to sqlite3_rollback_hook() +** for the same database connection is overridden. +** ^The pArg argument is passed through to the callback. +** ^If the callback on a commit hook function returns non-zero, +** then the commit is converted into a rollback. +** +** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions +** return the P argument from the previous call of the same function +** on the same [database connection] D, or NULL for +** the first call for each function on D. +** +** The commit and rollback hook callbacks are not reentrant. +** The callback implementation must not do anything that will modify +** the database connection that invoked the callback. Any actions +** to modify the database connection must be deferred until after the +** completion of the [sqlite3_step()] call that triggered the commit +** or rollback hook in the first place. +** Note that running any other SQL statements, including SELECT statements, +** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify +** the database connections for the meaning of "modify" in this paragraph. +** +** ^Registering a NULL function disables the callback. +** +** ^When the commit hook callback routine returns zero, the [COMMIT] +** operation is allowed to continue normally. ^If the commit hook +** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK]. +** ^The rollback hook is invoked on a rollback that results from a commit +** hook returning non-zero, just as it would be with any other rollback. +** +** ^For the purposes of this API, a transaction is said to have been +** rolled back if an explicit "ROLLBACK" statement is executed, or +** an error or constraint causes an implicit rollback to occur. +** ^The rollback callback is not invoked if a transaction is +** automatically rolled back because the database connection is closed. +** +** See also the [sqlite3_update_hook()] interface. +*/ +SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*); +SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); + +/* +** CAPI3REF: Autovacuum Compaction Amount Callback +** METHOD: sqlite3 +** +** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback +** function C that is invoked prior to each autovacuum of the database +** file. ^The callback is passed a copy of the generic data pointer (P), +** the schema-name of the attached database that is being autovacuumed, +** the size of the database file in pages, the number of free pages, +** and the number of bytes per page, respectively. The callback should +** return the number of free pages that should be removed by the +** autovacuum. ^If the callback returns zero, then no autovacuum happens. +** ^If the value returned is greater than or equal to the number of +** free pages, then a complete autovacuum happens. +** +**

^If there are multiple ATTACH-ed database files that are being +** modified as part of a transaction commit, then the autovacuum pages +** callback is invoked separately for each file. +** +**

The callback is not reentrant. The callback function should +** not attempt to invoke any other SQLite interface. If it does, bad +** things may happen, including segmentation faults and corrupt database +** files. The callback function should be a simple function that +** does some arithmetic on its input parameters and returns a result. +** +** ^The X parameter to sqlite3_autovacuum_pages(D,C,P,X) is an optional +** destructor for the P parameter. ^If X is not NULL, then X(P) is +** invoked whenever the database connection closes or when the callback +** is overwritten by another invocation of sqlite3_autovacuum_pages(). +** +**

^There is only one autovacuum pages callback per database connection. +** ^Each call to the sqlite3_autovacuum_pages() interface overrides all +** previous invocations for that database connection. ^If the callback +** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer, +** then the autovacuum steps callback is canceled. The return value +** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might +** be some other error code if something goes wrong. The current +** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other +** return codes might be added in future releases. +** +**

If no autovacuum pages callback is specified (the usual case) or +** a NULL pointer is provided for the callback, +** then the default behavior is to vacuum all free pages. So, in other +** words, the default behavior is the same as if the callback function +** were something like this: +** +**

+**     unsigned int demonstration_autovac_pages_callback(
+**       void *pClientData,
+**       const char *zSchema,
+**       unsigned int nDbPage,
+**       unsigned int nFreePage,
+**       unsigned int nBytePerPage
+**     ){
+**       return nFreePage;
+**     }
+** 
+*/ +SQLITE_API int sqlite3_autovacuum_pages( + sqlite3 *db, + unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int), + void*, + void(*)(void*) +); + + +/* +** CAPI3REF: Data Change Notification Callbacks +** METHOD: sqlite3 +** +** ^The sqlite3_update_hook() interface registers a callback function +** with the [database connection] identified by the first argument +** to be invoked whenever a row is updated, inserted or deleted in +** a [rowid table]. +** ^Any callback set by a previous call to this function +** for the same database connection is overridden. +** +** ^The second argument is a pointer to the function to invoke when a +** row is updated, inserted or deleted in a rowid table. +** ^The update hook is disabled by invoking sqlite3_update_hook() +** with a NULL pointer as the second parameter. +** ^The first argument to the callback is a copy of the third argument +** to sqlite3_update_hook(). +** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE], +** or [SQLITE_UPDATE], depending on the operation that caused the callback +** to be invoked. +** ^The third and fourth arguments to the callback contain pointers to the +** database and table name containing the affected row. +** ^The final callback parameter is the [rowid] of the row. +** ^In the case of an update, this is the [rowid] after the update takes place. +** +** ^(The update hook is not invoked when internal system tables are +** modified (i.e. sqlite_sequence).)^ +** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified. +** +** ^In the current implementation, the update hook +** is not invoked when conflicting rows are deleted because of an +** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook +** invoked when rows are deleted using the [truncate optimization]. +** The exceptions defined in this paragraph might change in a future +** release of SQLite. +** +** Whether the update hook is invoked before or after the +** corresponding change is currently unspecified and may differ +** depending on the type of change. Do not rely on the order of the +** hook call with regards to the final result of the operation which +** triggers the hook. +** +** The update hook implementation must not do anything that will modify +** the database connection that invoked the update hook. Any actions +** to modify the database connection must be deferred until after the +** completion of the [sqlite3_step()] call that triggered the update hook. +** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their +** database connections for the meaning of "modify" in this paragraph. +** +** ^The sqlite3_update_hook(D,C,P) function +** returns the P argument from the previous call +** on the same [database connection] D, or NULL for +** the first call on D. +** +** See also the [sqlite3_commit_hook()], [sqlite3_rollback_hook()], +** and [sqlite3_preupdate_hook()] interfaces. +*/ +SQLITE_API void *sqlite3_update_hook( + sqlite3*, + void(*)(void *,int ,char const *,char const *,sqlite3_int64), + void* +); + +/* +** CAPI3REF: Enable Or Disable Shared Pager Cache +** +** ^(This routine enables or disables the sharing of the database cache +** and schema data structures between [database connection | connections] +** to the same database. Sharing is enabled if the argument is true +** and disabled if the argument is false.)^ +** +** This interface is omitted if SQLite is compiled with +** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE] +** compile-time option is recommended because the +** [use of shared cache mode is discouraged]. +** +** ^Cache sharing is enabled and disabled for an entire process. +** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). +** In prior versions of SQLite, +** sharing was enabled or disabled for each thread separately. +** +** ^(The cache sharing mode set by this interface effects all subsequent +** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()]. +** Existing database connections continue to use the sharing mode +** that was in effect at the time they were opened.)^ +** +** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled +** successfully. An [error code] is returned otherwise.)^ +** +** ^Shared cache is disabled by default. It is recommended that it stay +** that way. In other words, do not use this routine. This interface +** continues to be provided for historical compatibility, but its use is +** discouraged. Any use of shared cache is discouraged. If shared cache +** must be used, it is recommended that shared cache only be enabled for +** individual database connections using the [sqlite3_open_v2()] interface +** with the [SQLITE_OPEN_SHAREDCACHE] flag. +** +** Note: This method is disabled on MacOS X 10.7 and iOS version 5.0 +** and will always return SQLITE_MISUSE. On those systems, +** shared cache mode should be enabled per-database connection via +** [sqlite3_open_v2()] with [SQLITE_OPEN_SHAREDCACHE]. +** +** This interface is threadsafe on processors where writing a +** 32-bit integer is atomic. +** +** See Also: [SQLite Shared-Cache Mode] +*/ +SQLITE_API int sqlite3_enable_shared_cache(int); + +/* +** CAPI3REF: Attempt To Free Heap Memory +** +** ^The sqlite3_release_memory() interface attempts to free N bytes +** of heap memory by deallocating non-essential memory allocations +** held by the database library. Memory used to cache database +** pages to improve performance is an example of non-essential memory. +** ^sqlite3_release_memory() returns the number of bytes actually freed, +** which might be more or less than the amount requested. +** ^The sqlite3_release_memory() routine is a no-op returning zero +** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT]. +** +** See also: [sqlite3_db_release_memory()] +*/ +SQLITE_API int sqlite3_release_memory(int); + +/* +** CAPI3REF: Free Memory Used By A Database Connection +** METHOD: sqlite3 +** +** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap +** memory as possible from database connection D. Unlike the +** [sqlite3_release_memory()] interface, this interface is in effect even +** when the [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is +** omitted. +** +** See also: [sqlite3_release_memory()] +*/ +SQLITE_API int sqlite3_db_release_memory(sqlite3*); + +/* +** CAPI3REF: Impose A Limit On Heap Size +** +** These interfaces impose limits on the amount of heap memory that will be +** used by all database connections within a single process. +** +** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the +** soft limit on the amount of heap memory that may be allocated by SQLite. +** ^SQLite strives to keep heap memory utilization below the soft heap +** limit by reducing the number of pages held in the page cache +** as heap memory usages approaches the limit. +** ^The soft heap limit is "soft" because even though SQLite strives to stay +** below the limit, it will exceed the limit rather than generate +** an [SQLITE_NOMEM] error. In other words, the soft heap limit +** is advisory only. +** +** ^The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of +** N bytes on the amount of memory that will be allocated. ^The +** sqlite3_hard_heap_limit64(N) interface is similar to +** sqlite3_soft_heap_limit64(N) except that memory allocations will fail +** when the hard heap limit is reached. +** +** ^The return value from both sqlite3_soft_heap_limit64() and +** sqlite3_hard_heap_limit64() is the size of +** the heap limit prior to the call, or negative in the case of an +** error. ^If the argument N is negative +** then no change is made to the heap limit. Hence, the current +** size of heap limits can be determined by invoking +** sqlite3_soft_heap_limit64(-1) or sqlite3_hard_heap_limit(-1). +** +** ^Setting the heap limits to zero disables the heap limiter mechanism. +** +** ^The soft heap limit may not be greater than the hard heap limit. +** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) +** is invoked with a value of N that is greater than the hard heap limit, +** the soft heap limit is set to the value of the hard heap limit. +** ^The soft heap limit is automatically enabled whenever the hard heap +** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and +** the soft heap limit is outside the range of 1..N, then the soft heap +** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the +** hard heap limit is enabled makes the soft heap limit equal to the +** hard heap limit. +** +** The memory allocation limits can also be adjusted using +** [PRAGMA soft_heap_limit] and [PRAGMA hard_heap_limit]. +** +** ^(The heap limits are not enforced in the current implementation +** if one or more of following conditions are true: +** +**
    +**
  • The limit value is set to zero. +**
  • Memory accounting is disabled using a combination of the +** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and +** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option. +**
  • An alternative page cache implementation is specified using +** [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...). +**
  • The page cache allocates from its own memory pool supplied +** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than +** from the heap. +**
)^ +** +** The circumstances under which SQLite will enforce the heap limits may +** change in future releases of SQLite. +*/ +SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N); +SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N); + +/* +** CAPI3REF: Deprecated Soft Heap Limit Interface +** DEPRECATED +** +** This is a deprecated version of the [sqlite3_soft_heap_limit64()] +** interface. This routine is provided for historical compatibility +** only. All new applications should use the +** [sqlite3_soft_heap_limit64()] interface rather than this one. +*/ +SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); + + +/* +** CAPI3REF: Extract Metadata About A Column Of A Table +** METHOD: sqlite3 +** +** ^(The sqlite3_table_column_metadata(X,D,T,C,....) routine returns +** information about column C of table T in database D +** on [database connection] X.)^ ^The sqlite3_table_column_metadata() +** interface returns SQLITE_OK and fills in the non-NULL pointers in +** the final five arguments with appropriate values if the specified +** column exists. ^The sqlite3_table_column_metadata() interface returns +** SQLITE_ERROR if the specified column does not exist. +** ^If the column-name parameter to sqlite3_table_column_metadata() is a +** NULL pointer, then this routine simply checks for the existence of the +** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it +** does not. If the table name parameter T in a call to +** sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is +** undefined behavior. +** +** ^The column is identified by the second, third and fourth parameters to +** this function. ^(The second parameter is either the name of the database +** (i.e. "main", "temp", or an attached database) containing the specified +** table or NULL.)^ ^If it is NULL, then all attached databases are searched +** for the table using the same algorithm used by the database engine to +** resolve unqualified table references. +** +** ^The third and fourth parameters to this function are the table and column +** name of the desired column, respectively. +** +** ^Metadata is returned by writing to the memory locations passed as the 5th +** and subsequent parameters to this function. ^Any of these arguments may be +** NULL, in which case the corresponding element of metadata is omitted. +** +** ^(
+** +**
Parameter Output
Type
Description +** +**
5th const char* Data type +**
6th const char* Name of default collation sequence +**
7th int True if column has a NOT NULL constraint +**
8th int True if column is part of the PRIMARY KEY +**
9th int True if column is [AUTOINCREMENT] +**
+**
)^ +** +** ^The memory pointed to by the character pointers returned for the +** declaration type and collation sequence is valid until the next +** call to any SQLite API function. +** +** ^If the specified table is actually a view, an [error code] is returned. +** +** ^If the specified column is "rowid", "oid" or "_rowid_" and the table +** is not a [WITHOUT ROWID] table and an +** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output +** parameters are set for the explicitly declared column. ^(If there is no +** [INTEGER PRIMARY KEY] column, then the outputs +** for the [rowid] are set as follows: +** +**
+**     data type: "INTEGER"
+**     collation sequence: "BINARY"
+**     not null: 0
+**     primary key: 1
+**     auto increment: 0
+** 
)^ +** +** ^This function causes all database schemas to be read from disk and +** parsed, if that has not already been done, and returns an error if +** any errors are encountered while loading the schema. +*/ +SQLITE_API int sqlite3_table_column_metadata( + sqlite3 *db, /* Connection handle */ + const char *zDbName, /* Database name or NULL */ + const char *zTableName, /* Table name */ + const char *zColumnName, /* Column name */ + char const **pzDataType, /* OUTPUT: Declared data type */ + char const **pzCollSeq, /* OUTPUT: Collation sequence name */ + int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ + int *pPrimaryKey, /* OUTPUT: True if column part of PK */ + int *pAutoinc /* OUTPUT: True if column is auto-increment */ +); + +/* +** CAPI3REF: Load An Extension +** METHOD: sqlite3 +** +** ^This interface loads an SQLite extension library from the named file. +** +** ^The sqlite3_load_extension() interface attempts to load an +** [SQLite extension] library contained in the file zFile. If +** the file cannot be loaded directly, attempts are made to load +** with various operating-system specific extensions added. +** So for example, if "samplelib" cannot be loaded, then names like +** "samplelib.so" or "samplelib.dylib" or "samplelib.dll" might +** be tried also. +** +** ^The entry point is zProc. +** ^(zProc may be 0, in which case SQLite will try to come up with an +** entry point name on its own. It first tries "sqlite3_extension_init". +** If that does not work, it constructs a name "sqlite3_X_init" where +** X consists of the lower-case equivalent of all ASCII alphabetic +** characters in the filename from the last "/" to the first following +** "." and omitting any initial "lib".)^ +** ^The sqlite3_load_extension() interface returns +** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong. +** ^If an error occurs and pzErrMsg is not 0, then the +** [sqlite3_load_extension()] interface shall attempt to +** fill *pzErrMsg with error message text stored in memory +** obtained from [sqlite3_malloc()]. The calling function +** should free this memory by calling [sqlite3_free()]. +** +** ^Extension loading must be enabled using +** [sqlite3_enable_load_extension()] or +** [sqlite3_db_config](db,[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION],1,NULL) +** prior to calling this API, +** otherwise an error will be returned. +** +** Security warning: It is recommended that the +** [SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION] method be used to enable only this +** interface. The use of the [sqlite3_enable_load_extension()] interface +** should be avoided. This will keep the SQL function [load_extension()] +** disabled and prevent SQL injections from giving attackers +** access to extension loading capabilities. +** +** See also the [load_extension() SQL function]. +*/ +SQLITE_API int sqlite3_load_extension( + sqlite3 *db, /* Load the extension into this database connection */ + const char *zFile, /* Name of the shared library containing extension */ + const char *zProc, /* Entry point. Derived from zFile if 0 */ + char **pzErrMsg /* Put error message here if not 0 */ +); + +/* +** CAPI3REF: Enable Or Disable Extension Loading +** METHOD: sqlite3 +** +** ^So as not to open security holes in older applications that are +** unprepared to deal with [extension loading], and as a means of disabling +** [extension loading] while evaluating user-entered SQL, the following API +** is provided to turn the [sqlite3_load_extension()] mechanism on and off. +** +** ^Extension loading is off by default. +** ^Call the sqlite3_enable_load_extension() routine with onoff==1 +** to turn extension loading on and call it with onoff==0 to turn +** it back off again. +** +** ^This interface enables or disables both the C-API +** [sqlite3_load_extension()] and the SQL function [load_extension()]. +** ^(Use [sqlite3_db_config](db,[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION],..) +** to enable or disable only the C-API.)^ +** +** Security warning: It is recommended that extension loading +** be enabled using the [SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION] method +** rather than this interface, so the [load_extension()] SQL function +** remains disabled. This will prevent SQL injections from giving attackers +** access to extension loading capabilities. +*/ +SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff); + +/* +** CAPI3REF: Automatically Load Statically Linked Extensions +** +** ^This interface causes the xEntryPoint() function to be invoked for +** each new [database connection] that is created. The idea here is that +** xEntryPoint() is the entry point for a statically linked [SQLite extension] +** that is to be automatically loaded into all new database connections. +** +** ^(Even though the function prototype shows that xEntryPoint() takes +** no arguments and returns void, SQLite invokes xEntryPoint() with three +** arguments and expects an integer result as if the signature of the +** entry point were as follows: +** +**
+**    int xEntryPoint(
+**      sqlite3 *db,
+**      const char **pzErrMsg,
+**      const struct sqlite3_api_routines *pThunk
+**    );
+** 
)^ +** +** If the xEntryPoint routine encounters an error, it should make *pzErrMsg +** point to an appropriate error message (obtained from [sqlite3_mprintf()]) +** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg +** is NULL before calling the xEntryPoint(). ^SQLite will invoke +** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any +** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()], +** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail. +** +** ^Calling sqlite3_auto_extension(X) with an entry point X that is already +** on the list of automatic extensions is a harmless no-op. ^No entry point +** will be called more than once for each database connection that is opened. +** +** See also: [sqlite3_reset_auto_extension()] +** and [sqlite3_cancel_auto_extension()] +*/ +SQLITE_API int sqlite3_auto_extension(void(*xEntryPoint)(void)); + +/* +** CAPI3REF: Cancel Automatic Extension Loading +** +** ^The [sqlite3_cancel_auto_extension(X)] interface unregisters the +** initialization routine X that was registered using a prior call to +** [sqlite3_auto_extension(X)]. ^The [sqlite3_cancel_auto_extension(X)] +** routine returns 1 if initialization routine X was successfully +** unregistered and it returns 0 if X was not on the list of initialization +** routines. +*/ +SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void)); + +/* +** CAPI3REF: Reset Automatic Extension Loading +** +** ^This interface disables all automatic extensions previously +** registered using [sqlite3_auto_extension()]. +*/ +SQLITE_API void sqlite3_reset_auto_extension(void); + +/* +** Structures used by the virtual table interface +*/ +typedef struct sqlite3_vtab sqlite3_vtab; +typedef struct sqlite3_index_info sqlite3_index_info; +typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor; +typedef struct sqlite3_module sqlite3_module; + +/* +** CAPI3REF: Virtual Table Object +** KEYWORDS: sqlite3_module {virtual table module} +** +** This structure, sometimes called a "virtual table module", +** defines the implementation of a [virtual table]. +** This structure consists mostly of methods for the module. +** +** ^A virtual table module is created by filling in a persistent +** instance of this structure and passing a pointer to that instance +** to [sqlite3_create_module()] or [sqlite3_create_module_v2()]. +** ^The registration remains valid until it is replaced by a different +** module or until the [database connection] closes. The content +** of this structure must not change while it is registered with +** any database connection. +*/ +struct sqlite3_module { + int iVersion; + int (*xCreate)(sqlite3*, void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVTab, char**); + int (*xConnect)(sqlite3*, void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVTab, char**); + int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*); + int (*xDisconnect)(sqlite3_vtab *pVTab); + int (*xDestroy)(sqlite3_vtab *pVTab); + int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor); + int (*xClose)(sqlite3_vtab_cursor*); + int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr, + int argc, sqlite3_value **argv); + int (*xNext)(sqlite3_vtab_cursor*); + int (*xEof)(sqlite3_vtab_cursor*); + int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int); + int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid); + int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *); + int (*xBegin)(sqlite3_vtab *pVTab); + int (*xSync)(sqlite3_vtab *pVTab); + int (*xCommit)(sqlite3_vtab *pVTab); + int (*xRollback)(sqlite3_vtab *pVTab); + int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName, + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), + void **ppArg); + int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); + /* The methods above are in version 1 of the sqlite_module object. Those + ** below are for version 2 and greater. */ + int (*xSavepoint)(sqlite3_vtab *pVTab, int); + int (*xRelease)(sqlite3_vtab *pVTab, int); + int (*xRollbackTo)(sqlite3_vtab *pVTab, int); + /* The methods above are in versions 1 and 2 of the sqlite_module object. + ** Those below are for version 3 and greater. */ + int (*xShadowName)(const char*); + /* The methods above are in versions 1 through 3 of the sqlite_module object. + ** Those below are for version 4 and greater. */ + int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema, + const char *zTabName, int mFlags, char **pzErr); +}; + +/* +** CAPI3REF: Virtual Table Indexing Information +** KEYWORDS: sqlite3_index_info +** +** The sqlite3_index_info structure and its substructures is used as part +** of the [virtual table] interface to +** pass information into and receive the reply from the [xBestIndex] +** method of a [virtual table module]. The fields under **Inputs** are the +** inputs to xBestIndex and are read-only. xBestIndex inserts its +** results into the **Outputs** fields. +** +** ^(The aConstraint[] array records WHERE clause constraints of the form: +** +**
column OP expr
+** +** where OP is =, <, <=, >, or >=.)^ ^(The particular operator is +** stored in aConstraint[].op using one of the +** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^ +** ^(The index of the column is stored in +** aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the +** expr on the right-hand side can be evaluated (and thus the constraint +** is usable) and false if it cannot.)^ +** +** ^The optimizer automatically inverts terms of the form "expr OP column" +** and makes other simplifications to the WHERE clause in an attempt to +** get as many WHERE clause terms into the form shown above as possible. +** ^The aConstraint[] array only reports WHERE clause terms that are +** relevant to the particular virtual table being queried. +** +** ^Information about the ORDER BY clause is stored in aOrderBy[]. +** ^Each term of aOrderBy records a column of the ORDER BY clause. +** +** The colUsed field indicates which columns of the virtual table may be +** required by the current scan. Virtual table columns are numbered from +** zero in the order in which they appear within the CREATE TABLE statement +** passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62), +** the corresponding bit is set within the colUsed mask if the column may be +** required by SQLite. If the table has at least 64 columns and any column +** to the right of the first 63 is required, then bit 63 of colUsed is also +** set. In other words, column iCol may be required if the expression +** (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to +** non-zero. +** +** The [xBestIndex] method must fill aConstraintUsage[] with information +** about what parameters to pass to xFilter. ^If argvIndex>0 then +** the right-hand side of the corresponding aConstraint[] is evaluated +** and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit +** is true, then the constraint is assumed to be fully handled by the +** virtual table and might not be checked again by the byte code.)^ ^(The +** aConstraintUsage[].omit flag is an optimization hint. When the omit flag +** is left in its default setting of false, the constraint will always be +** checked separately in byte code. If the omit flag is changed to true, then +** the constraint may or may not be checked in byte code. In other words, +** when the omit flag is true there is no guarantee that the constraint will +** not be checked again using byte code.)^ +** +** ^The idxNum and idxStr values are recorded and passed into the +** [xFilter] method. +** ^[sqlite3_free()] is used to free idxStr if and only if +** needToFreeIdxStr is true. +** +** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in +** the correct order to satisfy the ORDER BY clause so that no separate +** sorting step is required. +** +** ^The estimatedCost value is an estimate of the cost of a particular +** strategy. A cost of N indicates that the cost of the strategy is similar +** to a linear scan of an SQLite table with N rows. A cost of log(N) +** indicates that the expense of the operation is similar to that of a +** binary search on a unique indexed field of an SQLite table with N rows. +** +** ^The estimatedRows value is an estimate of the number of rows that +** will be returned by the strategy. +** +** The xBestIndex method may optionally populate the idxFlags field with a +** mask of SQLITE_INDEX_SCAN_* flags. One such flag is +** [SQLITE_INDEX_SCAN_HEX], which if set causes the [EXPLAIN QUERY PLAN] +** output to show the idxNum as hex instead of as decimal. Another flag is +** SQLITE_INDEX_SCAN_UNIQUE, which if set indicates that the query plan will +** return at most one row. +** +** Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then +** SQLite also assumes that if a call to the xUpdate() method is made as +** part of the same statement to delete or update a virtual table row and the +** implementation returns SQLITE_CONSTRAINT, then there is no need to rollback +** any database changes. In other words, if the xUpdate() returns +** SQLITE_CONSTRAINT, the database contents must be exactly as they were +** before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not +** set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by +** the xUpdate method are automatically rolled back by SQLite. +** +** IMPORTANT: The estimatedRows field was added to the sqlite3_index_info +** structure for SQLite [version 3.8.2] ([dateof:3.8.2]). +** If a virtual table extension is +** used with an SQLite version earlier than 3.8.2, the results of attempting +** to read or write the estimatedRows field are undefined (but are likely +** to include crashing the application). The estimatedRows field should +** therefore only be used if [sqlite3_libversion_number()] returns a +** value greater than or equal to 3008002. Similarly, the idxFlags field +** was added for [version 3.9.0] ([dateof:3.9.0]). +** It may therefore only be used if +** sqlite3_libversion_number() returns a value greater than or equal to +** 3009000. +*/ +struct sqlite3_index_info { + /* Inputs */ + int nConstraint; /* Number of entries in aConstraint */ + struct sqlite3_index_constraint { + int iColumn; /* Column constrained. -1 for ROWID */ + unsigned char op; /* Constraint operator */ + unsigned char usable; /* True if this constraint is usable */ + int iTermOffset; /* Used internally - xBestIndex should ignore */ + } *aConstraint; /* Table of WHERE clause constraints */ + int nOrderBy; /* Number of terms in the ORDER BY clause */ + struct sqlite3_index_orderby { + int iColumn; /* Column number */ + unsigned char desc; /* True for DESC. False for ASC. */ + } *aOrderBy; /* The ORDER BY clause */ + /* Outputs */ + struct sqlite3_index_constraint_usage { + int argvIndex; /* if >0, constraint is part of argv to xFilter */ + unsigned char omit; /* Do not code a test for this constraint */ + } *aConstraintUsage; + int idxNum; /* Number used to identify the index */ + char *idxStr; /* String, possibly obtained from sqlite3_malloc */ + int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */ + int orderByConsumed; /* True if output is already ordered */ + double estimatedCost; /* Estimated cost of using this index */ + /* Fields below are only available in SQLite 3.8.2 and later */ + sqlite3_int64 estimatedRows; /* Estimated number of rows returned */ + /* Fields below are only available in SQLite 3.9.0 and later */ + int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */ + /* Fields below are only available in SQLite 3.10.0 and later */ + sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */ +}; + +/* +** CAPI3REF: Virtual Table Scan Flags +** +** Virtual table implementations are allowed to set the +** [sqlite3_index_info].idxFlags field to some combination of +** these bits. +*/ +#define SQLITE_INDEX_SCAN_UNIQUE 0x00000001 /* Scan visits at most 1 row */ +#define SQLITE_INDEX_SCAN_HEX 0x00000002 /* Display idxNum as hex */ + /* in EXPLAIN QUERY PLAN */ + +/* +** CAPI3REF: Virtual Table Constraint Operator Codes +** +** These macros define the allowed values for the +** [sqlite3_index_info].aConstraint[].op field. Each value represents +** an operator that is part of a constraint term in the WHERE clause of +** a query that uses a [virtual table]. +** +** ^The left-hand operand of the operator is given by the corresponding +** aConstraint[].iColumn field. ^An iColumn of -1 indicates the left-hand +** operand is the rowid. +** The SQLITE_INDEX_CONSTRAINT_LIMIT and SQLITE_INDEX_CONSTRAINT_OFFSET +** operators have no left-hand operand, and so for those operators the +** corresponding aConstraint[].iColumn is meaningless and should not be +** used. +** +** All operator values from SQLITE_INDEX_CONSTRAINT_FUNCTION through +** value 255 are reserved to represent functions that are overloaded +** by the [xFindFunction|xFindFunction method] of the virtual table +** implementation. +** +** The right-hand operands for each constraint might be accessible using +** the [sqlite3_vtab_rhs_value()] interface. Usually the right-hand +** operand is only available if it appears as a single constant literal +** in the input SQL. If the right-hand operand is another column or an +** expression (even a constant expression) or a parameter, then the +** sqlite3_vtab_rhs_value() probably will not be able to extract it. +** ^The SQLITE_INDEX_CONSTRAINT_ISNULL and +** SQLITE_INDEX_CONSTRAINT_ISNOTNULL operators have no right-hand operand +** and hence calls to sqlite3_vtab_rhs_value() for those operators will +** always return SQLITE_NOTFOUND. +** +** The collating sequence to be used for comparison can be found using +** the [sqlite3_vtab_collation()] interface. For most real-world virtual +** tables, the collating sequence of constraints does not matter (for example +** because the constraints are numeric) and so the sqlite3_vtab_collation() +** interface is not commonly needed. +*/ +#define SQLITE_INDEX_CONSTRAINT_EQ 2 +#define SQLITE_INDEX_CONSTRAINT_GT 4 +#define SQLITE_INDEX_CONSTRAINT_LE 8 +#define SQLITE_INDEX_CONSTRAINT_LT 16 +#define SQLITE_INDEX_CONSTRAINT_GE 32 +#define SQLITE_INDEX_CONSTRAINT_MATCH 64 +#define SQLITE_INDEX_CONSTRAINT_LIKE 65 +#define SQLITE_INDEX_CONSTRAINT_GLOB 66 +#define SQLITE_INDEX_CONSTRAINT_REGEXP 67 +#define SQLITE_INDEX_CONSTRAINT_NE 68 +#define SQLITE_INDEX_CONSTRAINT_ISNOT 69 +#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 +#define SQLITE_INDEX_CONSTRAINT_ISNULL 71 +#define SQLITE_INDEX_CONSTRAINT_IS 72 +#define SQLITE_INDEX_CONSTRAINT_LIMIT 73 +#define SQLITE_INDEX_CONSTRAINT_OFFSET 74 +#define SQLITE_INDEX_CONSTRAINT_FUNCTION 150 + +/* +** CAPI3REF: Register A Virtual Table Implementation +** METHOD: sqlite3 +** +** ^These routines are used to register a new [virtual table module] name. +** ^Module names must be registered before +** creating a new [virtual table] using the module and before using a +** preexisting [virtual table] for the module. +** +** ^The module name is registered on the [database connection] specified +** by the first parameter. ^The name of the module is given by the +** second parameter. ^The third parameter is a pointer to +** the implementation of the [virtual table module]. ^The fourth +** parameter is an arbitrary client data pointer that is passed through +** into the [xCreate] and [xConnect] methods of the virtual table module +** when a new virtual table is being created or reinitialized. +** +** ^The sqlite3_create_module_v2() interface has a fifth parameter which +** is a pointer to a destructor for the pClientData. ^SQLite will +** invoke the destructor function (if it is not NULL) when SQLite +** no longer needs the pClientData pointer. ^The destructor will also +** be invoked if the call to sqlite3_create_module_v2() fails. +** ^The sqlite3_create_module() +** interface is equivalent to sqlite3_create_module_v2() with a NULL +** destructor. +** +** ^If the third parameter (the pointer to the sqlite3_module object) is +** NULL then no new module is created and any existing modules with the +** same name are dropped. +** +** See also: [sqlite3_drop_modules()] +*/ +SQLITE_API int sqlite3_create_module( + sqlite3 *db, /* SQLite connection to register module with */ + const char *zName, /* Name of the module */ + const sqlite3_module *p, /* Methods for the module */ + void *pClientData /* Client data for xCreate/xConnect */ +); +SQLITE_API int sqlite3_create_module_v2( + sqlite3 *db, /* SQLite connection to register module with */ + const char *zName, /* Name of the module */ + const sqlite3_module *p, /* Methods for the module */ + void *pClientData, /* Client data for xCreate/xConnect */ + void(*xDestroy)(void*) /* Module destructor function */ +); + +/* +** CAPI3REF: Remove Unnecessary Virtual Table Implementations +** METHOD: sqlite3 +** +** ^The sqlite3_drop_modules(D,L) interface removes all virtual +** table modules from database connection D except those named on list L. +** The L parameter must be either NULL or a pointer to an array of pointers +** to strings where the array is terminated by a single NULL pointer. +** ^If the L parameter is NULL, then all virtual table modules are removed. +** +** See also: [sqlite3_create_module()] +*/ +SQLITE_API int sqlite3_drop_modules( + sqlite3 *db, /* Remove modules from this connection */ + const char **azKeep /* Except, do not remove the ones named here */ +); + +/* +** CAPI3REF: Virtual Table Instance Object +** KEYWORDS: sqlite3_vtab +** +** Every [virtual table module] implementation uses a subclass +** of this object to describe a particular instance +** of the [virtual table]. Each subclass will +** be tailored to the specific needs of the module implementation. +** The purpose of this superclass is to define certain fields that are +** common to all module implementations. +** +** ^Virtual tables methods can set an error message by assigning a +** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should +** take care that any prior string is freed by a call to [sqlite3_free()] +** prior to assigning a new string to zErrMsg. ^After the error message +** is delivered up to the client application, the string will be automatically +** freed by sqlite3_free() and the zErrMsg field will be zeroed. +*/ +struct sqlite3_vtab { + const sqlite3_module *pModule; /* The module for this virtual table */ + int nRef; /* Number of open cursors */ + char *zErrMsg; /* Error message from sqlite3_mprintf() */ + /* Virtual table implementations will typically add additional fields */ +}; + +/* +** CAPI3REF: Virtual Table Cursor Object +** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor} +** +** Every [virtual table module] implementation uses a subclass of the +** following structure to describe cursors that point into the +** [virtual table] and are used +** to loop through the virtual table. Cursors are created using the +** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed +** by the [sqlite3_module.xClose | xClose] method. Cursors are used +** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods +** of the module. Each module implementation will define +** the content of a cursor structure to suit its own needs. +** +** This superclass exists in order to define fields of the cursor that +** are common to all implementations. +*/ +struct sqlite3_vtab_cursor { + sqlite3_vtab *pVtab; /* Virtual table of this cursor */ + /* Virtual table implementations will typically add additional fields */ +}; + +/* +** CAPI3REF: Declare The Schema Of A Virtual Table +** +** ^The [xCreate] and [xConnect] methods of a +** [virtual table module] call this interface +** to declare the format (the names and datatypes of the columns) of +** the virtual tables they implement. +*/ +SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); + +/* +** CAPI3REF: Overload A Function For A Virtual Table +** METHOD: sqlite3 +** +** ^(Virtual tables can provide alternative implementations of functions +** using the [xFindFunction] method of the [virtual table module]. +** But global versions of those functions +** must exist in order to be overloaded.)^ +** +** ^(This API makes sure a global version of a function with a particular +** name and number of parameters exists. If no such function exists +** before this API is called, a new function is created.)^ ^The implementation +** of the new function always causes an exception to be thrown. So +** the new function is not good for anything by itself. Its only +** purpose is to be a placeholder function that can be overloaded +** by a [virtual table]. +*/ +SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); + +/* +** CAPI3REF: A Handle To An Open BLOB +** KEYWORDS: {BLOB handle} {BLOB handles} +** +** An instance of this object represents an open BLOB on which +** [sqlite3_blob_open | incremental BLOB I/O] can be performed. +** ^Objects of this type are created by [sqlite3_blob_open()] +** and destroyed by [sqlite3_blob_close()]. +** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces +** can be used to read or write small subsections of the BLOB. +** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes. +*/ +typedef struct sqlite3_blob sqlite3_blob; + +/* +** CAPI3REF: Open A BLOB For Incremental I/O +** METHOD: sqlite3 +** CONSTRUCTOR: sqlite3_blob +** +** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located +** in row iRow, column zColumn, table zTable in database zDb; +** in other words, the same BLOB that would be selected by: +** +**
+**     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
+** 
)^ +** +** ^(Parameter zDb is not the filename that contains the database, but +** rather the symbolic name of the database. For attached databases, this is +** the name that appears after the AS keyword in the [ATTACH] statement. +** For the main database file, the database name is "main". For TEMP +** tables, the database name is "temp".)^ +** +** ^If the flags parameter is non-zero, then the BLOB is opened for read +** and write access. ^If the flags parameter is zero, the BLOB is opened for +** read-only access. +** +** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored +** in *ppBlob. Otherwise an [error code] is returned and, unless the error +** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided +** the API is not misused, it is always safe to call [sqlite3_blob_close()] +** on *ppBlob after this function returns. +** +** This function fails with SQLITE_ERROR if any of the following are true: +**
    +**
  • ^(Database zDb does not exist)^, +**
  • ^(Table zTable does not exist within database zDb)^, +**
  • ^(Table zTable is a WITHOUT ROWID table)^, +**
  • ^(Column zColumn does not exist)^, +**
  • ^(Row iRow is not present in the table)^, +**
  • ^(The specified column of row iRow contains a value that is not +** a TEXT or BLOB value)^, +**
  • ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE +** constraint and the blob is being opened for read/write access)^, +**
  • ^([foreign key constraints | Foreign key constraints] are enabled, +** column zColumn is part of a [child key] definition and the blob is +** being opened for read/write access)^. +**
+** +** ^Unless it returns SQLITE_MISUSE, this function sets the +** [database connection] error code and message accessible via +** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. +** +** A BLOB referenced by sqlite3_blob_open() may be read using the +** [sqlite3_blob_read()] interface and modified by using +** [sqlite3_blob_write()]. The [BLOB handle] can be moved to a +** different row of the same table using the [sqlite3_blob_reopen()] +** interface. However, the column, table, or database of a [BLOB handle] +** cannot be changed after the [BLOB handle] is opened. +** +** ^(If the row that a BLOB handle points to is modified by an +** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects +** then the BLOB handle is marked as "expired". +** This is true if any column of the row is changed, even a column +** other than the one the BLOB handle is open on.)^ +** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for +** an expired BLOB handle fail with a return code of [SQLITE_ABORT]. +** ^(Changes written into a BLOB prior to the BLOB expiring are not +** rolled back by the expiration of the BLOB. Such changes will eventually +** commit if the transaction continues to completion.)^ +** +** ^Use the [sqlite3_blob_bytes()] interface to determine the size of +** the opened blob. ^The size of a blob may not be changed by this +** interface. Use the [UPDATE] SQL command to change the size of a +** blob. +** +** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces +** and the built-in [zeroblob] SQL function may be used to create a +** zero-filled blob to read or write using the incremental-blob interface. +** +** To avoid a resource leak, every open [BLOB handle] should eventually +** be released by a call to [sqlite3_blob_close()]. +** +** See also: [sqlite3_blob_close()], +** [sqlite3_blob_reopen()], [sqlite3_blob_read()], +** [sqlite3_blob_bytes()], [sqlite3_blob_write()]. +*/ +SQLITE_API int sqlite3_blob_open( + sqlite3*, + const char *zDb, + const char *zTable, + const char *zColumn, + sqlite3_int64 iRow, + int flags, + sqlite3_blob **ppBlob +); + +/* +** CAPI3REF: Move a BLOB Handle to a New Row +** METHOD: sqlite3_blob +** +** ^This function is used to move an existing [BLOB handle] so that it points +** to a different row of the same database table. ^The new row is identified +** by the rowid value passed as the second argument. Only the row can be +** changed. ^The database, table and column on which the blob handle is open +** remain the same. Moving an existing [BLOB handle] to a new row is +** faster than closing the existing handle and opening a new one. +** +** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - +** it must exist and there must be either a blob or text value stored in +** the nominated column.)^ ^If the new row is not present in the table, or if +** it does not contain a blob or text value, or if another error occurs, an +** SQLite error code is returned and the blob handle is considered aborted. +** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or +** [sqlite3_blob_reopen()] on an aborted blob handle immediately return +** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle +** always returns zero. +** +** ^This function sets the database handle error code and message. +*/ +SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); + +/* +** CAPI3REF: Close A BLOB Handle +** DESTRUCTOR: sqlite3_blob +** +** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed +** unconditionally. Even if this routine returns an error code, the +** handle is still closed.)^ +** +** ^If the blob handle being closed was opened for read-write access, and if +** the database is in auto-commit mode and there are no other open read-write +** blob handles or active write statements, the current transaction is +** committed. ^If an error occurs while committing the transaction, an error +** code is returned and the transaction rolled back. +** +** Calling this function with an argument that is not a NULL pointer or an +** open blob handle results in undefined behavior. ^Calling this routine +** with a null pointer (such as would be returned by a failed call to +** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function +** is passed a valid open blob handle, the values returned by the +** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning. +*/ +SQLITE_API int sqlite3_blob_close(sqlite3_blob *); + +/* +** CAPI3REF: Return The Size Of An Open BLOB +** METHOD: sqlite3_blob +** +** ^Returns the size in bytes of the BLOB accessible via the +** successfully opened [BLOB handle] in its only argument. ^The +** incremental blob I/O routines can only read or overwrite existing +** blob content; they cannot change the size of a blob. +** +** This routine only works on a [BLOB handle] which has been created +** by a prior successful call to [sqlite3_blob_open()] and which has not +** been closed by [sqlite3_blob_close()]. Passing any other pointer in +** to this routine results in undefined and probably undesirable behavior. +*/ +SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *); + +/* +** CAPI3REF: Read Data From A BLOB Incrementally +** METHOD: sqlite3_blob +** +** ^(This function is used to read data from an open [BLOB handle] into a +** caller-supplied buffer. N bytes of data are copied into buffer Z +** from the open BLOB, starting at offset iOffset.)^ +** +** ^If offset iOffset is less than N bytes from the end of the BLOB, +** [SQLITE_ERROR] is returned and no data is read. ^If N or iOffset is +** less than zero, [SQLITE_ERROR] is returned and no data is read. +** ^The size of the blob (and hence the maximum value of N+iOffset) +** can be determined using the [sqlite3_blob_bytes()] interface. +** +** ^An attempt to read from an expired [BLOB handle] fails with an +** error code of [SQLITE_ABORT]. +** +** ^(On success, sqlite3_blob_read() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ +** +** This routine only works on a [BLOB handle] which has been created +** by a prior successful call to [sqlite3_blob_open()] and which has not +** been closed by [sqlite3_blob_close()]. Passing any other pointer in +** to this routine results in undefined and probably undesirable behavior. +** +** See also: [sqlite3_blob_write()]. +*/ +SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset); + +/* +** CAPI3REF: Write Data Into A BLOB Incrementally +** METHOD: sqlite3_blob +** +** ^(This function is used to write data into an open [BLOB handle] from a +** caller-supplied buffer. N bytes of data are copied from the buffer Z +** into the open BLOB, starting at offset iOffset.)^ +** +** ^(On success, sqlite3_blob_write() returns SQLITE_OK. +** Otherwise, an [error code] or an [extended error code] is returned.)^ +** ^Unless SQLITE_MISUSE is returned, this function sets the +** [database connection] error code and message accessible via +** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. +** +** ^If the [BLOB handle] passed as the first argument was not opened for +** writing (the flags parameter to [sqlite3_blob_open()] was zero), +** this function returns [SQLITE_READONLY]. +** +** This function may only modify the contents of the BLOB; it is +** not possible to increase the size of a BLOB using this API. +** ^If offset iOffset is less than N bytes from the end of the BLOB, +** [SQLITE_ERROR] is returned and no data is written. The size of the +** BLOB (and hence the maximum value of N+iOffset) can be determined +** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less +** than zero [SQLITE_ERROR] is returned and no data is written. +** +** ^An attempt to write to an expired [BLOB handle] fails with an +** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred +** before the [BLOB handle] expired are not rolled back by the +** expiration of the handle, though of course those changes might +** have been overwritten by the statement that expired the BLOB handle +** or by other independent statements. +** +** This routine only works on a [BLOB handle] which has been created +** by a prior successful call to [sqlite3_blob_open()] and which has not +** been closed by [sqlite3_blob_close()]. Passing any other pointer in +** to this routine results in undefined and probably undesirable behavior. +** +** See also: [sqlite3_blob_read()]. +*/ +SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); + +/* +** CAPI3REF: Virtual File System Objects +** +** A virtual filesystem (VFS) is an [sqlite3_vfs] object +** that SQLite uses to interact +** with the underlying operating system. Most SQLite builds come with a +** single default VFS that is appropriate for the host computer. +** New VFSes can be registered and existing VFSes can be unregistered. +** The following interfaces are provided. +** +** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name. +** ^Names are case sensitive. +** ^Names are zero-terminated UTF-8 strings. +** ^If there is no match, a NULL pointer is returned. +** ^If zVfsName is NULL then the default VFS is returned. +** +** ^New VFSes are registered with sqlite3_vfs_register(). +** ^Each new VFS becomes the default VFS if the makeDflt flag is set. +** ^The same VFS can be registered multiple times without injury. +** ^To make an existing VFS into the default VFS, register it again +** with the makeDflt flag set. If two different VFSes with the +** same name are registered, the behavior is undefined. If a +** VFS is registered with a name that is NULL or an empty string, +** then the behavior is undefined. +** +** ^Unregister a VFS with the sqlite3_vfs_unregister() interface. +** ^(If the default VFS is unregistered, another VFS is chosen as +** the default. The choice for the new VFS is arbitrary.)^ +*/ +SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); +SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); +SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); + +/* +** CAPI3REF: Mutexes +** +** The SQLite core uses these routines for thread +** synchronization. Though they are intended for internal +** use by SQLite, code that links against SQLite is +** permitted to use any of these routines. +** +** The SQLite source code contains multiple implementations +** of these mutex routines. An appropriate implementation +** is selected automatically at compile-time. The following +** implementations are available in the SQLite core: +** +**
    +**
  • SQLITE_MUTEX_PTHREADS +**
  • SQLITE_MUTEX_W32 +**
  • SQLITE_MUTEX_NOOP +**
+** +** The SQLITE_MUTEX_NOOP implementation is a set of routines +** that does no real locking and is appropriate for use in +** a single-threaded application. The SQLITE_MUTEX_PTHREADS and +** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix +** and Windows. +** +** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor +** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex +** implementation is included with the library. In this case the +** application must supply a custom mutex implementation using the +** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function +** before calling sqlite3_initialize() or any other public sqlite3_ +** function that calls sqlite3_initialize(). +** +** ^The sqlite3_mutex_alloc() routine allocates a new +** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc() +** routine returns NULL if it is unable to allocate the requested +** mutex. The argument to sqlite3_mutex_alloc() must be one of these +** integer constants: +** +**
    +**
  • SQLITE_MUTEX_FAST +**
  • SQLITE_MUTEX_RECURSIVE +**
  • SQLITE_MUTEX_STATIC_MAIN +**
  • SQLITE_MUTEX_STATIC_MEM +**
  • SQLITE_MUTEX_STATIC_OPEN +**
  • SQLITE_MUTEX_STATIC_PRNG +**
  • SQLITE_MUTEX_STATIC_LRU +**
  • SQLITE_MUTEX_STATIC_PMEM +**
  • SQLITE_MUTEX_STATIC_APP1 +**
  • SQLITE_MUTEX_STATIC_APP2 +**
  • SQLITE_MUTEX_STATIC_APP3 +**
  • SQLITE_MUTEX_STATIC_VFS1 +**
  • SQLITE_MUTEX_STATIC_VFS2 +**
  • SQLITE_MUTEX_STATIC_VFS3 +**
+** +** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) +** cause sqlite3_mutex_alloc() to create +** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE +** is used but not necessarily so when SQLITE_MUTEX_FAST is used. +** The mutex implementation does not need to make a distinction +** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does +** not want to. SQLite will only request a recursive mutex in +** cases where it really needs one. If a faster non-recursive mutex +** implementation is available on the host platform, the mutex subsystem +** might return such a mutex in response to SQLITE_MUTEX_FAST. +** +** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other +** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return +** a pointer to a static preexisting mutex. ^Nine static mutexes are +** used by the current version of SQLite. Future versions of SQLite +** may add additional static mutexes. Static mutexes are for internal +** use by SQLite only. Applications that use SQLite mutexes should +** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or +** SQLITE_MUTEX_RECURSIVE. +** +** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST +** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() +** returns a different mutex on every call. ^For the static +** mutex types, the same mutex is returned on every call that has +** the same type number. +** +** ^The sqlite3_mutex_free() routine deallocates a previously +** allocated dynamic mutex. Attempting to deallocate a static +** mutex results in undefined behavior. +** +** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt +** to enter a mutex. ^If another thread is already within the mutex, +** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return +** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK] +** upon successful entry. ^(Mutexes created using +** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. +** In such cases, the +** mutex must be exited an equal number of times before another thread +** can enter.)^ If the same thread tries to enter any mutex other +** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined. +** +** ^(Some systems (for example, Windows 95) do not support the operation +** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() +** will always return SQLITE_BUSY. In most cases the SQLite core only uses +** sqlite3_mutex_try() as an optimization, so this is acceptable +** behavior. The exceptions are unix builds that set the +** SQLITE_ENABLE_SETLK_TIMEOUT build option. In that case a working +** sqlite3_mutex_try() is required.)^ +** +** ^The sqlite3_mutex_leave() routine exits a mutex that was +** previously entered by the same thread. The behavior +** is undefined if the mutex is not currently entered by the +** calling thread or is not currently allocated. +** +** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), +** sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer, +** then any of the four routines behaves as a no-op. +** +** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. +*/ +SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int); +SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*); +SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*); +SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*); +SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*); + +/* +** CAPI3REF: Mutex Methods Object +** +** An instance of this structure defines the low-level routines +** used to allocate and use mutexes. +** +** Usually, the default mutex implementations provided by SQLite are +** sufficient, however the application has the option of substituting a custom +** implementation for specialized deployments or systems for which SQLite +** does not provide a suitable implementation. In this case, the application +** creates and populates an instance of this structure to pass +** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option. +** Additionally, an instance of this structure can be used as an +** output variable when querying the system for the current mutex +** implementation, using the [SQLITE_CONFIG_GETMUTEX] option. +** +** ^The xMutexInit method defined by this structure is invoked as +** part of system initialization by the sqlite3_initialize() function. +** ^The xMutexInit routine is called by SQLite exactly once for each +** effective call to [sqlite3_initialize()]. +** +** ^The xMutexEnd method defined by this structure is invoked as +** part of system shutdown by the sqlite3_shutdown() function. The +** implementation of this method is expected to release all outstanding +** resources obtained by the mutex methods implementation, especially +** those obtained by the xMutexInit method. ^The xMutexEnd() +** interface is invoked exactly once for each call to [sqlite3_shutdown()]. +** +** ^(The remaining seven methods defined by this structure (xMutexAlloc, +** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and +** xMutexNotheld) implement the following interfaces (respectively): +** +**
    +**
  • [sqlite3_mutex_alloc()]
  • +**
  • [sqlite3_mutex_free()]
  • +**
  • [sqlite3_mutex_enter()]
  • +**
  • [sqlite3_mutex_try()]
  • +**
  • [sqlite3_mutex_leave()]
  • +**
  • [sqlite3_mutex_held()]
  • +**
  • [sqlite3_mutex_notheld()]
  • +**
)^ +** +** The only difference is that the public sqlite3_XXX functions enumerated +** above silently ignore any invocations that pass a NULL pointer instead +** of a valid mutex handle. The implementations of the methods defined +** by this structure are not required to handle this case. The results +** of passing a NULL pointer instead of a valid mutex handle are undefined +** (i.e. it is acceptable to provide an implementation that segfaults if +** it is passed a NULL pointer). +** +** The xMutexInit() method must be threadsafe. It must be harmless to +** invoke xMutexInit() multiple times within the same process and without +** intervening calls to xMutexEnd(). Second and subsequent calls to +** xMutexInit() must be no-ops. +** +** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()] +** and its associates). Similarly, xMutexAlloc() must not use SQLite memory +** allocation for a static mutex. ^However xMutexAlloc() may use SQLite +** memory allocation for a fast or recursive mutex. +** +** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is +** called, but only if the prior call to xMutexInit returned SQLITE_OK. +** If xMutexInit fails in any way, it is expected to clean up after itself +** prior to returning. +*/ +typedef struct sqlite3_mutex_methods sqlite3_mutex_methods; +struct sqlite3_mutex_methods { + int (*xMutexInit)(void); + int (*xMutexEnd)(void); + sqlite3_mutex *(*xMutexAlloc)(int); + void (*xMutexFree)(sqlite3_mutex *); + void (*xMutexEnter)(sqlite3_mutex *); + int (*xMutexTry)(sqlite3_mutex *); + void (*xMutexLeave)(sqlite3_mutex *); + int (*xMutexHeld)(sqlite3_mutex *); + int (*xMutexNotheld)(sqlite3_mutex *); +}; + +/* +** CAPI3REF: Mutex Verification Routines +** +** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines +** are intended for use inside assert() statements. The SQLite core +** never uses these routines except inside an assert() and applications +** are advised to follow the lead of the core. The SQLite core only +** provides implementations for these routines when it is compiled +** with the SQLITE_DEBUG flag. External mutex implementations +** are only required to provide these routines if SQLITE_DEBUG is +** defined and if NDEBUG is not defined. +** +** These routines should return true if the mutex in their argument +** is held or not held, respectively, by the calling thread. +** +** The implementation is not required to provide versions of these +** routines that actually work. If the implementation does not provide working +** versions of these routines, it should at least provide stubs that always +** return true so that one does not get spurious assertion failures. +** +** If the argument to sqlite3_mutex_held() is a NULL pointer then +** the routine should return 1. This seems counter-intuitive since +** clearly the mutex cannot be held if it does not exist. But +** the reason the mutex does not exist is because the build is not +** using mutexes. And we do not want the assert() containing the +** call to sqlite3_mutex_held() to fail, so a non-zero return is +** the appropriate thing to do. The sqlite3_mutex_notheld() +** interface should also return 1 when given a NULL pointer. +*/ +#ifndef NDEBUG +SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); +SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*); +#endif + +/* +** CAPI3REF: Mutex Types +** +** The [sqlite3_mutex_alloc()] interface takes a single argument +** which is one of these integer constants. +** +** The set of static mutexes may change from one SQLite release to the +** next. Applications that override the built-in mutex logic must be +** prepared to accommodate additional static mutexes. +*/ +#define SQLITE_MUTEX_FAST 0 +#define SQLITE_MUTEX_RECURSIVE 1 +#define SQLITE_MUTEX_STATIC_MAIN 2 +#define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */ +#define SQLITE_MUTEX_STATIC_MEM2 4 /* NOT USED */ +#define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */ +#define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_randomness() */ +#define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */ +#define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */ +#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */ +#define SQLITE_MUTEX_STATIC_APP1 8 /* For use by application */ +#define SQLITE_MUTEX_STATIC_APP2 9 /* For use by application */ +#define SQLITE_MUTEX_STATIC_APP3 10 /* For use by application */ +#define SQLITE_MUTEX_STATIC_VFS1 11 /* For use by built-in VFS */ +#define SQLITE_MUTEX_STATIC_VFS2 12 /* For use by extension VFS */ +#define SQLITE_MUTEX_STATIC_VFS3 13 /* For use by application VFS */ + +/* Legacy compatibility: */ +#define SQLITE_MUTEX_STATIC_MASTER 2 + + +/* +** CAPI3REF: Retrieve the mutex for a database connection +** METHOD: sqlite3 +** +** ^This interface returns a pointer to the [sqlite3_mutex] object that +** serializes access to the [database connection] given in the argument +** when the [threading mode] is Serialized. +** ^If the [threading mode] is Single-thread or Multi-thread then this +** routine returns a NULL pointer. +*/ +SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); + +/* +** CAPI3REF: Low-Level Control Of Database Files +** METHOD: sqlite3 +** KEYWORDS: {file control} +** +** ^The [sqlite3_file_control()] interface makes a direct call to the +** xFileControl method for the [sqlite3_io_methods] object associated +** with a particular database identified by the second argument. ^The +** name of the database is "main" for the main database or "temp" for the +** TEMP database, or the name that appears after the AS keyword for +** databases that are added using the [ATTACH] SQL command. +** ^A NULL pointer can be used in place of "main" to refer to the +** main database file. +** ^The third and fourth parameters to this routine +** are passed directly through to the second and third parameters of +** the xFileControl method. ^The return value of the xFileControl +** method becomes the return value of this routine. +** +** A few opcodes for [sqlite3_file_control()] are handled directly +** by the SQLite core and never invoke the +** sqlite3_io_methods.xFileControl method. +** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes +** a pointer to the underlying [sqlite3_file] object to be written into +** the space pointed to by the 4th parameter. The +** [SQLITE_FCNTL_JOURNAL_POINTER] works similarly except that it returns +** the [sqlite3_file] object associated with the journal file instead of +** the main database. The [SQLITE_FCNTL_VFS_POINTER] opcode returns +** a pointer to the underlying [sqlite3_vfs] object for the file. +** The [SQLITE_FCNTL_DATA_VERSION] returns the data version counter +** from the pager. +** +** ^If the second parameter (zDbName) does not match the name of any +** open database file, then SQLITE_ERROR is returned. ^This error +** code is not remembered and will not be recalled by [sqlite3_errcode()] +** or [sqlite3_errmsg()]. The underlying xFileControl method might +** also return SQLITE_ERROR. There is no way to distinguish between +** an incorrect zDbName and an SQLITE_ERROR return from the underlying +** xFileControl method. +** +** See also: [file control opcodes] +*/ +SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); + +/* +** CAPI3REF: Testing Interface +** +** ^The sqlite3_test_control() interface is used to read out internal +** state of SQLite and to inject faults into SQLite for testing +** purposes. ^The first parameter is an operation code that determines +** the number, meaning, and operation of all subsequent parameters. +** +** This interface is not for use by applications. It exists solely +** for verifying the correct operation of the SQLite library. Depending +** on how the SQLite library is compiled, this interface might not exist. +** +** The details of the operation codes, their meanings, the parameters +** they take, and what they do are all subject to change without notice. +** Unlike most of the SQLite API, this function is not guaranteed to +** operate consistently from one release to the next. +*/ +SQLITE_API int sqlite3_test_control(int op, ...); + +/* +** CAPI3REF: Testing Interface Operation Codes +** +** These constants are the valid operation code parameters used +** as the first argument to [sqlite3_test_control()]. +** +** These parameters and their meanings are subject to change +** without notice. These values are for testing purposes only. +** Applications should not use any of these parameters or the +** [sqlite3_test_control()] interface. +*/ +#define SQLITE_TESTCTRL_FIRST 5 +#define SQLITE_TESTCTRL_PRNG_SAVE 5 +#define SQLITE_TESTCTRL_PRNG_RESTORE 6 +#define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */ +#define SQLITE_TESTCTRL_FK_NO_ACTION 7 +#define SQLITE_TESTCTRL_BITVEC_TEST 8 +#define SQLITE_TESTCTRL_FAULT_INSTALL 9 +#define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 +#define SQLITE_TESTCTRL_PENDING_BYTE 11 +#define SQLITE_TESTCTRL_ASSERT 12 +#define SQLITE_TESTCTRL_ALWAYS 13 +#define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */ +#define SQLITE_TESTCTRL_JSON_SELFCHECK 14 +#define SQLITE_TESTCTRL_OPTIMIZATIONS 15 +#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */ +#define SQLITE_TESTCTRL_GETOPT 16 +#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */ +#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17 +#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18 +#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */ +#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19 +#define SQLITE_TESTCTRL_NEVER_CORRUPT 20 +#define SQLITE_TESTCTRL_VDBE_COVERAGE 21 +#define SQLITE_TESTCTRL_BYTEORDER 22 +#define SQLITE_TESTCTRL_ISINIT 23 +#define SQLITE_TESTCTRL_SORTER_MMAP 24 +#define SQLITE_TESTCTRL_IMPOSTER 25 +#define SQLITE_TESTCTRL_PARSER_COVERAGE 26 +#define SQLITE_TESTCTRL_RESULT_INTREAL 27 +#define SQLITE_TESTCTRL_PRNG_SEED 28 +#define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS 29 +#define SQLITE_TESTCTRL_SEEK_COUNT 30 +#define SQLITE_TESTCTRL_TRACEFLAGS 31 +#define SQLITE_TESTCTRL_TUNE 32 +#define SQLITE_TESTCTRL_LOGEST 33 +#define SQLITE_TESTCTRL_USELONGDOUBLE 34 /* NOT USED */ +#define SQLITE_TESTCTRL_LAST 34 /* Largest TESTCTRL */ + +/* +** CAPI3REF: SQL Keyword Checking +** +** These routines provide access to the set of SQL language keywords +** recognized by SQLite. Applications can use these routines to determine +** whether or not a specific identifier needs to be escaped (for example, +** by enclosing in double-quotes) so as not to confuse the parser. +** +** The sqlite3_keyword_count() interface returns the number of distinct +** keywords understood by SQLite. +** +** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and +** makes *Z point to that keyword expressed as UTF8 and writes the number +** of bytes in the keyword into *L. The string that *Z points to is not +** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns +** SQLITE_OK if N is within bounds and SQLITE_ERROR if not. If either Z +** or L are NULL or invalid pointers then calls to +** sqlite3_keyword_name(N,Z,L) result in undefined behavior. +** +** The sqlite3_keyword_check(Z,L) interface checks to see whether or not +** the L-byte UTF8 identifier that Z points to is a keyword, returning non-zero +** if it is and zero if not. +** +** The parser used by SQLite is forgiving. It is often possible to use +** a keyword as an identifier as long as such use does not result in a +** parsing ambiguity. For example, the statement +** "CREATE TABLE BEGIN(REPLACE,PRAGMA,END);" is accepted by SQLite, and +** creates a new table named "BEGIN" with three columns named +** "REPLACE", "PRAGMA", and "END". Nevertheless, best practice is to avoid +** using keywords as identifiers. Common techniques used to avoid keyword +** name collisions include: +**
    +**
  • Put all identifier names inside double-quotes. This is the official +** SQL way to escape identifier names. +**
  • Put identifier names inside [...]. This is not standard SQL, +** but it is what SQL Server does and so lots of programmers use this +** technique. +**
  • Begin every identifier with the letter "Z" as no SQL keywords start +** with "Z". +**
  • Include a digit somewhere in every identifier name. +**
+** +** Note that the number of keywords understood by SQLite can depend on +** compile-time options. For example, "VACUUM" is not a keyword if +** SQLite is compiled with the [-DSQLITE_OMIT_VACUUM] option. Also, +** new keywords may be added to future releases of SQLite. +*/ +SQLITE_API int sqlite3_keyword_count(void); +SQLITE_API int sqlite3_keyword_name(int,const char**,int*); +SQLITE_API int sqlite3_keyword_check(const char*,int); + +/* +** CAPI3REF: Dynamic String Object +** KEYWORDS: {dynamic string} +** +** An instance of the sqlite3_str object contains a dynamically-sized +** string under construction. +** +** The lifecycle of an sqlite3_str object is as follows: +**
    +**
  1. ^The sqlite3_str object is created using [sqlite3_str_new()]. +**
  2. ^Text is appended to the sqlite3_str object using various +** methods, such as [sqlite3_str_appendf()]. +**
  3. ^The sqlite3_str object is destroyed and the string it created +** is returned using the [sqlite3_str_finish()] interface. +**
+*/ +typedef struct sqlite3_str sqlite3_str; + +/* +** CAPI3REF: Create A New Dynamic String Object +** CONSTRUCTOR: sqlite3_str +** +** ^The [sqlite3_str_new(D)] interface allocates and initializes +** a new [sqlite3_str] object. To avoid memory leaks, the object returned by +** [sqlite3_str_new()] must be freed by a subsequent call to +** [sqlite3_str_finish(X)]. +** +** ^The [sqlite3_str_new(D)] interface always returns a pointer to a +** valid [sqlite3_str] object, though in the event of an out-of-memory +** error the returned object might be a special singleton that will +** silently reject new text, always return SQLITE_NOMEM from +** [sqlite3_str_errcode()], always return 0 for +** [sqlite3_str_length()], and always return NULL from +** [sqlite3_str_finish(X)]. It is always safe to use the value +** returned by [sqlite3_str_new(D)] as the sqlite3_str parameter +** to any of the other [sqlite3_str] methods. +** +** The D parameter to [sqlite3_str_new(D)] may be NULL. If the +** D parameter in [sqlite3_str_new(D)] is not NULL, then the maximum +** length of the string contained in the [sqlite3_str] object will be +** the value set for [sqlite3_limit](D,[SQLITE_LIMIT_LENGTH]) instead +** of [SQLITE_MAX_LENGTH]. +*/ +SQLITE_API sqlite3_str *sqlite3_str_new(sqlite3*); + +/* +** CAPI3REF: Finalize A Dynamic String +** DESTRUCTOR: sqlite3_str +** +** ^The [sqlite3_str_finish(X)] interface destroys the sqlite3_str object X +** and returns a pointer to a memory buffer obtained from [sqlite3_malloc64()] +** that contains the constructed string. The calling application should +** pass the returned value to [sqlite3_free()] to avoid a memory leak. +** ^The [sqlite3_str_finish(X)] interface may return a NULL pointer if any +** errors were encountered during construction of the string. ^The +** [sqlite3_str_finish(X)] interface will also return a NULL pointer if the +** string in [sqlite3_str] object X is zero bytes long. +*/ +SQLITE_API char *sqlite3_str_finish(sqlite3_str*); + +/* +** CAPI3REF: Add Content To A Dynamic String +** METHOD: sqlite3_str +** +** These interfaces add content to an sqlite3_str object previously obtained +** from [sqlite3_str_new()]. +** +** ^The [sqlite3_str_appendf(X,F,...)] and +** [sqlite3_str_vappendf(X,F,V)] interfaces uses the [built-in printf] +** functionality of SQLite to append formatted text onto the end of +** [sqlite3_str] object X. +** +** ^The [sqlite3_str_append(X,S,N)] method appends exactly N bytes from string S +** onto the end of the [sqlite3_str] object X. N must be non-negative. +** S must contain at least N non-zero bytes of content. To append a +** zero-terminated string in its entirety, use the [sqlite3_str_appendall()] +** method instead. +** +** ^The [sqlite3_str_appendall(X,S)] method appends the complete content of +** zero-terminated string S onto the end of [sqlite3_str] object X. +** +** ^The [sqlite3_str_appendchar(X,N,C)] method appends N copies of the +** single-byte character C onto the end of [sqlite3_str] object X. +** ^This method can be used, for example, to add whitespace indentation. +** +** ^The [sqlite3_str_reset(X)] method resets the string under construction +** inside [sqlite3_str] object X back to zero bytes in length. +** +** These methods do not return a result code. ^If an error occurs, that fact +** is recorded in the [sqlite3_str] object and can be recovered by a +** subsequent call to [sqlite3_str_errcode(X)]. +*/ +SQLITE_API void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...); +SQLITE_API void sqlite3_str_vappendf(sqlite3_str*, const char *zFormat, va_list); +SQLITE_API void sqlite3_str_append(sqlite3_str*, const char *zIn, int N); +SQLITE_API void sqlite3_str_appendall(sqlite3_str*, const char *zIn); +SQLITE_API void sqlite3_str_appendchar(sqlite3_str*, int N, char C); +SQLITE_API void sqlite3_str_reset(sqlite3_str*); + +/* +** CAPI3REF: Status Of A Dynamic String +** METHOD: sqlite3_str +** +** These interfaces return the current status of an [sqlite3_str] object. +** +** ^If any prior errors have occurred while constructing the dynamic string +** in sqlite3_str X, then the [sqlite3_str_errcode(X)] method will return +** an appropriate error code. ^The [sqlite3_str_errcode(X)] method returns +** [SQLITE_NOMEM] following any out-of-memory error, or +** [SQLITE_TOOBIG] if the size of the dynamic string exceeds +** [SQLITE_MAX_LENGTH], or [SQLITE_OK] if there have been no errors. +** +** ^The [sqlite3_str_length(X)] method returns the current length, in bytes, +** of the dynamic string under construction in [sqlite3_str] object X. +** ^The length returned by [sqlite3_str_length(X)] does not include the +** zero-termination byte. +** +** ^The [sqlite3_str_value(X)] method returns a pointer to the current +** content of the dynamic string under construction in X. The value +** returned by [sqlite3_str_value(X)] is managed by the sqlite3_str object X +** and might be freed or altered by any subsequent method on the same +** [sqlite3_str] object. Applications must not use the pointer returned by +** [sqlite3_str_value(X)] after any subsequent method call on the same +** object. ^Applications may change the content of the string returned +** by [sqlite3_str_value(X)] as long as they do not write into any bytes +** outside the range of 0 to [sqlite3_str_length(X)] and do not read or +** write any byte after any subsequent sqlite3_str method call. +*/ +SQLITE_API int sqlite3_str_errcode(sqlite3_str*); +SQLITE_API int sqlite3_str_length(sqlite3_str*); +SQLITE_API char *sqlite3_str_value(sqlite3_str*); + +/* +** CAPI3REF: SQLite Runtime Status +** +** ^These interfaces are used to retrieve runtime status information +** about the performance of SQLite, and optionally to reset various +** highwater marks. ^The first argument is an integer code for +** the specific parameter to measure. ^(Recognized integer codes +** are of the form [status parameters | SQLITE_STATUS_...].)^ +** ^The current value of the parameter is returned into *pCurrent. +** ^The highest recorded value is returned in *pHighwater. ^If the +** resetFlag is true, then the highest record value is reset after +** *pHighwater is written. ^(Some parameters do not record the highest +** value. For those parameters +** nothing is written into *pHighwater and the resetFlag is ignored.)^ +** ^(Other parameters record only the highwater mark and not the current +** value. For these latter parameters nothing is written into *pCurrent.)^ +** +** ^The sqlite3_status() and sqlite3_status64() routines return +** SQLITE_OK on success and a non-zero [error code] on failure. +** +** If either the current value or the highwater mark is too large to +** be represented by a 32-bit integer, then the values returned by +** sqlite3_status() are undefined. +** +** See also: [sqlite3_db_status()] +*/ +SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag); +SQLITE_API int sqlite3_status64( + int op, + sqlite3_int64 *pCurrent, + sqlite3_int64 *pHighwater, + int resetFlag +); + + +/* +** CAPI3REF: Status Parameters +** KEYWORDS: {status parameters} +** +** These integer constants designate various run-time status parameters +** that can be returned by [sqlite3_status()]. +** +**
+** [[SQLITE_STATUS_MEMORY_USED]] ^(
SQLITE_STATUS_MEMORY_USED
+**
This parameter is the current amount of memory checked out +** using [sqlite3_malloc()], either directly or indirectly. The +** figure includes calls made to [sqlite3_malloc()] by the application +** and internal memory usage by the SQLite library. Auxiliary page-cache +** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in +** this parameter. The amount returned is the sum of the allocation +** sizes as reported by the xSize method in [sqlite3_mem_methods].
)^ +** +** [[SQLITE_STATUS_MALLOC_SIZE]] ^(
SQLITE_STATUS_MALLOC_SIZE
+**
This parameter records the largest memory allocation request +** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their +** internal equivalents). Only the value returned in the +** *pHighwater parameter to [sqlite3_status()] is of interest. +** The value written into the *pCurrent parameter is undefined.
)^ +** +** [[SQLITE_STATUS_MALLOC_COUNT]] ^(
SQLITE_STATUS_MALLOC_COUNT
+**
This parameter records the number of separate memory allocations +** currently checked out.
)^ +** +** [[SQLITE_STATUS_PAGECACHE_USED]] ^(
SQLITE_STATUS_PAGECACHE_USED
+**
This parameter returns the number of pages used out of the +** [pagecache memory allocator] that was configured using +** [SQLITE_CONFIG_PAGECACHE]. The +** value returned is in pages, not in bytes.
)^ +** +** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] +** ^(
SQLITE_STATUS_PAGECACHE_OVERFLOW
+**
This parameter returns the number of bytes of page cache +** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE] +** buffer and where forced to overflow to [sqlite3_malloc()]. The +** returned value includes allocations that overflowed because they +** were too large (they were larger than the "sz" parameter to +** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because +** no space was left in the page cache.
)^ +** +** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(
SQLITE_STATUS_PAGECACHE_SIZE
+**
This parameter records the largest memory allocation request +** handed to the [pagecache memory allocator]. Only the value returned in the +** *pHighwater parameter to [sqlite3_status()] is of interest. +** The value written into the *pCurrent parameter is undefined.
)^ +** +** [[SQLITE_STATUS_SCRATCH_USED]]
SQLITE_STATUS_SCRATCH_USED
+**
No longer used.
+** +** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(
SQLITE_STATUS_SCRATCH_OVERFLOW
+**
No longer used.
+** +** [[SQLITE_STATUS_SCRATCH_SIZE]]
SQLITE_STATUS_SCRATCH_SIZE
+**
No longer used.
+** +** [[SQLITE_STATUS_PARSER_STACK]] ^(
SQLITE_STATUS_PARSER_STACK
+**
The *pHighwater parameter records the deepest parser stack. +** The *pCurrent value is undefined. The *pHighwater value is only +** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].
)^ +**
+** +** New status parameters may be added from time to time. +*/ +#define SQLITE_STATUS_MEMORY_USED 0 +#define SQLITE_STATUS_PAGECACHE_USED 1 +#define SQLITE_STATUS_PAGECACHE_OVERFLOW 2 +#define SQLITE_STATUS_SCRATCH_USED 3 /* NOT USED */ +#define SQLITE_STATUS_SCRATCH_OVERFLOW 4 /* NOT USED */ +#define SQLITE_STATUS_MALLOC_SIZE 5 +#define SQLITE_STATUS_PARSER_STACK 6 +#define SQLITE_STATUS_PAGECACHE_SIZE 7 +#define SQLITE_STATUS_SCRATCH_SIZE 8 /* NOT USED */ +#define SQLITE_STATUS_MALLOC_COUNT 9 + +/* +** CAPI3REF: Database Connection Status +** METHOD: sqlite3 +** +** ^This interface is used to retrieve runtime status information +** about a single [database connection]. ^The first argument is the +** database connection object to be interrogated. ^The second argument +** is an integer constant, taken from the set of +** [SQLITE_DBSTATUS options], that +** determines the parameter to interrogate. The set of +** [SQLITE_DBSTATUS options] is likely +** to grow in future releases of SQLite. +** +** ^The current value of the requested parameter is written into *pCur +** and the highest instantaneous value is written into *pHiwtr. ^If +** the resetFlg is true, then the highest instantaneous value is +** reset back down to the current value. +** +** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a +** non-zero [error code] on failure. +** +** See also: [sqlite3_status()] and [sqlite3_stmt_status()]. +*/ +SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg); + +/* +** CAPI3REF: Status Parameters for database connections +** KEYWORDS: {SQLITE_DBSTATUS options} +** +** These constants are the available integer "verbs" that can be passed as +** the second argument to the [sqlite3_db_status()] interface. +** +** New verbs may be added in future releases of SQLite. Existing verbs +** might be discontinued. Applications should check the return code from +** [sqlite3_db_status()] to make sure that the call worked. +** The [sqlite3_db_status()] interface will return a non-zero error code +** if a discontinued or unsupported verb is invoked. +** +**
+** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(
SQLITE_DBSTATUS_LOOKASIDE_USED
+**
This parameter returns the number of lookaside memory slots currently +** checked out.
)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(
SQLITE_DBSTATUS_LOOKASIDE_HIT
+**
This parameter returns the number of malloc attempts that were +** satisfied using lookaside memory. Only the high-water value is meaningful; +** the current value is always zero.
)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]] +** ^(
SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE
+**
This parameter returns the number of malloc attempts that might have +** been satisfied using lookaside memory but failed due to the amount of +** memory requested being larger than the lookaside slot size. +** Only the high-water value is meaningful; +** the current value is always zero.
)^ +** +** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]] +** ^(
SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL
+**
This parameter returns the number of malloc attempts that might have +** been satisfied using lookaside memory but failed due to all lookaside +** memory already being in use. +** Only the high-water value is meaningful; +** the current value is always zero.
)^ +** +** [[SQLITE_DBSTATUS_CACHE_USED]] ^(
SQLITE_DBSTATUS_CACHE_USED
+**
This parameter returns the approximate number of bytes of heap +** memory used by all pager caches associated with the database connection.)^ +** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0. +**
+** +** [[SQLITE_DBSTATUS_CACHE_USED_SHARED]] +** ^(
SQLITE_DBSTATUS_CACHE_USED_SHARED
+**
This parameter is similar to DBSTATUS_CACHE_USED, except that if a +** pager cache is shared between two or more connections the bytes of heap +** memory used by that pager cache is divided evenly between the attached +** connections.)^ In other words, if none of the pager caches associated +** with the database connection are shared, this request returns the same +** value as DBSTATUS_CACHE_USED. Or, if one or more of the pager caches are +** shared, the value returned by this call will be smaller than that returned +** by DBSTATUS_CACHE_USED. ^The highwater mark associated with +** SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.
+** +** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(
SQLITE_DBSTATUS_SCHEMA_USED
+**
This parameter returns the approximate number of bytes of heap +** memory used to store the schema for all databases associated +** with the connection - main, temp, and any [ATTACH]-ed databases.)^ +** ^The full amount of memory used by the schemas is reported, even if the +** schema memory is shared with other database connections due to +** [shared cache mode] being enabled. +** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0. +**
+** +** [[SQLITE_DBSTATUS_STMT_USED]] ^(
SQLITE_DBSTATUS_STMT_USED
+**
This parameter returns the approximate number of bytes of heap +** and lookaside memory used by all prepared statements associated with +** the database connection.)^ +** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0. +**
+** +** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(
SQLITE_DBSTATUS_CACHE_HIT
+**
This parameter returns the number of pager cache hits that have +** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT +** is always 0. +**
+** +** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(
SQLITE_DBSTATUS_CACHE_MISS
+**
This parameter returns the number of pager cache misses that have +** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS +** is always 0. +**
+** +** [[SQLITE_DBSTATUS_CACHE_WRITE]] ^(
SQLITE_DBSTATUS_CACHE_WRITE
+**
This parameter returns the number of dirty cache entries that have +** been written to disk. Specifically, the number of pages written to the +** wal file in wal mode databases, or the number of pages written to the +** database file in rollback mode databases. Any pages written as part of +** transaction rollback or database recovery operations are not included. +** If an IO or other error occurs while writing a page to disk, the effect +** on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.)^ ^The +** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. +**
+** +** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(
SQLITE_DBSTATUS_CACHE_SPILL
+**
This parameter returns the number of dirty cache entries that have +** been written to disk in the middle of a transaction due to the page +** cache overflowing. Transactions are more efficient if they are written +** to disk all at once. When pages spill mid-transaction, that introduces +** additional overhead. This parameter can be used to help identify +** inefficiencies that can be resolved by increasing the cache size. +**
+** +** [[SQLITE_DBSTATUS_DEFERRED_FKS]] ^(
SQLITE_DBSTATUS_DEFERRED_FKS
+**
This parameter returns zero for the current value if and only if +** all foreign key constraints (deferred or immediate) have been +** resolved.)^ ^The highwater mark is always 0. +**
+**
+*/ +#define SQLITE_DBSTATUS_LOOKASIDE_USED 0 +#define SQLITE_DBSTATUS_CACHE_USED 1 +#define SQLITE_DBSTATUS_SCHEMA_USED 2 +#define SQLITE_DBSTATUS_STMT_USED 3 +#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4 +#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5 +#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6 +#define SQLITE_DBSTATUS_CACHE_HIT 7 +#define SQLITE_DBSTATUS_CACHE_MISS 8 +#define SQLITE_DBSTATUS_CACHE_WRITE 9 +#define SQLITE_DBSTATUS_DEFERRED_FKS 10 +#define SQLITE_DBSTATUS_CACHE_USED_SHARED 11 +#define SQLITE_DBSTATUS_CACHE_SPILL 12 +#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */ + + +/* +** CAPI3REF: Prepared Statement Status +** METHOD: sqlite3_stmt +** +** ^(Each prepared statement maintains various +** [SQLITE_STMTSTATUS counters] that measure the number +** of times it has performed specific operations.)^ These counters can +** be used to monitor the performance characteristics of the prepared +** statements. For example, if the number of table steps greatly exceeds +** the number of table searches or result rows, that would tend to indicate +** that the prepared statement is using a full table scan rather than +** an index. +** +** ^(This interface is used to retrieve and reset counter values from +** a [prepared statement]. The first argument is the prepared statement +** object to be interrogated. The second argument +** is an integer code for a specific [SQLITE_STMTSTATUS counter] +** to be interrogated.)^ +** ^The current value of the requested counter is returned. +** ^If the resetFlg is true, then the counter is reset to zero after this +** interface call returns. +** +** See also: [sqlite3_status()] and [sqlite3_db_status()]. +*/ +SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); + +/* +** CAPI3REF: Status Parameters for prepared statements +** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} +** +** These preprocessor macros define integer codes that name counter +** values associated with the [sqlite3_stmt_status()] interface. +** The meanings of the various counters are as follows: +** +**
+** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]]
SQLITE_STMTSTATUS_FULLSCAN_STEP
+**
^This is the number of times that SQLite has stepped forward in +** a table as part of a full table scan. Large numbers for this counter +** may indicate opportunities for performance improvement through +** careful use of indices.
+** +** [[SQLITE_STMTSTATUS_SORT]]
SQLITE_STMTSTATUS_SORT
+**
^This is the number of sort operations that have occurred. +** A non-zero value in this counter may indicate an opportunity to +** improve performance through careful use of indices.
+** +** [[SQLITE_STMTSTATUS_AUTOINDEX]]
SQLITE_STMTSTATUS_AUTOINDEX
+**
^This is the number of rows inserted into transient indices that +** were created automatically in order to help joins run faster. +** A non-zero value in this counter may indicate an opportunity to +** improve performance by adding permanent indices that do not +** need to be reinitialized each time the statement is run.
+** +** [[SQLITE_STMTSTATUS_VM_STEP]]
SQLITE_STMTSTATUS_VM_STEP
+**
^This is the number of virtual machine operations executed +** by the prepared statement if that number is less than or equal +** to 2147483647. The number of virtual machine operations can be +** used as a proxy for the total work done by the prepared statement. +** If the number of virtual machine operations exceeds 2147483647 +** then the value returned by this statement status code is undefined.
+** +** [[SQLITE_STMTSTATUS_REPREPARE]]
SQLITE_STMTSTATUS_REPREPARE
+**
^This is the number of times that the prepare statement has been +** automatically regenerated due to schema changes or changes to +** [bound parameters] that might affect the query plan.
+** +** [[SQLITE_STMTSTATUS_RUN]]
SQLITE_STMTSTATUS_RUN
+**
^This is the number of times that the prepared statement has +** been run. A single "run" for the purposes of this counter is one +** or more calls to [sqlite3_step()] followed by a call to [sqlite3_reset()]. +** The counter is incremented on the first [sqlite3_step()] call of each +** cycle.
+** +** [[SQLITE_STMTSTATUS_FILTER_MISS]] +** [[SQLITE_STMTSTATUS_FILTER HIT]] +**
SQLITE_STMTSTATUS_FILTER_HIT
+** SQLITE_STMTSTATUS_FILTER_MISS
+**
^SQLITE_STMTSTATUS_FILTER_HIT is the number of times that a join +** step was bypassed because a Bloom filter returned not-found. The +** corresponding SQLITE_STMTSTATUS_FILTER_MISS value is the number of +** times that the Bloom filter returned a find, and thus the join step +** had to be processed as normal.
+** +** [[SQLITE_STMTSTATUS_MEMUSED]]
SQLITE_STMTSTATUS_MEMUSED
+**
^This is the approximate number of bytes of heap memory +** used to store the prepared statement. ^This value is not actually +** a counter, and so the resetFlg parameter to sqlite3_stmt_status() +** is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED. +**
+**
+*/ +#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1 +#define SQLITE_STMTSTATUS_SORT 2 +#define SQLITE_STMTSTATUS_AUTOINDEX 3 +#define SQLITE_STMTSTATUS_VM_STEP 4 +#define SQLITE_STMTSTATUS_REPREPARE 5 +#define SQLITE_STMTSTATUS_RUN 6 +#define SQLITE_STMTSTATUS_FILTER_MISS 7 +#define SQLITE_STMTSTATUS_FILTER_HIT 8 +#define SQLITE_STMTSTATUS_MEMUSED 99 + +/* +** CAPI3REF: Custom Page Cache Object +** +** The sqlite3_pcache type is opaque. It is implemented by +** the pluggable module. The SQLite core has no knowledge of +** its size or internal structure and never deals with the +** sqlite3_pcache object except by holding and passing pointers +** to the object. +** +** See [sqlite3_pcache_methods2] for additional information. +*/ +typedef struct sqlite3_pcache sqlite3_pcache; + +/* +** CAPI3REF: Custom Page Cache Object +** +** The sqlite3_pcache_page object represents a single page in the +** page cache. The page cache will allocate instances of this +** object. Various methods of the page cache use pointers to instances +** of this object as parameters or as their return value. +** +** See [sqlite3_pcache_methods2] for additional information. +*/ +typedef struct sqlite3_pcache_page sqlite3_pcache_page; +struct sqlite3_pcache_page { + void *pBuf; /* The content of the page */ + void *pExtra; /* Extra information associated with the page */ +}; + +/* +** CAPI3REF: Application Defined Page Cache. +** KEYWORDS: {page cache} +** +** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can +** register an alternative page cache implementation by passing in an +** instance of the sqlite3_pcache_methods2 structure.)^ +** In many applications, most of the heap memory allocated by +** SQLite is used for the page cache. +** By implementing a +** custom page cache using this API, an application can better control +** the amount of memory consumed by SQLite, the way in which +** that memory is allocated and released, and the policies used to +** determine exactly which parts of a database file are cached and for +** how long. +** +** The alternative page cache mechanism is an +** extreme measure that is only needed by the most demanding applications. +** The built-in page cache is recommended for most uses. +** +** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an +** internal buffer by SQLite within the call to [sqlite3_config]. Hence +** the application may discard the parameter after the call to +** [sqlite3_config()] returns.)^ +** +** [[the xInit() page cache method]] +** ^(The xInit() method is called once for each effective +** call to [sqlite3_initialize()])^ +** (usually only once during the lifetime of the process). ^(The xInit() +** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^ +** The intent of the xInit() method is to set up global data structures +** required by the custom page cache implementation. +** ^(If the xInit() method is NULL, then the +** built-in default page cache is used instead of the application defined +** page cache.)^ +** +** [[the xShutdown() page cache method]] +** ^The xShutdown() method is called by [sqlite3_shutdown()]. +** It can be used to clean up +** any outstanding resources before process shutdown, if required. +** ^The xShutdown() method may be NULL. +** +** ^SQLite automatically serializes calls to the xInit method, +** so the xInit method need not be threadsafe. ^The +** xShutdown method is only called from [sqlite3_shutdown()] so it does +** not need to be threadsafe either. All other methods must be threadsafe +** in multithreaded applications. +** +** ^SQLite will never invoke xInit() more than once without an intervening +** call to xShutdown(). +** +** [[the xCreate() page cache methods]] +** ^SQLite invokes the xCreate() method to construct a new cache instance. +** SQLite will typically create one cache instance for each open database file, +** though this is not guaranteed. ^The +** first parameter, szPage, is the size in bytes of the pages that must +** be allocated by the cache. ^szPage will always be a power of two. ^The +** second parameter szExtra is a number of bytes of extra storage +** associated with each page cache entry. ^The szExtra parameter will be +** a number less than 250. SQLite will use the +** extra szExtra bytes on each page to store metadata about the underlying +** database page on disk. The value passed into szExtra depends +** on the SQLite version, the target platform, and how SQLite was compiled. +** ^The third argument to xCreate(), bPurgeable, is true if the cache being +** created will be used to cache database pages of a file stored on disk, or +** false if it is used for an in-memory database. The cache implementation +** does not have to do anything special based upon the value of bPurgeable; +** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will +** never invoke xUnpin() except to deliberately delete a page. +** ^In other words, calls to xUnpin() on a cache with bPurgeable set to +** false will always have the "discard" flag set to true. +** ^Hence, a cache created with bPurgeable set to false will +** never contain any unpinned pages. +** +** [[the xCachesize() page cache method]] +** ^(The xCachesize() method may be called at any time by SQLite to set the +** suggested maximum cache-size (number of pages stored) for the cache +** instance passed as the first argument. This is the value configured using +** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable +** parameter, the implementation is not required to do anything with this +** value; it is advisory only. +** +** [[the xPagecount() page cache methods]] +** The xPagecount() method must return the number of pages currently +** stored in the cache, both pinned and unpinned. +** +** [[the xFetch() page cache methods]] +** The xFetch() method locates a page in the cache and returns a pointer to +** an sqlite3_pcache_page object associated with that page, or a NULL pointer. +** The pBuf element of the returned sqlite3_pcache_page object will be a +** pointer to a buffer of szPage bytes used to store the content of a +** single database page. The pExtra element of sqlite3_pcache_page will be +** a pointer to the szExtra bytes of extra storage that SQLite has requested +** for each entry in the page cache. +** +** The page to be fetched is determined by the key. ^The minimum key value +** is 1. After it has been retrieved using xFetch, the page is considered +** to be "pinned". +** +** If the requested page is already in the page cache, then the page cache +** implementation must return a pointer to the page buffer with its content +** intact. If the requested page is not already in the cache, then the +** cache implementation should use the value of the createFlag +** parameter to help it determine what action to take: +** +** +**
createFlag Behavior when page is not already in cache +**
0 Do not allocate a new page. Return NULL. +**
1 Allocate a new page if it is easy and convenient to do so. +** Otherwise return NULL. +**
2 Make every effort to allocate a new page. Only return +** NULL if allocating a new page is effectively impossible. +**
+** +** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite +** will only use a createFlag of 2 after a prior call with a createFlag of 1 +** failed.)^ In between the xFetch() calls, SQLite may +** attempt to unpin one or more cache pages by spilling the content of +** pinned pages to disk and synching the operating system disk cache. +** +** [[the xUnpin() page cache method]] +** ^xUnpin() is called by SQLite with a pointer to a currently pinned page +** as its second argument. If the third parameter, discard, is non-zero, +** then the page must be evicted from the cache. +** ^If the discard parameter is +** zero, then the page may be discarded or retained at the discretion of the +** page cache implementation. ^The page cache implementation +** may choose to evict unpinned pages at any time. +** +** The cache must not perform any reference counting. A single +** call to xUnpin() unpins the page regardless of the number of prior calls +** to xFetch(). +** +** [[the xRekey() page cache methods]] +** The xRekey() method is used to change the key value associated with the +** page passed as the second argument. If the cache +** previously contains an entry associated with newKey, it must be +** discarded. ^Any prior cache entry associated with newKey is guaranteed not +** to be pinned. +** +** When SQLite calls the xTruncate() method, the cache must discard all +** existing cache entries with page numbers (keys) greater than or equal +** to the value of the iLimit parameter passed to xTruncate(). If any +** of these pages are pinned, they become implicitly unpinned, meaning that +** they can be safely discarded. +** +** [[the xDestroy() page cache method]] +** ^The xDestroy() method is used to delete a cache allocated by xCreate(). +** All resources associated with the specified cache should be freed. ^After +** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*] +** handle invalid, and will not use it with any other sqlite3_pcache_methods2 +** functions. +** +** [[the xShrink() page cache method]] +** ^SQLite invokes the xShrink() method when it wants the page cache to +** free up as much of heap memory as possible. The page cache implementation +** is not obligated to free any memory, but well-behaved implementations should +** do their best. +*/ +typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2; +struct sqlite3_pcache_methods2 { + int iVersion; + void *pArg; + int (*xInit)(void*); + void (*xShutdown)(void*); + sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable); + void (*xCachesize)(sqlite3_pcache*, int nCachesize); + int (*xPagecount)(sqlite3_pcache*); + sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); + void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard); + void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*, + unsigned oldKey, unsigned newKey); + void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); + void (*xDestroy)(sqlite3_pcache*); + void (*xShrink)(sqlite3_pcache*); +}; + +/* +** This is the obsolete pcache_methods object that has now been replaced +** by sqlite3_pcache_methods2. This object is not used by SQLite. It is +** retained in the header file for backwards compatibility only. +*/ +typedef struct sqlite3_pcache_methods sqlite3_pcache_methods; +struct sqlite3_pcache_methods { + void *pArg; + int (*xInit)(void*); + void (*xShutdown)(void*); + sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable); + void (*xCachesize)(sqlite3_pcache*, int nCachesize); + int (*xPagecount)(sqlite3_pcache*); + void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag); + void (*xUnpin)(sqlite3_pcache*, void*, int discard); + void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey); + void (*xTruncate)(sqlite3_pcache*, unsigned iLimit); + void (*xDestroy)(sqlite3_pcache*); +}; + + +/* +** CAPI3REF: Online Backup Object +** +** The sqlite3_backup object records state information about an ongoing +** online backup operation. ^The sqlite3_backup object is created by +** a call to [sqlite3_backup_init()] and is destroyed by a call to +** [sqlite3_backup_finish()]. +** +** See Also: [Using the SQLite Online Backup API] +*/ +typedef struct sqlite3_backup sqlite3_backup; + +/* +** CAPI3REF: Online Backup API. +** +** The backup API copies the content of one database into another. +** It is useful either for creating backups of databases or +** for copying in-memory databases to or from persistent files. +** +** See Also: [Using the SQLite Online Backup API] +** +** ^SQLite holds a write transaction open on the destination database file +** for the duration of the backup operation. +** ^The source database is read-locked only while it is being read; +** it is not locked continuously for the entire backup operation. +** ^Thus, the backup may be performed on a live source database without +** preventing other database connections from +** reading or writing to the source database while the backup is underway. +** +** ^(To perform a backup operation: +**
    +**
  1. sqlite3_backup_init() is called once to initialize the +** backup, +**
  2. sqlite3_backup_step() is called one or more times to transfer +** the data between the two databases, and finally +**
  3. sqlite3_backup_finish() is called to release all resources +** associated with the backup operation. +**
)^ +** There should be exactly one call to sqlite3_backup_finish() for each +** successful call to sqlite3_backup_init(). +** +** [[sqlite3_backup_init()]] sqlite3_backup_init() +** +** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the +** [database connection] associated with the destination database +** and the database name, respectively. +** ^The database name is "main" for the main database, "temp" for the +** temporary database, or the name specified after the AS keyword in +** an [ATTACH] statement for an attached database. +** ^The S and M arguments passed to +** sqlite3_backup_init(D,N,S,M) identify the [database connection] +** and database name of the source database, respectively. +** ^The source and destination [database connections] (parameters S and D) +** must be different or else sqlite3_backup_init(D,N,S,M) will fail with +** an error. +** +** ^A call to sqlite3_backup_init() will fail, returning NULL, if +** there is already a read or read-write transaction open on the +** destination database. +** +** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is +** returned and an error code and error message are stored in the +** destination [database connection] D. +** ^The error code and message for the failed call to sqlite3_backup_init() +** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or +** [sqlite3_errmsg16()] functions. +** ^A successful call to sqlite3_backup_init() returns a pointer to an +** [sqlite3_backup] object. +** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and +** sqlite3_backup_finish() functions to perform the specified backup +** operation. +** +** [[sqlite3_backup_step()]] sqlite3_backup_step() +** +** ^Function sqlite3_backup_step(B,N) will copy up to N pages between +** the source and destination databases specified by [sqlite3_backup] object B. +** ^If N is negative, all remaining source pages are copied. +** ^If sqlite3_backup_step(B,N) successfully copies N pages and there +** are still more pages to be copied, then the function returns [SQLITE_OK]. +** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages +** from source to destination, then it returns [SQLITE_DONE]. +** ^If an error occurs while running sqlite3_backup_step(B,N), +** then an [error code] is returned. ^As well as [SQLITE_OK] and +** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY], +** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an +** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code. +** +** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if +**
    +**
  1. the destination database was opened read-only, or +**
  2. the destination database is using write-ahead-log journaling +** and the destination and source page sizes differ, or +**
  3. the destination database is an in-memory database and the +** destination and source page sizes differ. +**
)^ +** +** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then +** the [sqlite3_busy_handler | busy-handler function] +** is invoked (if one is specified). ^If the +** busy-handler returns non-zero before the lock is available, then +** [SQLITE_BUSY] is returned to the caller. ^In this case the call to +** sqlite3_backup_step() can be retried later. ^If the source +** [database connection] +** is being used to write to the source database when sqlite3_backup_step() +** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this +** case the call to sqlite3_backup_step() can be retried later on. ^(If +** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or +** [SQLITE_READONLY] is returned, then +** there is no point in retrying the call to sqlite3_backup_step(). These +** errors are considered fatal.)^ The application must accept +** that the backup operation has failed and pass the backup operation handle +** to the sqlite3_backup_finish() to release associated resources. +** +** ^The first call to sqlite3_backup_step() obtains an exclusive lock +** on the destination file. ^The exclusive lock is not released until either +** sqlite3_backup_finish() is called or the backup operation is complete +** and sqlite3_backup_step() returns [SQLITE_DONE]. ^Every call to +** sqlite3_backup_step() obtains a [shared lock] on the source database that +** lasts for the duration of the sqlite3_backup_step() call. +** ^Because the source database is not locked between calls to +** sqlite3_backup_step(), the source database may be modified mid-way +** through the backup process. ^If the source database is modified by an +** external process or via a database connection other than the one being +** used by the backup operation, then the backup will be automatically +** restarted by the next call to sqlite3_backup_step(). ^If the source +** database is modified by using the same database connection as is used +** by the backup operation, then the backup database is automatically +** updated at the same time. +** +** [[sqlite3_backup_finish()]] sqlite3_backup_finish() +** +** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the +** application wishes to abandon the backup operation, the application +** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish(). +** ^The sqlite3_backup_finish() interfaces releases all +** resources associated with the [sqlite3_backup] object. +** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any +** active write-transaction on the destination database is rolled back. +** The [sqlite3_backup] object is invalid +** and may not be used following a call to sqlite3_backup_finish(). +** +** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no +** sqlite3_backup_step() errors occurred, regardless of whether or not +** sqlite3_backup_step() completed. +** ^If an out-of-memory condition or IO error occurred during any prior +** sqlite3_backup_step() call on the same [sqlite3_backup] object, then +** sqlite3_backup_finish() returns the corresponding [error code]. +** +** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step() +** is not a permanent error and does not affect the return value of +** sqlite3_backup_finish(). +** +** [[sqlite3_backup_remaining()]] [[sqlite3_backup_pagecount()]] +** sqlite3_backup_remaining() and sqlite3_backup_pagecount() +** +** ^The sqlite3_backup_remaining() routine returns the number of pages still +** to be backed up at the conclusion of the most recent sqlite3_backup_step(). +** ^The sqlite3_backup_pagecount() routine returns the total number of pages +** in the source database at the conclusion of the most recent +** sqlite3_backup_step(). +** ^(The values returned by these functions are only updated by +** sqlite3_backup_step(). If the source database is modified in a way that +** changes the size of the source database or the number of pages remaining, +** those changes are not reflected in the output of sqlite3_backup_pagecount() +** and sqlite3_backup_remaining() until after the next +** sqlite3_backup_step().)^ +** +** Concurrent Usage of Database Handles +** +** ^The source [database connection] may be used by the application for other +** purposes while a backup operation is underway or being initialized. +** ^If SQLite is compiled and configured to support threadsafe database +** connections, then the source database connection may be used concurrently +** from within other threads. +** +** However, the application must guarantee that the destination +** [database connection] is not passed to any other API (by any thread) after +** sqlite3_backup_init() is called and before the corresponding call to +** sqlite3_backup_finish(). SQLite does not currently check to see +** if the application incorrectly accesses the destination [database connection] +** and so no error code is reported, but the operations may malfunction +** nevertheless. Use of the destination database connection while a +** backup is in progress might also cause a mutex deadlock. +** +** If running in [shared cache mode], the application must +** guarantee that the shared cache used by the destination database +** is not accessed while the backup is running. In practice this means +** that the application must guarantee that the disk file being +** backed up to is not accessed by any connection within the process, +** not just the specific connection that was passed to sqlite3_backup_init(). +** +** The [sqlite3_backup] object itself is partially threadsafe. Multiple +** threads may safely make multiple concurrent calls to sqlite3_backup_step(). +** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount() +** APIs are not strictly speaking threadsafe. If they are invoked at the +** same time as another thread is invoking sqlite3_backup_step() it is +** possible that they return invalid values. +** +** Alternatives To Using The Backup API +** +** Other techniques for safely creating a consistent backup of an SQLite +** database include: +** +**
    +**
  • The [VACUUM INTO] command. +**
  • The [sqlite3_rsync] utility program. +**
+*/ +SQLITE_API sqlite3_backup *sqlite3_backup_init( + sqlite3 *pDest, /* Destination database handle */ + const char *zDestName, /* Destination database name */ + sqlite3 *pSource, /* Source database handle */ + const char *zSourceName /* Source database name */ +); +SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage); +SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p); +SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p); +SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); + +/* +** CAPI3REF: Unlock Notification +** METHOD: sqlite3 +** +** ^When running in shared-cache mode, a database operation may fail with +** an [SQLITE_LOCKED] error if the required locks on the shared-cache or +** individual tables within the shared-cache cannot be obtained. See +** [SQLite Shared-Cache Mode] for a description of shared-cache locking. +** ^This API may be used to register a callback that SQLite will invoke +** when the connection currently holding the required lock relinquishes it. +** ^This API is only available if the library was compiled with the +** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined. +** +** See Also: [Using the SQLite Unlock Notification Feature]. +** +** ^Shared-cache locks are released when a database connection concludes +** its current transaction, either by committing it or rolling it back. +** +** ^When a connection (known as the blocked connection) fails to obtain a +** shared-cache lock and SQLITE_LOCKED is returned to the caller, the +** identity of the database connection (the blocking connection) that +** has locked the required resource is stored internally. ^After an +** application receives an SQLITE_LOCKED error, it may call the +** sqlite3_unlock_notify() method with the blocked connection handle as +** the first argument to register for a callback that will be invoked +** when the blocking connection's current transaction is concluded. ^The +** callback is invoked from within the [sqlite3_step] or [sqlite3_close] +** call that concludes the blocking connection's transaction. +** +** ^(If sqlite3_unlock_notify() is called in a multi-threaded application, +** there is a chance that the blocking connection will have already +** concluded its transaction by the time sqlite3_unlock_notify() is invoked. +** If this happens, then the specified callback is invoked immediately, +** from within the call to sqlite3_unlock_notify().)^ +** +** ^If the blocked connection is attempting to obtain a write-lock on a +** shared-cache table, and more than one other connection currently holds +** a read-lock on the same table, then SQLite arbitrarily selects one of +** the other connections to use as the blocking connection. +** +** ^(There may be at most one unlock-notify callback registered by a +** blocked connection. If sqlite3_unlock_notify() is called when the +** blocked connection already has a registered unlock-notify callback, +** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is +** called with a NULL pointer as its second argument, then any existing +** unlock-notify callback is canceled. ^The blocked connection's +** unlock-notify callback may also be canceled by closing the blocked +** connection using [sqlite3_close()]. +** +** The unlock-notify callback is not reentrant. If an application invokes +** any sqlite3_xxx API functions from within an unlock-notify callback, a +** crash or deadlock may be the result. +** +** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always +** returns SQLITE_OK. +** +** Callback Invocation Details +** +** When an unlock-notify callback is registered, the application provides a +** single void* pointer that is passed to the callback when it is invoked. +** However, the signature of the callback function allows SQLite to pass +** it an array of void* context pointers. The first argument passed to +** an unlock-notify callback is a pointer to an array of void* pointers, +** and the second is the number of entries in the array. +** +** When a blocking connection's transaction is concluded, there may be +** more than one blocked connection that has registered for an unlock-notify +** callback. ^If two or more such blocked connections have specified the +** same callback function, then instead of invoking the callback function +** multiple times, it is invoked once with the set of void* context pointers +** specified by the blocked connections bundled together into an array. +** This gives the application an opportunity to prioritize any actions +** related to the set of unblocked database connections. +** +** Deadlock Detection +** +** Assuming that after registering for an unlock-notify callback a +** database waits for the callback to be issued before taking any further +** action (a reasonable assumption), then using this API may cause the +** application to deadlock. For example, if connection X is waiting for +** connection Y's transaction to be concluded, and similarly connection +** Y is waiting on connection X's transaction, then neither connection +** will proceed and the system may remain deadlocked indefinitely. +** +** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock +** detection. ^If a given call to sqlite3_unlock_notify() would put the +** system in a deadlocked state, then SQLITE_LOCKED is returned and no +** unlock-notify callback is registered. The system is said to be in +** a deadlocked state if connection A has registered for an unlock-notify +** callback on the conclusion of connection B's transaction, and connection +** B has itself registered for an unlock-notify callback when connection +** A's transaction is concluded. ^Indirect deadlock is also detected, so +** the system is also considered to be deadlocked if connection B has +** registered for an unlock-notify callback on the conclusion of connection +** C's transaction, where connection C is waiting on connection A. ^Any +** number of levels of indirection are allowed. +** +** The "DROP TABLE" Exception +** +** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost +** always appropriate to call sqlite3_unlock_notify(). There is however, +** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement, +** SQLite checks if there are any currently executing SELECT statements +** that belong to the same connection. If there are, SQLITE_LOCKED is +** returned. In this case there is no "blocking connection", so invoking +** sqlite3_unlock_notify() results in the unlock-notify callback being +** invoked immediately. If the application then re-attempts the "DROP TABLE" +** or "DROP INDEX" query, an infinite loop might be the result. +** +** One way around this problem is to check the extended error code returned +** by an sqlite3_step() call. ^(If there is a blocking connection, then the +** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in +** the special "DROP TABLE/INDEX" case, the extended error code is just +** SQLITE_LOCKED.)^ +*/ +SQLITE_API int sqlite3_unlock_notify( + sqlite3 *pBlocked, /* Waiting connection */ + void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */ + void *pNotifyArg /* Argument to pass to xNotify */ +); + + +/* +** CAPI3REF: String Comparison +** +** ^The [sqlite3_stricmp()] and [sqlite3_strnicmp()] APIs allow applications +** and extensions to compare the contents of two buffers containing UTF-8 +** strings in a case-independent fashion, using the same definition of "case +** independence" that SQLite uses internally when comparing identifiers. +*/ +SQLITE_API int sqlite3_stricmp(const char *, const char *); +SQLITE_API int sqlite3_strnicmp(const char *, const char *, int); + +/* +** CAPI3REF: String Globbing +* +** ^The [sqlite3_strglob(P,X)] interface returns zero if and only if +** string X matches the [GLOB] pattern P. +** ^The definition of [GLOB] pattern matching used in +** [sqlite3_strglob(P,X)] is the same as for the "X GLOB P" operator in the +** SQL dialect understood by SQLite. ^The [sqlite3_strglob(P,X)] function +** is case sensitive. +** +** Note that this routine returns zero on a match and non-zero if the strings +** do not match, the same as [sqlite3_stricmp()] and [sqlite3_strnicmp()]. +** +** See also: [sqlite3_strlike()]. +*/ +SQLITE_API int sqlite3_strglob(const char *zGlob, const char *zStr); + +/* +** CAPI3REF: String LIKE Matching +* +** ^The [sqlite3_strlike(P,X,E)] interface returns zero if and only if +** string X matches the [LIKE] pattern P with escape character E. +** ^The definition of [LIKE] pattern matching used in +** [sqlite3_strlike(P,X,E)] is the same as for the "X LIKE P ESCAPE E" +** operator in the SQL dialect understood by SQLite. ^For "X LIKE P" without +** the ESCAPE clause, set the E parameter of [sqlite3_strlike(P,X,E)] to 0. +** ^As with the LIKE operator, the [sqlite3_strlike(P,X,E)] function is case +** insensitive - equivalent upper and lower case ASCII characters match +** one another. +** +** ^The [sqlite3_strlike(P,X,E)] function matches Unicode characters, though +** only ASCII characters are case folded. +** +** Note that this routine returns zero on a match and non-zero if the strings +** do not match, the same as [sqlite3_stricmp()] and [sqlite3_strnicmp()]. +** +** See also: [sqlite3_strglob()]. +*/ +SQLITE_API int sqlite3_strlike(const char *zGlob, const char *zStr, unsigned int cEsc); + +/* +** CAPI3REF: Error Logging Interface +** +** ^The [sqlite3_log()] interface writes a message into the [error log] +** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()]. +** ^If logging is enabled, the zFormat string and subsequent arguments are +** used with [sqlite3_snprintf()] to generate the final output string. +** +** The sqlite3_log() interface is intended for use by extensions such as +** virtual tables, collating functions, and SQL functions. While there is +** nothing to prevent an application from calling sqlite3_log(), doing so +** is considered bad form. +** +** The zFormat string must not be NULL. +** +** To avoid deadlocks and other threading problems, the sqlite3_log() routine +** will not use dynamically allocated memory. The log message is stored in +** a fixed-length buffer on the stack. If the log message is longer than +** a few hundred characters, it will be truncated to the length of the +** buffer. +*/ +SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...); + +/* +** CAPI3REF: Write-Ahead Log Commit Hook +** METHOD: sqlite3 +** +** ^The [sqlite3_wal_hook()] function is used to register a callback that +** is invoked each time data is committed to a database in wal mode. +** +** ^(The callback is invoked by SQLite after the commit has taken place and +** the associated write-lock on the database released)^, so the implementation +** may read, write or [checkpoint] the database as required. +** +** ^The first parameter passed to the callback function when it is invoked +** is a copy of the third parameter passed to sqlite3_wal_hook() when +** registering the callback. ^The second is a copy of the database handle. +** ^The third parameter is the name of the database that was written to - +** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter +** is the number of pages currently in the write-ahead log file, +** including those that were just committed. +** +** The callback function should normally return [SQLITE_OK]. ^If an error +** code is returned, that error will propagate back up through the +** SQLite code base to cause the statement that provoked the callback +** to report an error, though the commit will have still occurred. If the +** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value +** that does not correspond to any valid SQLite error code, the results +** are undefined. +** +** A single database handle may have at most a single write-ahead log callback +** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any +** previously registered write-ahead log callback. ^The return value is +** a copy of the third parameter from the previous call, if any, or 0. +** ^Note that the [sqlite3_wal_autocheckpoint()] interface and the +** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will +** overwrite any prior [sqlite3_wal_hook()] settings. +*/ +SQLITE_API void *sqlite3_wal_hook( + sqlite3*, + int(*)(void *,sqlite3*,const char*,int), + void* +); + +/* +** CAPI3REF: Configure an auto-checkpoint +** METHOD: sqlite3 +** +** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around +** [sqlite3_wal_hook()] that causes any database on [database connection] D +** to automatically [checkpoint] +** after committing a transaction if there are N or +** more frames in the [write-ahead log] file. ^Passing zero or +** a negative value as the nFrame parameter disables automatic +** checkpoints entirely. +** +** ^The callback registered by this function replaces any existing callback +** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback +** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism +** configured by this function. +** +** ^The [wal_autocheckpoint pragma] can be used to invoke this interface +** from SQL. +** +** ^Checkpoints initiated by this mechanism are +** [sqlite3_wal_checkpoint_v2|PASSIVE]. +** +** ^Every new [database connection] defaults to having the auto-checkpoint +** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT] +** pages. The use of this interface +** is only necessary if the default setting is found to be suboptimal +** for a particular application. +*/ +SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N); + +/* +** CAPI3REF: Checkpoint a database +** METHOD: sqlite3 +** +** ^(The sqlite3_wal_checkpoint(D,X) is equivalent to +** [sqlite3_wal_checkpoint_v2](D,X,[SQLITE_CHECKPOINT_PASSIVE],0,0).)^ +** +** In brief, sqlite3_wal_checkpoint(D,X) causes the content in the +** [write-ahead log] for database X on [database connection] D to be +** transferred into the database file and for the write-ahead log to +** be reset. See the [checkpointing] documentation for addition +** information. +** +** This interface used to be the only way to cause a checkpoint to +** occur. But then the newer and more powerful [sqlite3_wal_checkpoint_v2()] +** interface was added. This interface is retained for backwards +** compatibility and as a convenience for applications that need to manually +** start a callback but which do not need the full power (and corresponding +** complication) of [sqlite3_wal_checkpoint_v2()]. +*/ +SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb); + +/* +** CAPI3REF: Checkpoint a database +** METHOD: sqlite3 +** +** ^(The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint +** operation on database X of [database connection] D in mode M. Status +** information is written back into integers pointed to by L and C.)^ +** ^(The M parameter must be a valid [checkpoint mode]:)^ +** +**
+**
SQLITE_CHECKPOINT_PASSIVE
+** ^Checkpoint as many frames as possible without waiting for any database +** readers or writers to finish, then sync the database file if all frames +** in the log were checkpointed. ^The [busy-handler callback] +** is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode. +** ^On the other hand, passive mode might leave the checkpoint unfinished +** if there are concurrent readers or writers. +** +**
SQLITE_CHECKPOINT_FULL
+** ^This mode blocks (it invokes the +** [sqlite3_busy_handler|busy-handler callback]) until there is no +** database writer and all readers are reading from the most recent database +** snapshot. ^It then checkpoints all frames in the log file and syncs the +** database file. ^This mode blocks new database writers while it is pending, +** but new database readers are allowed to continue unimpeded. +** +**
SQLITE_CHECKPOINT_RESTART
+** ^This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition +** that after checkpointing the log file it blocks (calls the +** [busy-handler callback]) +** until all readers are reading from the database file only. ^This ensures +** that the next writer will restart the log file from the beginning. +** ^Like SQLITE_CHECKPOINT_FULL, this mode blocks new +** database writer attempts while it is pending, but does not impede readers. +** +**
SQLITE_CHECKPOINT_TRUNCATE
+** ^This mode works the same way as SQLITE_CHECKPOINT_RESTART with the +** addition that it also truncates the log file to zero bytes just prior +** to a successful return. +**
+** +** ^If pnLog is not NULL, then *pnLog is set to the total number of frames in +** the log file or to -1 if the checkpoint could not run because +** of an error or because the database is not in [WAL mode]. ^If pnCkpt is not +** NULL,then *pnCkpt is set to the total number of checkpointed frames in the +** log file (including any that were already checkpointed before the function +** was called) or to -1 if the checkpoint could not run due to an error or +** because the database is not in WAL mode. ^Note that upon successful +** completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been +** truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero. +** +** ^All calls obtain an exclusive "checkpoint" lock on the database file. ^If +** any other process is running a checkpoint operation at the same time, the +** lock cannot be obtained and SQLITE_BUSY is returned. ^Even if there is a +** busy-handler configured, it will not be invoked in this case. +** +** ^The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the +** exclusive "writer" lock on the database file. ^If the writer lock cannot be +** obtained immediately, and a busy-handler is configured, it is invoked and +** the writer lock retried until either the busy-handler returns 0 or the lock +** is successfully obtained. ^The busy-handler is also invoked while waiting for +** database readers as described above. ^If the busy-handler returns 0 before +** the writer lock is obtained or while waiting for database readers, the +** checkpoint operation proceeds from that point in the same way as +** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible +** without blocking any further. ^SQLITE_BUSY is returned in this case. +** +** ^If parameter zDb is NULL or points to a zero length string, then the +** specified operation is attempted on all WAL databases [attached] to +** [database connection] db. In this case the +** values written to output parameters *pnLog and *pnCkpt are undefined. ^If +** an SQLITE_BUSY error is encountered when processing one or more of the +** attached WAL databases, the operation is still attempted on any remaining +** attached databases and SQLITE_BUSY is returned at the end. ^If any other +** error occurs while processing an attached database, processing is abandoned +** and the error code is returned to the caller immediately. ^If no error +** (SQLITE_BUSY or otherwise) is encountered while processing the attached +** databases, SQLITE_OK is returned. +** +** ^If database zDb is the name of an attached database that is not in WAL +** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. ^If +** zDb is not NULL (or a zero length string) and is not the name of any +** attached database, SQLITE_ERROR is returned to the caller. +** +** ^Unless it returns SQLITE_MISUSE, +** the sqlite3_wal_checkpoint_v2() interface +** sets the error information that is queried by +** [sqlite3_errcode()] and [sqlite3_errmsg()]. +** +** ^The [PRAGMA wal_checkpoint] command can be used to invoke this interface +** from SQL. +*/ +SQLITE_API int sqlite3_wal_checkpoint_v2( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of attached database (or NULL) */ + int eMode, /* SQLITE_CHECKPOINT_* value */ + int *pnLog, /* OUT: Size of WAL log in frames */ + int *pnCkpt /* OUT: Total number of frames checkpointed */ +); + +/* +** CAPI3REF: Checkpoint Mode Values +** KEYWORDS: {checkpoint mode} +** +** These constants define all valid values for the "checkpoint mode" passed +** as the third parameter to the [sqlite3_wal_checkpoint_v2()] interface. +** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the +** meaning of each of these checkpoint modes. +*/ +#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ +#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ +#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ +#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ + +/* +** CAPI3REF: Virtual Table Interface Configuration +** +** This function may be called by either the [xConnect] or [xCreate] method +** of a [virtual table] implementation to configure +** various facets of the virtual table interface. +** +** If this interface is invoked outside the context of an xConnect or +** xCreate virtual table method then the behavior is undefined. +** +** In the call sqlite3_vtab_config(D,C,...) the D parameter is the +** [database connection] in which the virtual table is being created and +** which is passed in as the first argument to the [xConnect] or [xCreate] +** method that is invoking sqlite3_vtab_config(). The C parameter is one +** of the [virtual table configuration options]. The presence and meaning +** of parameters after C depend on which [virtual table configuration option] +** is used. +*/ +SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); + +/* +** CAPI3REF: Virtual Table Configuration Options +** KEYWORDS: {virtual table configuration options} +** KEYWORDS: {virtual table configuration option} +** +** These macros define the various options to the +** [sqlite3_vtab_config()] interface that [virtual table] implementations +** can use to customize and optimize their behavior. +** +**
+** [[SQLITE_VTAB_CONSTRAINT_SUPPORT]] +**
SQLITE_VTAB_CONSTRAINT_SUPPORT
+**
Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported, +** where X is an integer. If X is zero, then the [virtual table] whose +** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not +** support constraints. In this configuration (which is the default) if +** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire +** statement is rolled back as if [ON CONFLICT | OR ABORT] had been +** specified as part of the user's SQL statement, regardless of the actual +** ON CONFLICT mode specified. +** +** If X is non-zero, then the virtual table implementation guarantees +** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before +** any modifications to internal or persistent data structures have been made. +** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite +** is able to roll back a statement or database transaction, and abandon +** or continue processing the current SQL statement as appropriate. +** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns +** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode +** had been ABORT. +** +** Virtual table implementations that are required to handle OR REPLACE +** must do so within the [xUpdate] method. If a call to the +** [sqlite3_vtab_on_conflict()] function indicates that the current ON +** CONFLICT policy is REPLACE, the virtual table implementation should +** silently replace the appropriate rows within the xUpdate callback and +** return SQLITE_OK. Or, if this is not possible, it may return +** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT +** constraint handling. +**
+** +** [[SQLITE_VTAB_DIRECTONLY]]
SQLITE_VTAB_DIRECTONLY
+**
Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the +** the [xConnect] or [xCreate] methods of a [virtual table] implementation +** prohibits that virtual table from being used from within triggers and +** views. +**
+** +** [[SQLITE_VTAB_INNOCUOUS]]
SQLITE_VTAB_INNOCUOUS
+**
Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the +** [xConnect] or [xCreate] methods of a [virtual table] implementation +** identify that virtual table as being safe to use from within triggers +** and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the +** virtual table can do no serious harm even if it is controlled by a +** malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS +** flag unless absolutely necessary. +**
+** +** [[SQLITE_VTAB_USES_ALL_SCHEMAS]]
SQLITE_VTAB_USES_ALL_SCHEMAS
+**
Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_USES_ALL_SCHEMA) from within the +** the [xConnect] or [xCreate] methods of a [virtual table] implementation +** instruct the query planner to begin at least a read transaction on +** all schemas ("main", "temp", and any ATTACH-ed databases) whenever the +** virtual table is used. +**
+**
+*/ +#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 +#define SQLITE_VTAB_INNOCUOUS 2 +#define SQLITE_VTAB_DIRECTONLY 3 +#define SQLITE_VTAB_USES_ALL_SCHEMAS 4 + +/* +** CAPI3REF: Determine The Virtual Table Conflict Policy +** +** This function may only be called from within a call to the [xUpdate] method +** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The +** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL], +** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode +** of the SQL statement that triggered the call to the [xUpdate] method of the +** [virtual table]. +*/ +SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); + +/* +** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE +** +** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn] +** method of a [virtual table], then it might return true if the +** column is being fetched as part of an UPDATE operation during which the +** column value will not change. The virtual table implementation can use +** this hint as permission to substitute a return value that is less +** expensive to compute and that the corresponding +** [xUpdate] method understands as a "no-change" value. +** +** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that +** the column is not changed by the UPDATE statement, then the xColumn +** method can optionally return without setting a result, without calling +** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces]. +** In that case, [sqlite3_value_nochange(X)] will return true for the +** same column in the [xUpdate] method. +** +** The sqlite3_vtab_nochange() routine is an optimization. Virtual table +** implementations should continue to give a correct answer even if the +** sqlite3_vtab_nochange() interface were to always return false. In the +** current implementation, the sqlite3_vtab_nochange() interface does always +** returns false for the enhanced [UPDATE FROM] statement. +*/ +SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*); + +/* +** CAPI3REF: Determine The Collation For a Virtual Table Constraint +** METHOD: sqlite3_index_info +** +** This function may only be called from within a call to the [xBestIndex] +** method of a [virtual table]. This function returns a pointer to a string +** that is the name of the appropriate collation sequence to use for text +** comparisons on the constraint identified by its arguments. +** +** The first argument must be the pointer to the [sqlite3_index_info] object +** that is the first parameter to the xBestIndex() method. The second argument +** must be an index into the aConstraint[] array belonging to the +** sqlite3_index_info structure passed to xBestIndex. +** +** Important: +** The first parameter must be the same pointer that is passed into the +** xBestMethod() method. The first parameter may not be a pointer to a +** different [sqlite3_index_info] object, even an exact copy. +** +** The return value is computed as follows: +** +**
    +**
  1. If the constraint comes from a WHERE clause expression that contains +** a [COLLATE operator], then the name of the collation specified by +** that COLLATE operator is returned. +**

  2. If there is no COLLATE operator, but the column that is the subject +** of the constraint specifies an alternative collating sequence via +** a [COLLATE clause] on the column definition within the CREATE TABLE +** statement that was passed into [sqlite3_declare_vtab()], then the +** name of that alternative collating sequence is returned. +**

  3. Otherwise, "BINARY" is returned. +**

+*/ +SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int); + +/* +** CAPI3REF: Determine if a virtual table query is DISTINCT +** METHOD: sqlite3_index_info +** +** This API may only be used from within an [xBestIndex|xBestIndex method] +** of a [virtual table] implementation. The result of calling this +** interface from outside of xBestIndex() is undefined and probably harmful. +** +** ^The sqlite3_vtab_distinct() interface returns an integer between 0 and +** 3. The integer returned by sqlite3_vtab_distinct() +** gives the virtual table additional information about how the query +** planner wants the output to be ordered. As long as the virtual table +** can meet the ordering requirements of the query planner, it may set +** the "orderByConsumed" flag. +** +**
  1. +** ^If the sqlite3_vtab_distinct() interface returns 0, that means +** that the query planner needs the virtual table to return all rows in the +** sort order defined by the "nOrderBy" and "aOrderBy" fields of the +** [sqlite3_index_info] object. This is the default expectation. If the +** virtual table outputs all rows in sorted order, then it is always safe for +** the xBestIndex method to set the "orderByConsumed" flag, regardless of +** the return value from sqlite3_vtab_distinct(). +**

  2. +** ^(If the sqlite3_vtab_distinct() interface returns 1, that means +** that the query planner does not need the rows to be returned in sorted order +** as long as all rows with the same values in all columns identified by the +** "aOrderBy" field are adjacent.)^ This mode is used when the query planner +** is doing a GROUP BY. +**

  3. +** ^(If the sqlite3_vtab_distinct() interface returns 2, that means +** that the query planner does not need the rows returned in any particular +** order, as long as rows with the same values in all columns identified +** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows +** contain the same values for all columns identified by "colUsed", all but +** one such row may optionally be omitted from the result.)^ +** The virtual table is not required to omit rows that are duplicates +** over the "colUsed" columns, but if the virtual table can do that without +** too much extra effort, it could potentially help the query to run faster. +** This mode is used for a DISTINCT query. +**

  4. +** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the +** virtual table must return rows in the order defined by "aOrderBy" as +** if the sqlite3_vtab_distinct() interface had returned 0. However if +** two or more rows in the result have the same values for all columns +** identified by "colUsed", then all but one such row may optionally be +** omitted.)^ Like when the return value is 2, the virtual table +** is not required to omit rows that are duplicates over the "colUsed" +** columns, but if the virtual table can do that without +** too much extra effort, it could potentially help the query to run faster. +** This mode is used for queries +** that have both DISTINCT and ORDER BY clauses. +**

+** +**

The following table summarizes the conditions under which the +** virtual table is allowed to set the "orderByConsumed" flag based on +** the value returned by sqlite3_vtab_distinct(). This table is a +** restatement of the previous four paragraphs: +** +** +** +**
sqlite3_vtab_distinct() return value +** Rows are returned in aOrderBy order +** Rows with the same value in all aOrderBy columns are adjacent +** Duplicates over all colUsed columns may be omitted +**
0yesyesno +**
1noyesno +**
2noyesyes +**
3yesyesyes +**
+** +** ^For the purposes of comparing virtual table output values to see if the +** values are the same value for sorting purposes, two NULL values are considered +** to be the same. In other words, the comparison operator is "IS" +** (or "IS NOT DISTINCT FROM") and not "==". +** +** If a virtual table implementation is unable to meet the requirements +** specified above, then it must not set the "orderByConsumed" flag in the +** [sqlite3_index_info] object or an incorrect answer may result. +** +** ^A virtual table implementation is always free to return rows in any order +** it wants, as long as the "orderByConsumed" flag is not set. ^When the +** "orderByConsumed" flag is unset, the query planner will add extra +** [bytecode] to ensure that the final results returned by the SQL query are +** ordered correctly. The use of the "orderByConsumed" flag and the +** sqlite3_vtab_distinct() interface is merely an optimization. ^Careful +** use of the sqlite3_vtab_distinct() interface and the "orderByConsumed" +** flag might help queries against a virtual table to run faster. Being +** overly aggressive and setting the "orderByConsumed" flag when it is not +** valid to do so, on the other hand, might cause SQLite to return incorrect +** results. +*/ +SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info*); + +/* +** CAPI3REF: Identify and handle IN constraints in xBestIndex +** +** This interface may only be used from within an +** [xBestIndex|xBestIndex() method] of a [virtual table] implementation. +** The result of invoking this interface from any other context is +** undefined and probably harmful. +** +** ^(A constraint on a virtual table of the form +** "[IN operator|column IN (...)]" is +** communicated to the xBestIndex method as a +** [SQLITE_INDEX_CONSTRAINT_EQ] constraint.)^ If xBestIndex wants to use +** this constraint, it must set the corresponding +** aConstraintUsage[].argvIndex to a positive integer. ^(Then, under +** the usual mode of handling IN operators, SQLite generates [bytecode] +** that invokes the [xFilter|xFilter() method] once for each value +** on the right-hand side of the IN operator.)^ Thus the virtual table +** only sees a single value from the right-hand side of the IN operator +** at a time. +** +** In some cases, however, it would be advantageous for the virtual +** table to see all values on the right-hand of the IN operator all at +** once. The sqlite3_vtab_in() interfaces facilitates this in two ways: +** +**

    +**
  1. +** ^A call to sqlite3_vtab_in(P,N,-1) will return true (non-zero) +** if and only if the [sqlite3_index_info|P->aConstraint][N] constraint +** is an [IN operator] that can be processed all at once. ^In other words, +** sqlite3_vtab_in() with -1 in the third argument is a mechanism +** by which the virtual table can ask SQLite if all-at-once processing +** of the IN operator is even possible. +** +**

  2. +** ^A call to sqlite3_vtab_in(P,N,F) with F==1 or F==0 indicates +** to SQLite that the virtual table does or does not want to process +** the IN operator all-at-once, respectively. ^Thus when the third +** parameter (F) is non-negative, this interface is the mechanism by +** which the virtual table tells SQLite how it wants to process the +** IN operator. +**

+** +** ^The sqlite3_vtab_in(P,N,F) interface can be invoked multiple times +** within the same xBestIndex method call. ^For any given P,N pair, +** the return value from sqlite3_vtab_in(P,N,F) will always be the same +** within the same xBestIndex call. ^If the interface returns true +** (non-zero), that means that the constraint is an IN operator +** that can be processed all-at-once. ^If the constraint is not an IN +** operator or cannot be processed all-at-once, then the interface returns +** false. +** +** ^(All-at-once processing of the IN operator is selected if both of the +** following conditions are met: +** +**
    +**
  1. The P->aConstraintUsage[N].argvIndex value is set to a positive +** integer. This is how the virtual table tells SQLite that it wants to +** use the N-th constraint. +** +**

  2. The last call to sqlite3_vtab_in(P,N,F) for which F was +** non-negative had F>=1. +**

)^ +** +** ^If either or both of the conditions above are false, then SQLite uses +** the traditional one-at-a-time processing strategy for the IN constraint. +** ^If both conditions are true, then the argvIndex-th parameter to the +** xFilter method will be an [sqlite3_value] that appears to be NULL, +** but which can be passed to [sqlite3_vtab_in_first()] and +** [sqlite3_vtab_in_next()] to find all values on the right-hand side +** of the IN constraint. +*/ +SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle); + +/* +** CAPI3REF: Find all elements on the right-hand side of an IN constraint. +** +** These interfaces are only useful from within the +** [xFilter|xFilter() method] of a [virtual table] implementation. +** The result of invoking these interfaces from any other context +** is undefined and probably harmful. +** +** The X parameter in a call to sqlite3_vtab_in_first(X,P) or +** sqlite3_vtab_in_next(X,P) should be one of the parameters to the +** xFilter method which invokes these routines, and specifically +** a parameter that was previously selected for all-at-once IN constraint +** processing using the [sqlite3_vtab_in()] interface in the +** [xBestIndex|xBestIndex method]. ^(If the X parameter is not +** an xFilter argument that was selected for all-at-once IN constraint +** processing, then these routines return [SQLITE_ERROR].)^ +** +** ^(Use these routines to access all values on the right-hand side +** of the IN constraint using code like the following: +** +**
+**    for(rc=sqlite3_vtab_in_first(pList, &pVal);
+**        rc==SQLITE_OK && pVal;
+**        rc=sqlite3_vtab_in_next(pList, &pVal)
+**    ){
+**      // do something with pVal
+**    }
+**    if( rc!=SQLITE_OK ){
+**      // an error has occurred
+**    }
+** 
)^ +** +** ^On success, the sqlite3_vtab_in_first(X,P) and sqlite3_vtab_in_next(X,P) +** routines return SQLITE_OK and set *P to point to the first or next value +** on the RHS of the IN constraint. ^If there are no more values on the +** right hand side of the IN constraint, then *P is set to NULL and these +** routines return [SQLITE_DONE]. ^The return value might be +** some other value, such as SQLITE_NOMEM, in the event of a malfunction. +** +** The *ppOut values returned by these routines are only valid until the +** next call to either of these routines or until the end of the xFilter +** method from which these routines were called. If the virtual table +** implementation needs to retain the *ppOut values for longer, it must make +** copies. The *ppOut values are [protected sqlite3_value|protected]. +*/ +SQLITE_API int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut); +SQLITE_API int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut); + +/* +** CAPI3REF: Constraint values in xBestIndex() +** METHOD: sqlite3_index_info +** +** This API may only be used from within the [xBestIndex|xBestIndex method] +** of a [virtual table] implementation. The result of calling this interface +** from outside of an xBestIndex method are undefined and probably harmful. +** +** ^When the sqlite3_vtab_rhs_value(P,J,V) interface is invoked from within +** the [xBestIndex] method of a [virtual table] implementation, with P being +** a copy of the [sqlite3_index_info] object pointer passed into xBestIndex and +** J being a 0-based index into P->aConstraint[], then this routine +** attempts to set *V to the value of the right-hand operand of +** that constraint if the right-hand operand is known. ^If the +** right-hand operand is not known, then *V is set to a NULL pointer. +** ^The sqlite3_vtab_rhs_value(P,J,V) interface returns SQLITE_OK if +** and only if *V is set to a value. ^The sqlite3_vtab_rhs_value(P,J,V) +** inteface returns SQLITE_NOTFOUND if the right-hand side of the J-th +** constraint is not available. ^The sqlite3_vtab_rhs_value() interface +** can return a result code other than SQLITE_OK or SQLITE_NOTFOUND if +** something goes wrong. +** +** The sqlite3_vtab_rhs_value() interface is usually only successful if +** the right-hand operand of a constraint is a literal value in the original +** SQL statement. If the right-hand operand is an expression or a reference +** to some other column or a [host parameter], then sqlite3_vtab_rhs_value() +** will probably return [SQLITE_NOTFOUND]. +** +** ^(Some constraints, such as [SQLITE_INDEX_CONSTRAINT_ISNULL] and +** [SQLITE_INDEX_CONSTRAINT_ISNOTNULL], have no right-hand operand. For such +** constraints, sqlite3_vtab_rhs_value() always returns SQLITE_NOTFOUND.)^ +** +** ^The [sqlite3_value] object returned in *V is a protected sqlite3_value +** and remains valid for the duration of the xBestIndex method call. +** ^When xBestIndex returns, the sqlite3_value object returned by +** sqlite3_vtab_rhs_value() is automatically deallocated. +** +** The "_rhs_" in the name of this routine is an abbreviation for +** "Right-Hand Side". +*/ +SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal); + +/* +** CAPI3REF: Conflict resolution modes +** KEYWORDS: {conflict resolution mode} +** +** These constants are returned by [sqlite3_vtab_on_conflict()] to +** inform a [virtual table] implementation of the [ON CONFLICT] mode +** for the SQL statement being evaluated. +** +** Note that the [SQLITE_IGNORE] constant is also used as a potential +** return value from the [sqlite3_set_authorizer()] callback and that +** [SQLITE_ABORT] is also a [result code]. +*/ +#define SQLITE_ROLLBACK 1 +/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */ +#define SQLITE_FAIL 3 +/* #define SQLITE_ABORT 4 // Also an error code */ +#define SQLITE_REPLACE 5 + +/* +** CAPI3REF: Prepared Statement Scan Status Opcodes +** KEYWORDS: {scanstatus options} +** +** The following constants can be used for the T parameter to the +** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a +** different metric for sqlite3_stmt_scanstatus() to return. +** +** When the value returned to V is a string, space to hold that string is +** managed by the prepared statement S and will be automatically freed when +** S is finalized. +** +** Not all values are available for all query elements. When a value is +** not available, the output variable is set to -1 if the value is numeric, +** or to NULL if it is a string (SQLITE_SCANSTAT_NAME). +** +**
+** [[SQLITE_SCANSTAT_NLOOP]]
SQLITE_SCANSTAT_NLOOP
+**
^The [sqlite3_int64] variable pointed to by the V parameter will be +** set to the total number of times that the X-th loop has run.
+** +** [[SQLITE_SCANSTAT_NVISIT]]
SQLITE_SCANSTAT_NVISIT
+**
^The [sqlite3_int64] variable pointed to by the V parameter will be set +** to the total number of rows examined by all iterations of the X-th loop.
+** +** [[SQLITE_SCANSTAT_EST]]
SQLITE_SCANSTAT_EST
+**
^The "double" variable pointed to by the V parameter will be set to the +** query planner's estimate for the average number of rows output from each +** iteration of the X-th loop. If the query planner's estimate was accurate, +** then this value will approximate the quotient NVISIT/NLOOP and the +** product of this value for all prior loops with the same SELECTID will +** be the NLOOP value for the current loop.
+** +** [[SQLITE_SCANSTAT_NAME]]
SQLITE_SCANSTAT_NAME
+**
^The "const char *" variable pointed to by the V parameter will be set +** to a zero-terminated UTF-8 string containing the name of the index or table +** used for the X-th loop.
+** +** [[SQLITE_SCANSTAT_EXPLAIN]]
SQLITE_SCANSTAT_EXPLAIN
+**
^The "const char *" variable pointed to by the V parameter will be set +** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] +** description for the X-th loop.
+** +** [[SQLITE_SCANSTAT_SELECTID]]
SQLITE_SCANSTAT_SELECTID
+**
^The "int" variable pointed to by the V parameter will be set to the +** id for the X-th query plan element. The id value is unique within the +** statement. The select-id is the same value as is output in the first +** column of an [EXPLAIN QUERY PLAN] query.
+** +** [[SQLITE_SCANSTAT_PARENTID]]
SQLITE_SCANSTAT_PARENTID
+**
The "int" variable pointed to by the V parameter will be set to the +** id of the parent of the current query element, if applicable, or +** to zero if the query element has no parent. This is the same value as +** returned in the second column of an [EXPLAIN QUERY PLAN] query.
+** +** [[SQLITE_SCANSTAT_NCYCLE]]
SQLITE_SCANSTAT_NCYCLE
+**
The sqlite3_int64 output value is set to the number of cycles, +** according to the processor time-stamp counter, that elapsed while the +** query element was being processed. This value is not available for +** all query elements - if it is unavailable the output variable is +** set to -1.
+**
+*/ +#define SQLITE_SCANSTAT_NLOOP 0 +#define SQLITE_SCANSTAT_NVISIT 1 +#define SQLITE_SCANSTAT_EST 2 +#define SQLITE_SCANSTAT_NAME 3 +#define SQLITE_SCANSTAT_EXPLAIN 4 +#define SQLITE_SCANSTAT_SELECTID 5 +#define SQLITE_SCANSTAT_PARENTID 6 +#define SQLITE_SCANSTAT_NCYCLE 7 + +/* +** CAPI3REF: Prepared Statement Scan Status +** METHOD: sqlite3_stmt +** +** These interfaces return information about the predicted and measured +** performance for pStmt. Advanced applications can use this +** interface to compare the predicted and the measured performance and +** issue warnings and/or rerun [ANALYZE] if discrepancies are found. +** +** Since this interface is expected to be rarely used, it is only +** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS] +** compile-time option. +** +** The "iScanStatusOp" parameter determines which status information to return. +** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior +** of this interface is undefined. ^The requested measurement is written into +** a variable pointed to by the "pOut" parameter. +** +** The "flags" parameter must be passed a mask of flags. At present only +** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX +** is specified, then status information is available for all elements +** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If +** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements +** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of +** the EXPLAIN QUERY PLAN output) are available. Invoking API +** sqlite3_stmt_scanstatus() is equivalent to calling +** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter. +** +** Parameter "idx" identifies the specific query element to retrieve statistics +** for. Query elements are numbered starting from zero. A value of -1 may +** retrieve statistics for the entire query. ^If idx is out of range +** - less than -1 or greater than or equal to the total number of query +** elements used to implement the statement - a non-zero value is returned and +** the variable that pOut points to is unchanged. +** +** See also: [sqlite3_stmt_scanstatus_reset()] +*/ +SQLITE_API int sqlite3_stmt_scanstatus( + sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ + void *pOut /* Result written here */ +); +SQLITE_API int sqlite3_stmt_scanstatus_v2( + sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ + int flags, /* Mask of flags defined below */ + void *pOut /* Result written here */ +); + +/* +** CAPI3REF: Prepared Statement Scan Status +** KEYWORDS: {scan status flags} +*/ +#define SQLITE_SCANSTAT_COMPLEX 0x0001 + +/* +** CAPI3REF: Zero Scan-Status Counters +** METHOD: sqlite3_stmt +** +** ^Zero all [sqlite3_stmt_scanstatus()] related event counters. +** +** This API is only available if the library is built with pre-processor +** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined. +*/ +SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*); + +/* +** CAPI3REF: Flush caches to disk mid-transaction +** METHOD: sqlite3 +** +** ^If a write-transaction is open on [database connection] D when the +** [sqlite3_db_cacheflush(D)] interface is invoked, any dirty +** pages in the pager-cache that are not currently in use are written out +** to disk. A dirty page may be in use if a database cursor created by an +** active SQL statement is reading from it, or if it is page 1 of a database +** file (page 1 is always "in use"). ^The [sqlite3_db_cacheflush(D)] +** interface flushes caches for all schemas - "main", "temp", and +** any [attached] databases. +** +** ^If this function needs to obtain extra database locks before dirty pages +** can be flushed to disk, it does so. ^If those locks cannot be obtained +** immediately and there is a busy-handler callback configured, it is invoked +** in the usual manner. ^If the required lock still cannot be obtained, then +** the database is skipped and an attempt made to flush any dirty pages +** belonging to the next (if any) database. ^If any databases are skipped +** because locks cannot be obtained, but no other error occurs, this +** function returns SQLITE_BUSY. +** +** ^If any other error occurs while flushing dirty pages to disk (for +** example an IO error or out-of-memory condition), then processing is +** abandoned and an SQLite [error code] is returned to the caller immediately. +** +** ^Otherwise, if no error occurs, [sqlite3_db_cacheflush()] returns SQLITE_OK. +** +** ^This function does not set the database handle error code or message +** returned by the [sqlite3_errcode()] and [sqlite3_errmsg()] functions. +*/ +SQLITE_API int sqlite3_db_cacheflush(sqlite3*); + +/* +** CAPI3REF: The pre-update hook. +** METHOD: sqlite3 +** +** ^These interfaces are only available if SQLite is compiled using the +** [SQLITE_ENABLE_PREUPDATE_HOOK] compile-time option. +** +** ^The [sqlite3_preupdate_hook()] interface registers a callback function +** that is invoked prior to each [INSERT], [UPDATE], and [DELETE] operation +** on a database table. +** ^At most one preupdate hook may be registered at a time on a single +** [database connection]; each call to [sqlite3_preupdate_hook()] overrides +** the previous setting. +** ^The preupdate hook is disabled by invoking [sqlite3_preupdate_hook()] +** with a NULL pointer as the second parameter. +** ^The third parameter to [sqlite3_preupdate_hook()] is passed through as +** the first parameter to callbacks. +** +** ^The preupdate hook only fires for changes to real database tables; the +** preupdate hook is not invoked for changes to [virtual tables] or to +** system tables like sqlite_sequence or sqlite_stat1. +** +** ^The second parameter to the preupdate callback is a pointer to +** the [database connection] that registered the preupdate hook. +** ^The third parameter to the preupdate callback is one of the constants +** [SQLITE_INSERT], [SQLITE_DELETE], or [SQLITE_UPDATE] to identify the +** kind of update operation that is about to occur. +** ^(The fourth parameter to the preupdate callback is the name of the +** database within the database connection that is being modified. This +** will be "main" for the main database or "temp" for TEMP tables or +** the name given after the AS keyword in the [ATTACH] statement for attached +** databases.)^ +** ^The fifth parameter to the preupdate callback is the name of the +** table that is being modified. +** +** For an UPDATE or DELETE operation on a [rowid table], the sixth +** parameter passed to the preupdate callback is the initial [rowid] of the +** row being modified or deleted. For an INSERT operation on a rowid table, +** or any operation on a WITHOUT ROWID table, the value of the sixth +** parameter is undefined. For an INSERT or UPDATE on a rowid table the +** seventh parameter is the final rowid value of the row being inserted +** or updated. The value of the seventh parameter passed to the callback +** function is not defined for operations on WITHOUT ROWID tables, or for +** DELETE operations on rowid tables. +** +** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from +** the previous call on the same [database connection] D, or NULL for +** the first call on D. +** +** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()], +** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces +** provide additional information about a preupdate event. These routines +** may only be called from within a preupdate callback. Invoking any of +** these routines from outside of a preupdate callback or with a +** [database connection] pointer that is different from the one supplied +** to the preupdate callback results in undefined and probably undesirable +** behavior. +** +** ^The [sqlite3_preupdate_count(D)] interface returns the number of columns +** in the row that is being inserted, updated, or deleted. +** +** ^The [sqlite3_preupdate_old(D,N,P)] interface writes into P a pointer to +** a [protected sqlite3_value] that contains the value of the Nth column of +** the table row before it is updated. The N parameter must be between 0 +** and one less than the number of columns or the behavior will be +** undefined. This must only be used within SQLITE_UPDATE and SQLITE_DELETE +** preupdate callbacks; if it is used by an SQLITE_INSERT callback then the +** behavior is undefined. The [sqlite3_value] that P points to +** will be destroyed when the preupdate callback returns. +** +** ^The [sqlite3_preupdate_new(D,N,P)] interface writes into P a pointer to +** a [protected sqlite3_value] that contains the value of the Nth column of +** the table row after it is updated. The N parameter must be between 0 +** and one less than the number of columns or the behavior will be +** undefined. This must only be used within SQLITE_INSERT and SQLITE_UPDATE +** preupdate callbacks; if it is used by an SQLITE_DELETE callback then the +** behavior is undefined. The [sqlite3_value] that P points to +** will be destroyed when the preupdate callback returns. +** +** ^The [sqlite3_preupdate_depth(D)] interface returns 0 if the preupdate +** callback was invoked as a result of a direct insert, update, or delete +** operation; or 1 for inserts, updates, or deletes invoked by top-level +** triggers; or 2 for changes resulting from triggers called by top-level +** triggers; and so forth. +** +** When the [sqlite3_blob_write()] API is used to update a blob column, +** the pre-update hook is invoked with SQLITE_DELETE, because +** the new values are not yet available. In this case, when a +** callback made with op==SQLITE_DELETE is actually a write using the +** sqlite3_blob_write() API, the [sqlite3_preupdate_blobwrite()] returns +** the index of the column being written. In other cases, where the +** pre-update hook is being invoked for some other reason, including a +** regular DELETE, sqlite3_preupdate_blobwrite() returns -1. +** +** See also: [sqlite3_update_hook()] +*/ +#if defined(SQLITE_ENABLE_PREUPDATE_HOOK) +SQLITE_API void *sqlite3_preupdate_hook( + sqlite3 *db, + void(*xPreUpdate)( + void *pCtx, /* Copy of third arg to preupdate_hook() */ + sqlite3 *db, /* Database handle */ + int op, /* SQLITE_UPDATE, DELETE or INSERT */ + char const *zDb, /* Database name */ + char const *zName, /* Table name */ + sqlite3_int64 iKey1, /* Rowid of row about to be deleted/updated */ + sqlite3_int64 iKey2 /* New rowid value (for a rowid UPDATE) */ + ), + void* +); +SQLITE_API int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **); +SQLITE_API int sqlite3_preupdate_count(sqlite3 *); +SQLITE_API int sqlite3_preupdate_depth(sqlite3 *); +SQLITE_API int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **); +SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *); +#endif + +/* +** CAPI3REF: Low-level system error code +** METHOD: sqlite3 +** +** ^Attempt to return the underlying operating system error code or error +** number that caused the most recent I/O error or failure to open a file. +** The return value is OS-dependent. For example, on unix systems, after +** [sqlite3_open_v2()] returns [SQLITE_CANTOPEN], this interface could be +** called to get back the underlying "errno" that caused the problem, such +** as ENOSPC, EAUTH, EISDIR, and so forth. +*/ +SQLITE_API int sqlite3_system_errno(sqlite3*); + +/* +** CAPI3REF: Database Snapshot +** KEYWORDS: {snapshot} {sqlite3_snapshot} +** +** An instance of the snapshot object records the state of a [WAL mode] +** database for some specific point in history. +** +** In [WAL mode], multiple [database connections] that are open on the +** same database file can each be reading a different historical version +** of the database file. When a [database connection] begins a read +** transaction, that connection sees an unchanging copy of the database +** as it existed for the point in time when the transaction first started. +** Subsequent changes to the database from other connections are not seen +** by the reader until a new read transaction is started. +** +** The sqlite3_snapshot object records state information about an historical +** version of the database file so that it is possible to later open a new read +** transaction that sees that historical version of the database rather than +** the most recent version. +*/ +typedef struct sqlite3_snapshot { + unsigned char hidden[48]; +} sqlite3_snapshot; + +/* +** CAPI3REF: Record A Database Snapshot +** CONSTRUCTOR: sqlite3_snapshot +** +** ^The [sqlite3_snapshot_get(D,S,P)] interface attempts to make a +** new [sqlite3_snapshot] object that records the current state of +** schema S in database connection D. ^On success, the +** [sqlite3_snapshot_get(D,S,P)] interface writes a pointer to the newly +** created [sqlite3_snapshot] object into *P and returns SQLITE_OK. +** If there is not already a read-transaction open on schema S when +** this function is called, one is opened automatically. +** +** If a read-transaction is opened by this function, then it is guaranteed +** that the returned snapshot object may not be invalidated by a database +** writer or checkpointer until after the read-transaction is closed. This +** is not guaranteed if a read-transaction is already open when this +** function is called. In that case, any subsequent write or checkpoint +** operation on the database may invalidate the returned snapshot handle, +** even while the read-transaction remains open. +** +** The following must be true for this function to succeed. If any of +** the following statements are false when sqlite3_snapshot_get() is +** called, SQLITE_ERROR is returned. The final value of *P is undefined +** in this case. +** +**
    +**
  • The database handle must not be in [autocommit mode]. +** +**
  • Schema S of [database connection] D must be a [WAL mode] database. +** +**
  • There must not be a write transaction open on schema S of database +** connection D. +** +**
  • One or more transactions must have been written to the current wal +** file since it was created on disk (by any connection). This means +** that a snapshot cannot be taken on a wal mode database with no wal +** file immediately after it is first opened. At least one transaction +** must be written to it first. +**
+** +** This function may also return SQLITE_NOMEM. If it is called with the +** database handle in autocommit mode but fails for some other reason, +** whether or not a read transaction is opened on schema S is undefined. +** +** The [sqlite3_snapshot] object returned from a successful call to +** [sqlite3_snapshot_get()] must be freed using [sqlite3_snapshot_free()] +** to avoid a memory leak. +** +** The [sqlite3_snapshot_get()] interface is only available when the +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_get( + sqlite3 *db, + const char *zSchema, + sqlite3_snapshot **ppSnapshot +); + +/* +** CAPI3REF: Start a read transaction on an historical snapshot +** METHOD: sqlite3_snapshot +** +** ^The [sqlite3_snapshot_open(D,S,P)] interface either starts a new read +** transaction or upgrades an existing one for schema S of +** [database connection] D such that the read transaction refers to +** historical [snapshot] P, rather than the most recent change to the +** database. ^The [sqlite3_snapshot_open()] interface returns SQLITE_OK +** on success or an appropriate [error code] if it fails. +** +** ^In order to succeed, the database connection must not be in +** [autocommit mode] when [sqlite3_snapshot_open(D,S,P)] is called. If there +** is already a read transaction open on schema S, then the database handle +** must have no active statements (SELECT statements that have been passed +** to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()). +** SQLITE_ERROR is returned if either of these conditions is violated, or +** if schema S does not exist, or if the snapshot object is invalid. +** +** ^A call to sqlite3_snapshot_open() will fail to open if the specified +** snapshot has been overwritten by a [checkpoint]. In this case +** SQLITE_ERROR_SNAPSHOT is returned. +** +** If there is already a read transaction open when this function is +** invoked, then the same read transaction remains open (on the same +** database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT +** is returned. If another error code - for example SQLITE_PROTOCOL or an +** SQLITE_IOERR error code - is returned, then the final state of the +** read transaction is undefined. If SQLITE_OK is returned, then the +** read transaction is now open on database snapshot P. +** +** ^(A call to [sqlite3_snapshot_open(D,S,P)] will fail if the +** database connection D does not know that the database file for +** schema S is in [WAL mode]. A database connection might not know +** that the database file is in [WAL mode] if there has been no prior +** I/O on that database connection, or if the database entered [WAL mode] +** after the most recent I/O on the database connection.)^ +** (Hint: Run "[PRAGMA application_id]" against a newly opened +** database connection in order to make it ready to use snapshots.) +** +** The [sqlite3_snapshot_open()] interface is only available when the +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_open( + sqlite3 *db, + const char *zSchema, + sqlite3_snapshot *pSnapshot +); + +/* +** CAPI3REF: Destroy a snapshot +** DESTRUCTOR: sqlite3_snapshot +** +** ^The [sqlite3_snapshot_free(P)] interface destroys [sqlite3_snapshot] P. +** The application must eventually free every [sqlite3_snapshot] object +** using this routine to avoid a memory leak. +** +** The [sqlite3_snapshot_free()] interface is only available when the +** [SQLITE_ENABLE_SNAPSHOT] compile-time option is used. +*/ +SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_snapshot_free(sqlite3_snapshot*); + +/* +** CAPI3REF: Compare the ages of two snapshot handles. +** METHOD: sqlite3_snapshot +** +** The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages +** of two valid snapshot handles. +** +** If the two snapshot handles are not associated with the same database +** file, the result of the comparison is undefined. +** +** Additionally, the result of the comparison is only valid if both of the +** snapshot handles were obtained by calling sqlite3_snapshot_get() since the +** last time the wal file was deleted. The wal file is deleted when the +** database is changed back to rollback mode or when the number of database +** clients drops to zero. If either snapshot handle was obtained before the +** wal file was last deleted, the value returned by this function +** is undefined. +** +** Otherwise, this API returns a negative value if P1 refers to an older +** snapshot than P2, zero if the two handles refer to the same database +** snapshot, and a positive value if P1 is a newer snapshot than P2. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SNAPSHOT] option. +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( + sqlite3_snapshot *p1, + sqlite3_snapshot *p2 +); + +/* +** CAPI3REF: Recover snapshots from a wal file +** METHOD: sqlite3_snapshot +** +** If a [WAL file] remains on disk after all database connections close +** (either through the use of the [SQLITE_FCNTL_PERSIST_WAL] [file control] +** or because the last process to have the database opened exited without +** calling [sqlite3_close()]) and a new connection is subsequently opened +** on that database and [WAL file], the [sqlite3_snapshot_open()] interface +** will only be able to open the last transaction added to the WAL file +** even though the WAL file contains other valid transactions. +** +** This function attempts to scan the WAL file associated with database zDb +** of database handle db and make all valid snapshots available to +** sqlite3_snapshot_open(). It is an error if there is already a read +** transaction open on the database, or if the database is not a WAL mode +** database. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_SNAPSHOT] option. +*/ +SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); + +/* +** CAPI3REF: Serialize a database +** +** The sqlite3_serialize(D,S,P,F) interface returns a pointer to +** memory that is a serialization of the S database on +** [database connection] D. If S is a NULL pointer, the main database is used. +** If P is not a NULL pointer, then the size of the database in bytes +** is written into *P. +** +** For an ordinary on-disk database file, the serialization is just a +** copy of the disk file. For an in-memory database or a "TEMP" database, +** the serialization is the same sequence of bytes which would be written +** to disk if that database were backed up to disk. +** +** The usual case is that sqlite3_serialize() copies the serialization of +** the database into memory obtained from [sqlite3_malloc64()] and returns +** a pointer to that memory. The caller is responsible for freeing the +** returned value to avoid a memory leak. However, if the F argument +** contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations +** are made, and the sqlite3_serialize() function will return a pointer +** to the contiguous memory representation of the database that SQLite +** is currently using for that database, or NULL if no such contiguous +** memory representation of the database exists. A contiguous memory +** representation of the database will usually only exist if there has +** been a prior call to [sqlite3_deserialize(D,S,...)] with the same +** values of D and S. +** The size of the database is written into *P even if the +** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy +** of the database exists. +** +** After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set, +** the returned buffer content will remain accessible and unchanged +** until either the next write operation on the connection or when +** the connection is closed, and applications must not modify the +** buffer. If the bit had been clear, the returned buffer will not +** be accessed by SQLite after the call. +** +** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the +** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory +** allocation error occurs. +** +** This interface is omitted if SQLite is compiled with the +** [SQLITE_OMIT_DESERIALIZE] option. +*/ +SQLITE_API unsigned char *sqlite3_serialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */ + sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */ + unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3_serialize +** +** Zero or more of the following constants can be OR-ed together for +** the F argument to [sqlite3_serialize(D,S,P,F)]. +** +** SQLITE_SERIALIZE_NOCOPY means that [sqlite3_serialize()] will return +** a pointer to contiguous in-memory database that it is currently using, +** without making a copy of the database. If SQLite is not currently using +** a contiguous in-memory database, then this option causes +** [sqlite3_serialize()] to return a NULL pointer. SQLite will only be +** using a contiguous in-memory database if it has been initialized by a +** prior call to [sqlite3_deserialize()]. +*/ +#define SQLITE_SERIALIZE_NOCOPY 0x001 /* Do no memory allocations */ + +/* +** CAPI3REF: Deserialize a database +** +** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the +** [database connection] D to disconnect from database S and then +** reopen S as an in-memory database based on the serialization contained +** in P. The serialized database P is N bytes in size. M is the size of +** the buffer P, which might be larger than N. If M is larger than N, and +** the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is +** permitted to add content to the in-memory database as long as the total +** size does not exceed M bytes. +** +** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will +** invoke sqlite3_free() on the serialization buffer when the database +** connection closes. If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then +** SQLite will try to increase the buffer size using sqlite3_realloc64() +** if writes on the database cause it to grow larger than M bytes. +** +** Applications must not modify the buffer P or invalidate it before +** the database connection D is closed. +** +** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the +** database is currently in a read transaction or is involved in a backup +** operation. +** +** It is not possible to deserialize into the TEMP database. If the +** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the +** function returns SQLITE_ERROR. +** +** The deserialized database should not be in [WAL mode]. If the database +** is in WAL mode, then any attempt to use the database file will result +** in an [SQLITE_CANTOPEN] error. The application can set the +** [file format version numbers] (bytes 18 and 19) of the input database P +** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the +** database file into rollback mode and work around this limitation. +** +** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the +** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then +** [sqlite3_free()] is invoked on argument P prior to returning. +** +** This interface is omitted if SQLite is compiled with the +** [SQLITE_OMIT_DESERIALIZE] option. +*/ +SQLITE_API int sqlite3_deserialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to reopen with the deserialization */ + unsigned char *pData, /* The serialized database content */ + sqlite3_int64 szDb, /* Number of bytes in the deserialization */ + sqlite3_int64 szBuf, /* Total size of buffer pData[] */ + unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3_deserialize() +** +** The following are allowed values for the 6th argument (the F argument) to +** the [sqlite3_deserialize(D,S,P,N,M,F)] interface. +** +** The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization +** in the P argument is held in memory obtained from [sqlite3_malloc64()] +** and that SQLite should take ownership of this memory and automatically +** free it when it has finished using it. Without this flag, the caller +** is responsible for freeing any dynamically allocated memory. +** +** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to +** grow the size of the database using calls to [sqlite3_realloc64()]. This +** flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used. +** Without this flag, the deserialized database cannot increase in size beyond +** the number of bytes specified by the M parameter. +** +** The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database +** should be treated as read-only. +*/ +#define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */ +#define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */ +#define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */ + +/* +** Undo the hack that converts floating point types to integer for +** builds on processors without floating point support. +*/ +#ifdef SQLITE_OMIT_FLOATING_POINT +# undef double +#endif + +#if defined(__wasi__) +# undef SQLITE_WASI +# define SQLITE_WASI 1 +# ifndef SQLITE_OMIT_LOAD_EXTENSION +# define SQLITE_OMIT_LOAD_EXTENSION +# endif +# ifndef SQLITE_THREADSAFE +# define SQLITE_THREADSAFE 0 +# endif +#endif + +#ifdef __cplusplus +} /* End of the 'extern "C"' block */ +#endif +/* #endif for SQLITE3_H will be added by mksqlite3.tcl */ + +/******** Begin file sqlite3rtree.h *********/ +/* +** 2010 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ + +#ifndef _SQLITE3RTREE_H_ +#define _SQLITE3RTREE_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry; +typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info; + +/* The double-precision datatype used by RTree depends on the +** SQLITE_RTREE_INT_ONLY compile-time option. +*/ +#ifdef SQLITE_RTREE_INT_ONLY + typedef sqlite3_int64 sqlite3_rtree_dbl; +#else + typedef double sqlite3_rtree_dbl; +#endif + +/* +** Register a geometry callback named zGeom that can be used as part of an +** R-Tree geometry query as follows: +** +** SELECT ... FROM WHERE MATCH $zGeom(... params ...) +*/ +SQLITE_API int sqlite3_rtree_geometry_callback( + sqlite3 *db, + const char *zGeom, + int (*xGeom)(sqlite3_rtree_geometry*, int, sqlite3_rtree_dbl*,int*), + void *pContext +); + + +/* +** A pointer to a structure of the following type is passed as the first +** argument to callbacks registered using rtree_geometry_callback(). +*/ +struct sqlite3_rtree_geometry { + void *pContext; /* Copy of pContext passed to s_r_g_c() */ + int nParam; /* Size of array aParam[] */ + sqlite3_rtree_dbl *aParam; /* Parameters passed to SQL geom function */ + void *pUser; /* Callback implementation user data */ + void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */ +}; + +/* +** Register a 2nd-generation geometry callback named zScore that can be +** used as part of an R-Tree geometry query as follows: +** +** SELECT ... FROM WHERE MATCH $zQueryFunc(... params ...) +*/ +SQLITE_API int sqlite3_rtree_query_callback( + sqlite3 *db, + const char *zQueryFunc, + int (*xQueryFunc)(sqlite3_rtree_query_info*), + void *pContext, + void (*xDestructor)(void*) +); + + +/* +** A pointer to a structure of the following type is passed as the +** argument to scored geometry callback registered using +** sqlite3_rtree_query_callback(). +** +** Note that the first 5 fields of this structure are identical to +** sqlite3_rtree_geometry. This structure is a subclass of +** sqlite3_rtree_geometry. +*/ +struct sqlite3_rtree_query_info { + void *pContext; /* pContext from when function registered */ + int nParam; /* Number of function parameters */ + sqlite3_rtree_dbl *aParam; /* value of function parameters */ + void *pUser; /* callback can use this, if desired */ + void (*xDelUser)(void*); /* function to free pUser */ + sqlite3_rtree_dbl *aCoord; /* Coordinates of node or entry to check */ + unsigned int *anQueue; /* Number of pending entries in the queue */ + int nCoord; /* Number of coordinates */ + int iLevel; /* Level of current node or entry */ + int mxLevel; /* The largest iLevel value in the tree */ + sqlite3_int64 iRowid; /* Rowid for current entry */ + sqlite3_rtree_dbl rParentScore; /* Score of parent node */ + int eParentWithin; /* Visibility of parent node */ + int eWithin; /* OUT: Visibility */ + sqlite3_rtree_dbl rScore; /* OUT: Write the score here */ + /* The following fields are only available in 3.8.11 and later */ + sqlite3_value **apSqlParam; /* Original SQL values of parameters */ +}; + +/* +** Allowed values for sqlite3_rtree_query.eWithin and .eParentWithin. +*/ +#define NOT_WITHIN 0 /* Object completely outside of query region */ +#define PARTLY_WITHIN 1 /* Object partially overlaps query region */ +#define FULLY_WITHIN 2 /* Object fully contained within query region */ + + +#ifdef __cplusplus +} /* end of the 'extern "C"' block */ +#endif + +#endif /* ifndef _SQLITE3RTREE_H_ */ + +/******** End of sqlite3rtree.h *********/ +/******** Begin file sqlite3session.h *********/ + +#if !defined(__SQLITESESSION_H_) && defined(SQLITE_ENABLE_SESSION) +#define __SQLITESESSION_H_ 1 + +/* +** Make sure we can call this stuff from C++. +*/ +#ifdef __cplusplus +extern "C" { +#endif + + +/* +** CAPI3REF: Session Object Handle +** +** An instance of this object is a [session] that can be used to +** record changes to a database. +*/ +typedef struct sqlite3_session sqlite3_session; + +/* +** CAPI3REF: Changeset Iterator Handle +** +** An instance of this object acts as a cursor for iterating +** over the elements of a [changeset] or [patchset]. +*/ +typedef struct sqlite3_changeset_iter sqlite3_changeset_iter; + +/* +** CAPI3REF: Create A New Session Object +** CONSTRUCTOR: sqlite3_session +** +** Create a new session object attached to database handle db. If successful, +** a pointer to the new object is written to *ppSession and SQLITE_OK is +** returned. If an error occurs, *ppSession is set to NULL and an SQLite +** error code (e.g. SQLITE_NOMEM) is returned. +** +** It is possible to create multiple session objects attached to a single +** database handle. +** +** Session objects created using this function should be deleted using the +** [sqlite3session_delete()] function before the database handle that they +** are attached to is itself closed. If the database handle is closed before +** the session object is deleted, then the results of calling any session +** module function, including [sqlite3session_delete()] on the session object +** are undefined. +** +** Because the session module uses the [sqlite3_preupdate_hook()] API, it +** is not possible for an application to register a pre-update hook on a +** database handle that has one or more session objects attached. Nor is +** it possible to create a session object attached to a database handle for +** which a pre-update hook is already defined. The results of attempting +** either of these things are undefined. +** +** The session object will be used to create changesets for tables in +** database zDb, where zDb is either "main", or "temp", or the name of an +** attached database. It is not an error if database zDb is not attached +** to the database when the session object is created. +*/ +SQLITE_API int sqlite3session_create( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of db (e.g. "main") */ + sqlite3_session **ppSession /* OUT: New session object */ +); + +/* +** CAPI3REF: Delete A Session Object +** DESTRUCTOR: sqlite3_session +** +** Delete a session object previously allocated using +** [sqlite3session_create()]. Once a session object has been deleted, the +** results of attempting to use pSession with any other session module +** function are undefined. +** +** Session objects must be deleted before the database handle to which they +** are attached is closed. Refer to the documentation for +** [sqlite3session_create()] for details. +*/ +SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); + +/* +** CAPI3REF: Configure a Session Object +** METHOD: sqlite3_session +** +** This method is used to configure a session object after it has been +** created. At present the only valid values for the second parameter are +** [SQLITE_SESSION_OBJCONFIG_SIZE] and [SQLITE_SESSION_OBJCONFIG_ROWID]. +** +*/ +SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg); + +/* +** CAPI3REF: Options for sqlite3session_object_config +** +** The following values may passed as the the 2nd parameter to +** sqlite3session_object_config(). +** +**
SQLITE_SESSION_OBJCONFIG_SIZE
+** This option is used to set, clear or query the flag that enables +** the [sqlite3session_changeset_size()] API. Because it imposes some +** computational overhead, this API is disabled by default. Argument +** pArg must point to a value of type (int). If the value is initially +** 0, then the sqlite3session_changeset_size() API is disabled. If it +** is greater than 0, then the same API is enabled. Or, if the initial +** value is less than zero, no change is made. In all cases the (int) +** variable is set to 1 if the sqlite3session_changeset_size() API is +** enabled following the current call, or 0 otherwise. +** +** It is an error (SQLITE_MISUSE) to attempt to modify this setting after +** the first table has been attached to the session object. +** +**
SQLITE_SESSION_OBJCONFIG_ROWID
+** This option is used to set, clear or query the flag that enables +** collection of data for tables with no explicit PRIMARY KEY. +** +** Normally, tables with no explicit PRIMARY KEY are simply ignored +** by the sessions module. However, if this flag is set, it behaves +** as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted +** as their leftmost columns. +** +** It is an error (SQLITE_MISUSE) to attempt to modify this setting after +** the first table has been attached to the session object. +*/ +#define SQLITE_SESSION_OBJCONFIG_SIZE 1 +#define SQLITE_SESSION_OBJCONFIG_ROWID 2 + +/* +** CAPI3REF: Enable Or Disable A Session Object +** METHOD: sqlite3_session +** +** Enable or disable the recording of changes by a session object. When +** enabled, a session object records changes made to the database. When +** disabled - it does not. A newly created session object is enabled. +** Refer to the documentation for [sqlite3session_changeset()] for further +** details regarding how enabling and disabling a session object affects +** the eventual changesets. +** +** Passing zero to this function disables the session. Passing a value +** greater than zero enables it. Passing a value less than zero is a +** no-op, and may be used to query the current state of the session. +** +** The return value indicates the final state of the session object: 0 if +** the session is disabled, or 1 if it is enabled. +*/ +SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable); + +/* +** CAPI3REF: Set Or Clear the Indirect Change Flag +** METHOD: sqlite3_session +** +** Each change recorded by a session object is marked as either direct or +** indirect. A change is marked as indirect if either: +** +**
    +**
  • The session object "indirect" flag is set when the change is +** made, or +**
  • The change is made by an SQL trigger or foreign key action +** instead of directly as a result of a users SQL statement. +**
+** +** If a single row is affected by more than one operation within a session, +** then the change is considered indirect if all operations meet the criteria +** for an indirect change above, or direct otherwise. +** +** This function is used to set, clear or query the session object indirect +** flag. If the second argument passed to this function is zero, then the +** indirect flag is cleared. If it is greater than zero, the indirect flag +** is set. Passing a value less than zero does not modify the current value +** of the indirect flag, and may be used to query the current state of the +** indirect flag for the specified session object. +** +** The return value indicates the final state of the indirect flag: 0 if +** it is clear, or 1 if it is set. +*/ +SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); + +/* +** CAPI3REF: Attach A Table To A Session Object +** METHOD: sqlite3_session +** +** If argument zTab is not NULL, then it is the name of a table to attach +** to the session object passed as the first argument. All subsequent changes +** made to the table while the session object is enabled will be recorded. See +** documentation for [sqlite3session_changeset()] for further details. +** +** Or, if argument zTab is NULL, then changes are recorded for all tables +** in the database. If additional tables are added to the database (by +** executing "CREATE TABLE" statements) after this call is made, changes for +** the new tables are also recorded. +** +** Changes can only be recorded for tables that have a PRIMARY KEY explicitly +** defined as part of their CREATE TABLE statement. It does not matter if the +** PRIMARY KEY is an "INTEGER PRIMARY KEY" (rowid alias) or not. The PRIMARY +** KEY may consist of a single column, or may be a composite key. +** +** It is not an error if the named table does not exist in the database. Nor +** is it an error if the named table does not have a PRIMARY KEY. However, +** no changes will be recorded in either of these scenarios. +** +** Changes are not recorded for individual rows that have NULL values stored +** in one or more of their PRIMARY KEY columns. +** +** SQLITE_OK is returned if the call completes without error. Or, if an error +** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned. +** +**

Special sqlite_stat1 Handling

+** +** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to +** some of the rules above. In SQLite, the schema of sqlite_stat1 is: +**
+**        CREATE TABLE sqlite_stat1(tbl,idx,stat)
+**  
+** +** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are +** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes +** are recorded for rows for which (idx IS NULL) is true. However, for such +** rows a zero-length blob (SQL value X'') is stored in the changeset or +** patchset instead of a NULL value. This allows such changesets to be +** manipulated by legacy implementations of sqlite3changeset_invert(), +** concat() and similar. +** +** The sqlite3changeset_apply() function automatically converts the +** zero-length blob back to a NULL value when updating the sqlite_stat1 +** table. However, if the application calls sqlite3changeset_new(), +** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset +** iterator directly (including on a changeset iterator passed to a +** conflict-handler callback) then the X'' value is returned. The application +** must translate X'' to NULL itself if required. +** +** Legacy (older than 3.22.0) versions of the sessions module cannot capture +** changes made to the sqlite_stat1 table. Legacy versions of the +** sqlite3changeset_apply() function silently ignore any modifications to the +** sqlite_stat1 table that are part of a changeset or patchset. +*/ +SQLITE_API int sqlite3session_attach( + sqlite3_session *pSession, /* Session object */ + const char *zTab /* Table name */ +); + +/* +** CAPI3REF: Set a table filter on a Session Object. +** METHOD: sqlite3_session +** +** The second argument (xFilter) is the "filter callback". For changes to rows +** in tables that are not attached to the Session object, the filter is called +** to determine whether changes to the table's rows should be tracked or not. +** If xFilter returns 0, changes are not tracked. Note that once a table is +** attached, xFilter will not be called again. +*/ +SQLITE_API void sqlite3session_table_filter( + sqlite3_session *pSession, /* Session object */ + int(*xFilter)( + void *pCtx, /* Copy of third arg to _filter_table() */ + const char *zTab /* Table name */ + ), + void *pCtx /* First argument passed to xFilter */ +); + +/* +** CAPI3REF: Generate A Changeset From A Session Object +** METHOD: sqlite3_session +** +** Obtain a changeset containing changes to the tables attached to the +** session object passed as the first argument. If successful, +** set *ppChangeset to point to a buffer containing the changeset +** and *pnChangeset to the size of the changeset in bytes before returning +** SQLITE_OK. If an error occurs, set both *ppChangeset and *pnChangeset to +** zero and return an SQLite error code. +** +** A changeset consists of zero or more INSERT, UPDATE and/or DELETE changes, +** each representing a change to a single row of an attached table. An INSERT +** change contains the values of each field of a new database row. A DELETE +** contains the original values of each field of a deleted database row. An +** UPDATE change contains the original values of each field of an updated +** database row along with the updated values for each updated non-primary-key +** column. It is not possible for an UPDATE change to represent a change that +** modifies the values of primary key columns. If such a change is made, it +** is represented in a changeset as a DELETE followed by an INSERT. +** +** Changes are not recorded for rows that have NULL values stored in one or +** more of their PRIMARY KEY columns. If such a row is inserted or deleted, +** no corresponding change is present in the changesets returned by this +** function. If an existing row with one or more NULL values stored in +** PRIMARY KEY columns is updated so that all PRIMARY KEY columns are non-NULL, +** only an INSERT is appears in the changeset. Similarly, if an existing row +** with non-NULL PRIMARY KEY values is updated so that one or more of its +** PRIMARY KEY columns are set to NULL, the resulting changeset contains a +** DELETE change only. +** +** The contents of a changeset may be traversed using an iterator created +** using the [sqlite3changeset_start()] API. A changeset may be applied to +** a database with a compatible schema using the [sqlite3changeset_apply()] +** API. +** +** Within a changeset generated by this function, all changes related to a +** single table are grouped together. In other words, when iterating through +** a changeset or when applying a changeset to a database, all changes related +** to a single table are processed before moving on to the next table. Tables +** are sorted in the same order in which they were attached (or auto-attached) +** to the sqlite3_session object. The order in which the changes related to +** a single table are stored is undefined. +** +** Following a successful call to this function, it is the responsibility of +** the caller to eventually free the buffer that *ppChangeset points to using +** [sqlite3_free()]. +** +**

Changeset Generation

+** +** Once a table has been attached to a session object, the session object +** records the primary key values of all new rows inserted into the table. +** It also records the original primary key and other column values of any +** deleted or updated rows. For each unique primary key value, data is only +** recorded once - the first time a row with said primary key is inserted, +** updated or deleted in the lifetime of the session. +** +** There is one exception to the previous paragraph: when a row is inserted, +** updated or deleted, if one or more of its primary key columns contain a +** NULL value, no record of the change is made. +** +** The session object therefore accumulates two types of records - those +** that consist of primary key values only (created when the user inserts +** a new record) and those that consist of the primary key values and the +** original values of other table columns (created when the users deletes +** or updates a record). +** +** When this function is called, the requested changeset is created using +** both the accumulated records and the current contents of the database +** file. Specifically: +** +**
    +**
  • For each record generated by an insert, the database is queried +** for a row with a matching primary key. If one is found, an INSERT +** change is added to the changeset. If no such row is found, no change +** is added to the changeset. +** +**
  • For each record generated by an update or delete, the database is +** queried for a row with a matching primary key. If such a row is +** found and one or more of the non-primary key fields have been +** modified from their original values, an UPDATE change is added to +** the changeset. Or, if no such row is found in the table, a DELETE +** change is added to the changeset. If there is a row with a matching +** primary key in the database, but all fields contain their original +** values, no change is added to the changeset. +**
+** +** This means, amongst other things, that if a row is inserted and then later +** deleted while a session object is active, neither the insert nor the delete +** will be present in the changeset. Or if a row is deleted and then later a +** row with the same primary key values inserted while a session object is +** active, the resulting changeset will contain an UPDATE change instead of +** a DELETE and an INSERT. +** +** When a session object is disabled (see the [sqlite3session_enable()] API), +** it does not accumulate records when rows are inserted, updated or deleted. +** This may appear to have some counter-intuitive effects if a single row +** is written to more than once during a session. For example, if a row +** is inserted while a session object is enabled, then later deleted while +** the same session object is disabled, no INSERT record will appear in the +** changeset, even though the delete took place while the session was disabled. +** Or, if one field of a row is updated while a session is enabled, and +** then another field of the same row is updated while the session is disabled, +** the resulting changeset will contain an UPDATE change that updates both +** fields. +*/ +SQLITE_API int sqlite3session_changeset( + sqlite3_session *pSession, /* Session object */ + int *pnChangeset, /* OUT: Size of buffer at *ppChangeset */ + void **ppChangeset /* OUT: Buffer containing changeset */ +); + +/* +** CAPI3REF: Return An Upper-limit For The Size Of The Changeset +** METHOD: sqlite3_session +** +** By default, this function always returns 0. For it to return +** a useful result, the sqlite3_session object must have been configured +** to enable this API using sqlite3session_object_config() with the +** SQLITE_SESSION_OBJCONFIG_SIZE verb. +** +** When enabled, this function returns an upper limit, in bytes, for the size +** of the changeset that might be produced if sqlite3session_changeset() were +** called. The final changeset size might be equal to or smaller than the +** size in bytes returned by this function. +*/ +SQLITE_API sqlite3_int64 sqlite3session_changeset_size(sqlite3_session *pSession); + +/* +** CAPI3REF: Load The Difference Between Tables Into A Session +** METHOD: sqlite3_session +** +** If it is not already attached to the session object passed as the first +** argument, this function attaches table zTbl in the same manner as the +** [sqlite3session_attach()] function. If zTbl does not exist, or if it +** does not have a primary key, this function is a no-op (but does not return +** an error). +** +** Argument zFromDb must be the name of a database ("main", "temp" etc.) +** attached to the same database handle as the session object that contains +** a table compatible with the table attached to the session by this function. +** A table is considered compatible if it: +** +**
    +**
  • Has the same name, +**
  • Has the same set of columns declared in the same order, and +**
  • Has the same PRIMARY KEY definition. +**
+** +** If the tables are not compatible, SQLITE_SCHEMA is returned. If the tables +** are compatible but do not have any PRIMARY KEY columns, it is not an error +** but no changes are added to the session object. As with other session +** APIs, tables without PRIMARY KEYs are simply ignored. +** +** This function adds a set of changes to the session object that could be +** used to update the table in database zFrom (call this the "from-table") +** so that its content is the same as the table attached to the session +** object (call this the "to-table"). Specifically: +** +**
    +**
  • For each row (primary key) that exists in the to-table but not in +** the from-table, an INSERT record is added to the session object. +** +**
  • For each row (primary key) that exists in the to-table but not in +** the from-table, a DELETE record is added to the session object. +** +**
  • For each row (primary key) that exists in both tables, but features +** different non-PK values in each, an UPDATE record is added to the +** session. +**
+** +** To clarify, if this function is called and then a changeset constructed +** using [sqlite3session_changeset()], then after applying that changeset to +** database zFrom the contents of the two compatible tables would be +** identical. +** +** Unless the call to this function is a no-op as described above, it is an +** error if database zFrom does not exist or does not contain the required +** compatible table. +** +** If the operation is successful, SQLITE_OK is returned. Otherwise, an SQLite +** error code. In this case, if argument pzErrMsg is not NULL, *pzErrMsg +** may be set to point to a buffer containing an English language error +** message. It is the responsibility of the caller to free this buffer using +** sqlite3_free(). +*/ +SQLITE_API int sqlite3session_diff( + sqlite3_session *pSession, + const char *zFromDb, + const char *zTbl, + char **pzErrMsg +); + + +/* +** CAPI3REF: Generate A Patchset From A Session Object +** METHOD: sqlite3_session +** +** The differences between a patchset and a changeset are that: +** +**
    +**
  • DELETE records consist of the primary key fields only. The +** original values of other fields are omitted. +**
  • The original values of any modified fields are omitted from +** UPDATE records. +**
+** +** A patchset blob may be used with up to date versions of all +** sqlite3changeset_xxx API functions except for sqlite3changeset_invert(), +** which returns SQLITE_CORRUPT if it is passed a patchset. Similarly, +** attempting to use a patchset blob with old versions of the +** sqlite3changeset_xxx APIs also provokes an SQLITE_CORRUPT error. +** +** Because the non-primary key "old.*" fields are omitted, no +** SQLITE_CHANGESET_DATA conflicts can be detected or reported if a patchset +** is passed to the sqlite3changeset_apply() API. Other conflict types work +** in the same way as for changesets. +** +** Changes within a patchset are ordered in the same way as for changesets +** generated by the sqlite3session_changeset() function (i.e. all changes for +** a single table are grouped together, tables appear in the order in which +** they were attached to the session object). +*/ +SQLITE_API int sqlite3session_patchset( + sqlite3_session *pSession, /* Session object */ + int *pnPatchset, /* OUT: Size of buffer at *ppPatchset */ + void **ppPatchset /* OUT: Buffer containing patchset */ +); + +/* +** CAPI3REF: Test if a changeset has recorded any changes. +** +** Return non-zero if no changes to attached tables have been recorded by +** the session object passed as the first argument. Otherwise, if one or +** more changes have been recorded, return zero. +** +** Even if this function returns zero, it is possible that calling +** [sqlite3session_changeset()] on the session handle may still return a +** changeset that contains no changes. This can happen when a row in +** an attached table is modified and then later on the original values +** are restored. However, if this function returns non-zero, then it is +** guaranteed that a call to sqlite3session_changeset() will return a +** changeset containing zero changes. +*/ +SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession); + +/* +** CAPI3REF: Query for the amount of heap memory used by a session object. +** +** This API returns the total amount of heap memory in bytes currently +** used by the session object passed as the only argument. +*/ +SQLITE_API sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession); + +/* +** CAPI3REF: Create An Iterator To Traverse A Changeset +** CONSTRUCTOR: sqlite3_changeset_iter +** +** Create an iterator used to iterate through the contents of a changeset. +** If successful, *pp is set to point to the iterator handle and SQLITE_OK +** is returned. Otherwise, if an error occurs, *pp is set to zero and an +** SQLite error code is returned. +** +** The following functions can be used to advance and query a changeset +** iterator created by this function: +** +**
    +**
  • [sqlite3changeset_next()] +**
  • [sqlite3changeset_op()] +**
  • [sqlite3changeset_new()] +**
  • [sqlite3changeset_old()] +**
+** +** It is the responsibility of the caller to eventually destroy the iterator +** by passing it to [sqlite3changeset_finalize()]. The buffer containing the +** changeset (pChangeset) must remain valid until after the iterator is +** destroyed. +** +** Assuming the changeset blob was created by one of the +** [sqlite3session_changeset()], [sqlite3changeset_concat()] or +** [sqlite3changeset_invert()] functions, all changes within the changeset +** that apply to a single table are grouped together. This means that when +** an application iterates through a changeset using an iterator created by +** this function, all changes that relate to a single table are visited +** consecutively. There is no chance that the iterator will visit a change +** the applies to table X, then one for table Y, and then later on visit +** another change for table X. +** +** The behavior of sqlite3changeset_start_v2() and its streaming equivalent +** may be modified by passing a combination of +** [SQLITE_CHANGESETSTART_INVERT | supported flags] as the 4th parameter. +** +** Note that the sqlite3changeset_start_v2() API is still experimental +** and therefore subject to change. +*/ +SQLITE_API int sqlite3changeset_start( + sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ + int nChangeset, /* Size of changeset blob in bytes */ + void *pChangeset /* Pointer to blob containing changeset */ +); +SQLITE_API int sqlite3changeset_start_v2( + sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ + int nChangeset, /* Size of changeset blob in bytes */ + void *pChangeset, /* Pointer to blob containing changeset */ + int flags /* SESSION_CHANGESETSTART_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3changeset_start_v2 +** +** The following flags may passed via the 4th parameter to +** [sqlite3changeset_start_v2] and [sqlite3changeset_start_v2_strm]: +** +**
SQLITE_CHANGESETSTART_INVERT
+** Invert the changeset while iterating through it. This is equivalent to +** inverting a changeset using sqlite3changeset_invert() before applying it. +** It is an error to specify this flag with a patchset. +*/ +#define SQLITE_CHANGESETSTART_INVERT 0x0002 + + +/* +** CAPI3REF: Advance A Changeset Iterator +** METHOD: sqlite3_changeset_iter +** +** This function may only be used with iterators created by the function +** [sqlite3changeset_start()]. If it is called on an iterator passed to +** a conflict-handler callback by [sqlite3changeset_apply()], SQLITE_MISUSE +** is returned and the call has no effect. +** +** Immediately after an iterator is created by sqlite3changeset_start(), it +** does not point to any change in the changeset. Assuming the changeset +** is not empty, the first call to this function advances the iterator to +** point to the first change in the changeset. Each subsequent call advances +** the iterator to point to the next change in the changeset (if any). If +** no error occurs and the iterator points to a valid change after a call +** to sqlite3changeset_next() has advanced it, SQLITE_ROW is returned. +** Otherwise, if all changes in the changeset have already been visited, +** SQLITE_DONE is returned. +** +** If an error occurs, an SQLite error code is returned. Possible error +** codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or +** SQLITE_NOMEM. +*/ +SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter); + +/* +** CAPI3REF: Obtain The Current Operation From A Changeset Iterator +** METHOD: sqlite3_changeset_iter +** +** The pIter argument passed to this function may either be an iterator +** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator +** created by [sqlite3changeset_start()]. In the latter case, the most recent +** call to [sqlite3changeset_next()] must have returned [SQLITE_ROW]. If this +** is not the case, this function returns [SQLITE_MISUSE]. +** +** Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three +** outputs are set through these pointers: +** +** *pOp is set to one of [SQLITE_INSERT], [SQLITE_DELETE] or [SQLITE_UPDATE], +** depending on the type of change that the iterator currently points to; +** +** *pnCol is set to the number of columns in the table affected by the change; and +** +** *pzTab is set to point to a nul-terminated utf-8 encoded string containing +** the name of the table affected by the current change. The buffer remains +** valid until either sqlite3changeset_next() is called on the iterator +** or until the conflict-handler function returns. +** +** If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change +** is an indirect change, or false (0) otherwise. See the documentation for +** [sqlite3session_indirect()] for a description of direct and indirect +** changes. +** +** If no error occurs, SQLITE_OK is returned. If an error does occur, an +** SQLite error code is returned. The values of the output variables may not +** be trusted in this case. +*/ +SQLITE_API int sqlite3changeset_op( + sqlite3_changeset_iter *pIter, /* Iterator object */ + const char **pzTab, /* OUT: Pointer to table name */ + int *pnCol, /* OUT: Number of columns in table */ + int *pOp, /* OUT: SQLITE_INSERT, DELETE or UPDATE */ + int *pbIndirect /* OUT: True for an 'indirect' change */ +); + +/* +** CAPI3REF: Obtain The Primary Key Definition Of A Table +** METHOD: sqlite3_changeset_iter +** +** For each modified table, a changeset includes the following: +** +**
    +**
  • The number of columns in the table, and +**
  • Which of those columns make up the tables PRIMARY KEY. +**
+** +** This function is used to find which columns comprise the PRIMARY KEY of +** the table modified by the change that iterator pIter currently points to. +** If successful, *pabPK is set to point to an array of nCol entries, where +** nCol is the number of columns in the table. Elements of *pabPK are set to +** 0x01 if the corresponding column is part of the tables primary key, or +** 0x00 if it is not. +** +** If argument pnCol is not NULL, then *pnCol is set to the number of columns +** in the table. +** +** If this function is called when the iterator does not point to a valid +** entry, SQLITE_MISUSE is returned and the output variables zeroed. Otherwise, +** SQLITE_OK is returned and the output variables populated as described +** above. +*/ +SQLITE_API int sqlite3changeset_pk( + sqlite3_changeset_iter *pIter, /* Iterator object */ + unsigned char **pabPK, /* OUT: Array of boolean - true for PK cols */ + int *pnCol /* OUT: Number of entries in output array */ +); + +/* +** CAPI3REF: Obtain old.* Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter +** +** The pIter argument passed to this function may either be an iterator +** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator +** created by [sqlite3changeset_start()]. In the latter case, the most recent +** call to [sqlite3changeset_next()] must have returned SQLITE_ROW. +** Furthermore, it may only be called if the type of change that the iterator +** currently points to is either [SQLITE_DELETE] or [SQLITE_UPDATE]. Otherwise, +** this function returns [SQLITE_MISUSE] and sets *ppValue to NULL. +** +** Argument iVal must be greater than or equal to 0, and less than the number +** of columns in the table affected by the current change. Otherwise, +** [SQLITE_RANGE] is returned and *ppValue is set to NULL. +** +** If successful, this function sets *ppValue to point to a protected +** sqlite3_value object containing the iVal'th value from the vector of +** original row values stored as part of the UPDATE or DELETE change and +** returns SQLITE_OK. The name of the function comes from the fact that this +** is similar to the "old.*" columns available to update or delete triggers. +** +** If some other error occurs (e.g. an OOM condition), an SQLite error code +** is returned and *ppValue is set to NULL. +*/ +SQLITE_API int sqlite3changeset_old( + sqlite3_changeset_iter *pIter, /* Changeset iterator */ + int iVal, /* Column number */ + sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */ +); + +/* +** CAPI3REF: Obtain new.* Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter +** +** The pIter argument passed to this function may either be an iterator +** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator +** created by [sqlite3changeset_start()]. In the latter case, the most recent +** call to [sqlite3changeset_next()] must have returned SQLITE_ROW. +** Furthermore, it may only be called if the type of change that the iterator +** currently points to is either [SQLITE_UPDATE] or [SQLITE_INSERT]. Otherwise, +** this function returns [SQLITE_MISUSE] and sets *ppValue to NULL. +** +** Argument iVal must be greater than or equal to 0, and less than the number +** of columns in the table affected by the current change. Otherwise, +** [SQLITE_RANGE] is returned and *ppValue is set to NULL. +** +** If successful, this function sets *ppValue to point to a protected +** sqlite3_value object containing the iVal'th value from the vector of +** new row values stored as part of the UPDATE or INSERT change and +** returns SQLITE_OK. If the change is an UPDATE and does not include +** a new value for the requested column, *ppValue is set to NULL and +** SQLITE_OK returned. The name of the function comes from the fact that +** this is similar to the "new.*" columns available to update or delete +** triggers. +** +** If some other error occurs (e.g. an OOM condition), an SQLite error code +** is returned and *ppValue is set to NULL. +*/ +SQLITE_API int sqlite3changeset_new( + sqlite3_changeset_iter *pIter, /* Changeset iterator */ + int iVal, /* Column number */ + sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */ +); + +/* +** CAPI3REF: Obtain Conflicting Row Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter +** +** This function should only be used with iterator objects passed to a +** conflict-handler callback by [sqlite3changeset_apply()] with either +** [SQLITE_CHANGESET_DATA] or [SQLITE_CHANGESET_CONFLICT]. If this function +** is called on any other iterator, [SQLITE_MISUSE] is returned and *ppValue +** is set to NULL. +** +** Argument iVal must be greater than or equal to 0, and less than the number +** of columns in the table affected by the current change. Otherwise, +** [SQLITE_RANGE] is returned and *ppValue is set to NULL. +** +** If successful, this function sets *ppValue to point to a protected +** sqlite3_value object containing the iVal'th value from the +** "conflicting row" associated with the current conflict-handler callback +** and returns SQLITE_OK. +** +** If some other error occurs (e.g. an OOM condition), an SQLite error code +** is returned and *ppValue is set to NULL. +*/ +SQLITE_API int sqlite3changeset_conflict( + sqlite3_changeset_iter *pIter, /* Changeset iterator */ + int iVal, /* Column number */ + sqlite3_value **ppValue /* OUT: Value from conflicting row */ +); + +/* +** CAPI3REF: Determine The Number Of Foreign Key Constraint Violations +** METHOD: sqlite3_changeset_iter +** +** This function may only be called with an iterator passed to an +** SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case +** it sets the output variable to the total number of known foreign key +** violations in the destination database and returns SQLITE_OK. +** +** In all other cases this function returns SQLITE_MISUSE. +*/ +SQLITE_API int sqlite3changeset_fk_conflicts( + sqlite3_changeset_iter *pIter, /* Changeset iterator */ + int *pnOut /* OUT: Number of FK violations */ +); + + +/* +** CAPI3REF: Finalize A Changeset Iterator +** METHOD: sqlite3_changeset_iter +** +** This function is used to finalize an iterator allocated with +** [sqlite3changeset_start()]. +** +** This function should only be called on iterators created using the +** [sqlite3changeset_start()] function. If an application calls this +** function with an iterator passed to a conflict-handler by +** [sqlite3changeset_apply()], [SQLITE_MISUSE] is immediately returned and the +** call has no effect. +** +** If an error was encountered within a call to an sqlite3changeset_xxx() +** function (for example an [SQLITE_CORRUPT] in [sqlite3changeset_next()] or an +** [SQLITE_NOMEM] in [sqlite3changeset_new()]) then an error code corresponding +** to that error is returned by this function. Otherwise, SQLITE_OK is +** returned. This is to allow the following pattern (pseudo-code): +** +**
+**   sqlite3changeset_start();
+**   while( SQLITE_ROW==sqlite3changeset_next() ){
+**     // Do something with change.
+**   }
+**   rc = sqlite3changeset_finalize();
+**   if( rc!=SQLITE_OK ){
+**     // An error has occurred
+**   }
+** 
+*/ +SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); + +/* +** CAPI3REF: Invert A Changeset +** +** This function is used to "invert" a changeset object. Applying an inverted +** changeset to a database reverses the effects of applying the uninverted +** changeset. Specifically: +** +**
    +**
  • Each DELETE change is changed to an INSERT, and +**
  • Each INSERT change is changed to a DELETE, and +**
  • For each UPDATE change, the old.* and new.* values are exchanged. +**
+** +** This function does not change the order in which changes appear within +** the changeset. It merely reverses the sense of each individual change. +** +** If successful, a pointer to a buffer containing the inverted changeset +** is stored in *ppOut, the size of the same buffer is stored in *pnOut, and +** SQLITE_OK is returned. If an error occurs, both *pnOut and *ppOut are +** zeroed and an SQLite error code returned. +** +** It is the responsibility of the caller to eventually call sqlite3_free() +** on the *ppOut pointer to free the buffer allocation following a successful +** call to this function. +** +** WARNING/TODO: This function currently assumes that the input is a valid +** changeset. If it is not, the results are undefined. +*/ +SQLITE_API int sqlite3changeset_invert( + int nIn, const void *pIn, /* Input changeset */ + int *pnOut, void **ppOut /* OUT: Inverse of input */ +); + +/* +** CAPI3REF: Concatenate Two Changeset Objects +** +** This function is used to concatenate two changesets, A and B, into a +** single changeset. The result is a changeset equivalent to applying +** changeset A followed by changeset B. +** +** This function combines the two input changesets using an +** sqlite3_changegroup object. Calling it produces similar results as the +** following code fragment: +** +**
+**   sqlite3_changegroup *pGrp;
+**   rc = sqlite3_changegroup_new(&pGrp);
+**   if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA);
+**   if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nB, pB);
+**   if( rc==SQLITE_OK ){
+**     rc = sqlite3changegroup_output(pGrp, pnOut, ppOut);
+**   }else{
+**     *ppOut = 0;
+**     *pnOut = 0;
+**   }
+** 
+** +** Refer to the sqlite3_changegroup documentation below for details. +*/ +SQLITE_API int sqlite3changeset_concat( + int nA, /* Number of bytes in buffer pA */ + void *pA, /* Pointer to buffer containing changeset A */ + int nB, /* Number of bytes in buffer pB */ + void *pB, /* Pointer to buffer containing changeset B */ + int *pnOut, /* OUT: Number of bytes in output changeset */ + void **ppOut /* OUT: Buffer containing output changeset */ +); + +/* +** CAPI3REF: Changegroup Handle +** +** A changegroup is an object used to combine two or more +** [changesets] or [patchsets] +*/ +typedef struct sqlite3_changegroup sqlite3_changegroup; + +/* +** CAPI3REF: Create A New Changegroup Object +** CONSTRUCTOR: sqlite3_changegroup +** +** An sqlite3_changegroup object is used to combine two or more changesets +** (or patchsets) into a single changeset (or patchset). A single changegroup +** object may combine changesets or patchsets, but not both. The output is +** always in the same format as the input. +** +** If successful, this function returns SQLITE_OK and populates (*pp) with +** a pointer to a new sqlite3_changegroup object before returning. The caller +** should eventually free the returned object using a call to +** sqlite3changegroup_delete(). If an error occurs, an SQLite error code +** (i.e. SQLITE_NOMEM) is returned and *pp is set to NULL. +** +** The usual usage pattern for an sqlite3_changegroup object is as follows: +** +**
    +**
  • It is created using a call to sqlite3changegroup_new(). +** +**
  • Zero or more changesets (or patchsets) are added to the object +** by calling sqlite3changegroup_add(). +** +**
  • The result of combining all input changesets together is obtained +** by the application via a call to sqlite3changegroup_output(). +** +**
  • The object is deleted using a call to sqlite3changegroup_delete(). +**
+** +** Any number of calls to add() and output() may be made between the calls to +** new() and delete(), and in any order. +** +** As well as the regular sqlite3changegroup_add() and +** sqlite3changegroup_output() functions, also available are the streaming +** versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm(). +*/ +SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); + +/* +** CAPI3REF: Add a Schema to a Changegroup +** METHOD: sqlite3_changegroup_schema +** +** This method may be used to optionally enforce the rule that the changesets +** added to the changegroup handle must match the schema of database zDb +** ("main", "temp", or the name of an attached database). If +** sqlite3changegroup_add() is called to add a changeset that is not compatible +** with the configured schema, SQLITE_SCHEMA is returned and the changegroup +** object is left in an undefined state. +** +** A changeset schema is considered compatible with the database schema in +** the same way as for sqlite3changeset_apply(). Specifically, for each +** table in the changeset, there exists a database table with: +** +**
    +**
  • The name identified by the changeset, and +**
  • at least as many columns as recorded in the changeset, and +**
  • the primary key columns in the same position as recorded in +** the changeset. +**
+** +** The output of the changegroup object always has the same schema as the +** database nominated using this function. In cases where changesets passed +** to sqlite3changegroup_add() have fewer columns than the corresponding table +** in the database schema, these are filled in using the default column +** values from the database schema. This makes it possible to combined +** changesets that have different numbers of columns for a single table +** within a changegroup, provided that they are otherwise compatible. +*/ +SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb); + +/* +** CAPI3REF: Add A Changeset To A Changegroup +** METHOD: sqlite3_changegroup +** +** Add all changes within the changeset (or patchset) in buffer pData (size +** nData bytes) to the changegroup. +** +** If the buffer contains a patchset, then all prior calls to this function +** on the same changegroup object must also have specified patchsets. Or, if +** the buffer contains a changeset, so must have the earlier calls to this +** function. Otherwise, SQLITE_ERROR is returned and no changes are added +** to the changegroup. +** +** Rows within the changeset and changegroup are identified by the values in +** their PRIMARY KEY columns. A change in the changeset is considered to +** apply to the same row as a change already present in the changegroup if +** the two rows have the same primary key. +** +** Changes to rows that do not already appear in the changegroup are +** simply copied into it. Or, if both the new changeset and the changegroup +** contain changes that apply to a single row, the final contents of the +** changegroup depends on the type of each change, as follows: +** +** +** +** +**
Existing Change New Change Output Change +**
INSERT INSERT +** The new change is ignored. This case does not occur if the new +** changeset was recorded immediately after the changesets already +** added to the changegroup. +**
INSERT UPDATE +** The INSERT change remains in the changegroup. The values in the +** INSERT change are modified as if the row was inserted by the +** existing change and then updated according to the new change. +**
INSERT DELETE +** The existing INSERT is removed from the changegroup. The DELETE is +** not added. +**
UPDATE INSERT +** The new change is ignored. This case does not occur if the new +** changeset was recorded immediately after the changesets already +** added to the changegroup. +**
UPDATE UPDATE +** The existing UPDATE remains within the changegroup. It is amended +** so that the accompanying values are as if the row was updated once +** by the existing change and then again by the new change. +**
UPDATE DELETE +** The existing UPDATE is replaced by the new DELETE within the +** changegroup. +**
DELETE INSERT +** If one or more of the column values in the row inserted by the +** new change differ from those in the row deleted by the existing +** change, the existing DELETE is replaced by an UPDATE within the +** changegroup. Otherwise, if the inserted row is exactly the same +** as the deleted row, the existing DELETE is simply discarded. +**
DELETE UPDATE +** The new change is ignored. This case does not occur if the new +** changeset was recorded immediately after the changesets already +** added to the changegroup. +**
DELETE DELETE +** The new change is ignored. This case does not occur if the new +** changeset was recorded immediately after the changesets already +** added to the changegroup. +**
+** +** If the new changeset contains changes to a table that is already present +** in the changegroup, then the number of columns and the position of the +** primary key columns for the table must be consistent. If this is not the +** case, this function fails with SQLITE_SCHEMA. Except, if the changegroup +** object has been configured with a database schema using the +** sqlite3changegroup_schema() API, then it is possible to combine changesets +** with different numbers of columns for a single table, provided that +** they are otherwise compatible. +** +** If the input changeset appears to be corrupt and the corruption is +** detected, SQLITE_CORRUPT is returned. Or, if an out-of-memory condition +** occurs during processing, this function returns SQLITE_NOMEM. +** +** In all cases, if an error occurs the state of the final contents of the +** changegroup is undefined. If no error occurs, SQLITE_OK is returned. +*/ +SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); + +/* +** CAPI3REF: Add A Single Change To A Changegroup +** METHOD: sqlite3_changegroup +** +** This function adds the single change currently indicated by the iterator +** passed as the second argument to the changegroup object. The rules for +** adding the change are just as described for [sqlite3changegroup_add()]. +** +** If the change is successfully added to the changegroup, SQLITE_OK is +** returned. Otherwise, an SQLite error code is returned. +** +** The iterator must point to a valid entry when this function is called. +** If it does not, SQLITE_ERROR is returned and no change is added to the +** changegroup. Additionally, the iterator must not have been opened with +** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also +** returned. +*/ +SQLITE_API int sqlite3changegroup_add_change( + sqlite3_changegroup*, + sqlite3_changeset_iter* +); + + + +/* +** CAPI3REF: Obtain A Composite Changeset From A Changegroup +** METHOD: sqlite3_changegroup +** +** Obtain a buffer containing a changeset (or patchset) representing the +** current contents of the changegroup. If the inputs to the changegroup +** were themselves changesets, the output is a changeset. Or, if the +** inputs were patchsets, the output is also a patchset. +** +** As with the output of the sqlite3session_changeset() and +** sqlite3session_patchset() functions, all changes related to a single +** table are grouped together in the output of this function. Tables appear +** in the same order as for the very first changeset added to the changegroup. +** If the second or subsequent changesets added to the changegroup contain +** changes for tables that do not appear in the first changeset, they are +** appended onto the end of the output changeset, again in the order in +** which they are first encountered. +** +** If an error occurs, an SQLite error code is returned and the output +** variables (*pnData) and (*ppData) are set to 0. Otherwise, SQLITE_OK +** is returned and the output variables are set to the size of and a +** pointer to the output buffer, respectively. In this case it is the +** responsibility of the caller to eventually free the buffer using a +** call to sqlite3_free(). +*/ +SQLITE_API int sqlite3changegroup_output( + sqlite3_changegroup*, + int *pnData, /* OUT: Size of output buffer in bytes */ + void **ppData /* OUT: Pointer to output buffer */ +); + +/* +** CAPI3REF: Delete A Changegroup Object +** DESTRUCTOR: sqlite3_changegroup +*/ +SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); + +/* +** CAPI3REF: Apply A Changeset To A Database +** +** Apply a changeset or patchset to a database. These functions attempt to +** update the "main" database attached to handle db with the changes found in +** the changeset passed via the second and third arguments. +** +** The fourth argument (xFilter) passed to these functions is the "filter +** callback". If it is not NULL, then for each table affected by at least one +** change in the changeset, the filter callback is invoked with +** the table name as the second argument, and a copy of the context pointer +** passed as the sixth argument as the first. If the "filter callback" +** returns zero, then no attempt is made to apply any changes to the table. +** Otherwise, if the return value is non-zero or the xFilter argument to +** is NULL, all changes related to the table are attempted. +** +** For each table that is not excluded by the filter callback, this function +** tests that the target database contains a compatible table. A table is +** considered compatible if all of the following are true: +** +**
    +**
  • The table has the same name as the name recorded in the +** changeset, and +**
  • The table has at least as many columns as recorded in the +** changeset, and +**
  • The table has primary key columns in the same position as +** recorded in the changeset. +**
+** +** If there is no compatible table, it is not an error, but none of the +** changes associated with the table are applied. A warning message is issued +** via the sqlite3_log() mechanism with the error code SQLITE_SCHEMA. At most +** one such warning is issued for each table in the changeset. +** +** For each change for which there is a compatible table, an attempt is made +** to modify the table contents according to the UPDATE, INSERT or DELETE +** change. If a change cannot be applied cleanly, the conflict handler +** function passed as the fifth argument to sqlite3changeset_apply() may be +** invoked. A description of exactly when the conflict handler is invoked for +** each type of change is below. +** +** Unlike the xFilter argument, xConflict may not be passed NULL. The results +** of passing anything other than a valid function pointer as the xConflict +** argument are undefined. +** +** Each time the conflict handler function is invoked, it must return one +** of [SQLITE_CHANGESET_OMIT], [SQLITE_CHANGESET_ABORT] or +** [SQLITE_CHANGESET_REPLACE]. SQLITE_CHANGESET_REPLACE may only be returned +** if the second argument passed to the conflict handler is either +** SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If the conflict-handler +** returns an illegal value, any changes already made are rolled back and +** the call to sqlite3changeset_apply() returns SQLITE_MISUSE. Different +** actions are taken by sqlite3changeset_apply() depending on the value +** returned by each invocation of the conflict-handler function. Refer to +** the documentation for the three +** [SQLITE_CHANGESET_OMIT|available return values] for details. +** +**
+**
DELETE Changes
+** For each DELETE change, the function checks if the target database +** contains a row with the same primary key value (or values) as the +** original row values stored in the changeset. If it does, and the values +** stored in all non-primary key columns also match the values stored in +** the changeset the row is deleted from the target database. +** +** If a row with matching primary key values is found, but one or more of +** the non-primary key fields contains a value different from the original +** row value stored in the changeset, the conflict-handler function is +** invoked with [SQLITE_CHANGESET_DATA] as the second argument. If the +** database table has more columns than are recorded in the changeset, +** only the values of those non-primary key fields are compared against +** the current database contents - any trailing database table columns +** are ignored. +** +** If no row with matching primary key values is found in the database, +** the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND] +** passed as the second argument. +** +** If the DELETE operation is attempted, but SQLite returns SQLITE_CONSTRAINT +** (which can only happen if a foreign key constraint is violated), the +** conflict-handler function is invoked with [SQLITE_CHANGESET_CONSTRAINT] +** passed as the second argument. This includes the case where the DELETE +** operation is attempted because an earlier call to the conflict handler +** function returned [SQLITE_CHANGESET_REPLACE]. +** +**
INSERT Changes
+** For each INSERT change, an attempt is made to insert the new row into +** the database. If the changeset row contains fewer fields than the +** database table, the trailing fields are populated with their default +** values. +** +** If the attempt to insert the row fails because the database already +** contains a row with the same primary key values, the conflict handler +** function is invoked with the second argument set to +** [SQLITE_CHANGESET_CONFLICT]. +** +** If the attempt to insert the row fails because of some other constraint +** violation (e.g. NOT NULL or UNIQUE), the conflict handler function is +** invoked with the second argument set to [SQLITE_CHANGESET_CONSTRAINT]. +** This includes the case where the INSERT operation is re-attempted because +** an earlier call to the conflict handler function returned +** [SQLITE_CHANGESET_REPLACE]. +** +**
UPDATE Changes
+** For each UPDATE change, the function checks if the target database +** contains a row with the same primary key value (or values) as the +** original row values stored in the changeset. If it does, and the values +** stored in all modified non-primary key columns also match the values +** stored in the changeset the row is updated within the target database. +** +** If a row with matching primary key values is found, but one or more of +** the modified non-primary key fields contains a value different from an +** original row value stored in the changeset, the conflict-handler function +** is invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since +** UPDATE changes only contain values for non-primary key fields that are +** to be modified, only those fields need to match the original values to +** avoid the SQLITE_CHANGESET_DATA conflict-handler callback. +** +** If no row with matching primary key values is found in the database, +** the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND] +** passed as the second argument. +** +** If the UPDATE operation is attempted, but SQLite returns +** SQLITE_CONSTRAINT, the conflict-handler function is invoked with +** [SQLITE_CHANGESET_CONSTRAINT] passed as the second argument. +** This includes the case where the UPDATE operation is attempted after +** an earlier call to the conflict handler function returned +** [SQLITE_CHANGESET_REPLACE]. +**
+** +** It is safe to execute SQL statements, including those that write to the +** table that the callback related to, from within the xConflict callback. +** This can be used to further customize the application's conflict +** resolution strategy. +** +** All changes made by these functions are enclosed in a savepoint transaction. +** If any other error (aside from a constraint failure when attempting to +** write to the target database) occurs, then the savepoint transaction is +** rolled back, restoring the target database to its original state, and an +** SQLite error code returned. +** +** If the output parameters (ppRebase) and (pnRebase) are non-NULL and +** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2() +** may set (*ppRebase) to point to a "rebase" that may be used with the +** sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase) +** is set to the size of the buffer in bytes. It is the responsibility of the +** caller to eventually free any such buffer using sqlite3_free(). The buffer +** is only allocated and populated if one or more conflicts were encountered +** while applying the patchset. See comments surrounding the sqlite3_rebaser +** APIs for further details. +** +** The behavior of sqlite3changeset_apply_v2() and its streaming equivalent +** may be modified by passing a combination of +** [SQLITE_CHANGESETAPPLY_NOSAVEPOINT | supported flags] as the 9th parameter. +** +** Note that the sqlite3changeset_apply_v2() API is still experimental +** and therefore subject to change. +*/ +SQLITE_API int sqlite3changeset_apply( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx /* First argument passed to xConflict */ +); +SQLITE_API int sqlite3changeset_apply_v2( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, /* OUT: Rebase data */ + int flags /* SESSION_CHANGESETAPPLY_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3changeset_apply_v2 +** +** The following flags may passed via the 9th parameter to +** [sqlite3changeset_apply_v2] and [sqlite3changeset_apply_v2_strm]: +** +**
+**
SQLITE_CHANGESETAPPLY_NOSAVEPOINT
+** Usually, the sessions module encloses all operations performed by +** a single call to apply_v2() or apply_v2_strm() in a [SAVEPOINT]. The +** SAVEPOINT is committed if the changeset or patchset is successfully +** applied, or rolled back if an error occurs. Specifying this flag +** causes the sessions module to omit this savepoint. In this case, if the +** caller has an open transaction or savepoint when apply_v2() is called, +** it may revert the partially applied changeset by rolling it back. +** +**
SQLITE_CHANGESETAPPLY_INVERT
+** Invert the changeset before applying it. This is equivalent to inverting +** a changeset using sqlite3changeset_invert() before applying it. It is +** an error to specify this flag with a patchset. +** +**
SQLITE_CHANGESETAPPLY_IGNORENOOP
+** Do not invoke the conflict handler callback for any changes that +** would not actually modify the database even if they were applied. +** Specifically, this means that the conflict handler is not invoked +** for: +**
    +**
  • a delete change if the row being deleted cannot be found, +**
  • an update change if the modified fields are already set to +** their new values in the conflicting row, or +**
  • an insert change if all fields of the conflicting row match +** the row being inserted. +**
+** +**
SQLITE_CHANGESETAPPLY_FKNOACTION
+** If this flag it set, then all foreign key constraints in the target +** database behave as if they were declared with "ON UPDATE NO ACTION ON +** DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL +** or SET DEFAULT. +*/ +#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 +#define SQLITE_CHANGESETAPPLY_INVERT 0x0002 +#define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 +#define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008 + +/* +** CAPI3REF: Constants Passed To The Conflict Handler +** +** Values that may be passed as the second argument to a conflict-handler. +** +**
+**
SQLITE_CHANGESET_DATA
+** The conflict handler is invoked with CHANGESET_DATA as the second argument +** when processing a DELETE or UPDATE change if a row with the required +** PRIMARY KEY fields is present in the database, but one or more other +** (non primary-key) fields modified by the update do not contain the +** expected "before" values. +** +** The conflicting row, in this case, is the database row with the matching +** primary key. +** +**
SQLITE_CHANGESET_NOTFOUND
+** The conflict handler is invoked with CHANGESET_NOTFOUND as the second +** argument when processing a DELETE or UPDATE change if a row with the +** required PRIMARY KEY fields is not present in the database. +** +** There is no conflicting row in this case. The results of invoking the +** sqlite3changeset_conflict() API are undefined. +** +**
SQLITE_CHANGESET_CONFLICT
+** CHANGESET_CONFLICT is passed as the second argument to the conflict +** handler while processing an INSERT change if the operation would result +** in duplicate primary key values. +** +** The conflicting row in this case is the database row with the matching +** primary key. +** +**
SQLITE_CHANGESET_FOREIGN_KEY
+** If foreign key handling is enabled, and applying a changeset leaves the +** database in a state containing foreign key violations, the conflict +** handler is invoked with CHANGESET_FOREIGN_KEY as the second argument +** exactly once before the changeset is committed. If the conflict handler +** returns CHANGESET_OMIT, the changes, including those that caused the +** foreign key constraint violation, are committed. Or, if it returns +** CHANGESET_ABORT, the changeset is rolled back. +** +** No current or conflicting row information is provided. The only function +** it is possible to call on the supplied sqlite3_changeset_iter handle +** is sqlite3changeset_fk_conflicts(). +** +**
SQLITE_CHANGESET_CONSTRAINT
+** If any other constraint violation occurs while applying a change (i.e. +** a UNIQUE, CHECK or NOT NULL constraint), the conflict handler is +** invoked with CHANGESET_CONSTRAINT as the second argument. +** +** There is no conflicting row in this case. The results of invoking the +** sqlite3changeset_conflict() API are undefined. +** +**
+*/ +#define SQLITE_CHANGESET_DATA 1 +#define SQLITE_CHANGESET_NOTFOUND 2 +#define SQLITE_CHANGESET_CONFLICT 3 +#define SQLITE_CHANGESET_CONSTRAINT 4 +#define SQLITE_CHANGESET_FOREIGN_KEY 5 + +/* +** CAPI3REF: Constants Returned By The Conflict Handler +** +** A conflict handler callback must return one of the following three values. +** +**
+**
SQLITE_CHANGESET_OMIT
+** If a conflict handler returns this value no special action is taken. The +** change that caused the conflict is not applied. The session module +** continues to the next change in the changeset. +** +**
SQLITE_CHANGESET_REPLACE
+** This value may only be returned if the second argument to the conflict +** handler was SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If this +** is not the case, any changes applied so far are rolled back and the +** call to sqlite3changeset_apply() returns SQLITE_MISUSE. +** +** If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_DATA conflict +** handler, then the conflicting row is either updated or deleted, depending +** on the type of change. +** +** If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_CONFLICT conflict +** handler, then the conflicting row is removed from the database and a +** second attempt to apply the change is made. If this second attempt fails, +** the original row is restored to the database before continuing. +** +**
SQLITE_CHANGESET_ABORT
+** If this value is returned, any changes applied so far are rolled back +** and the call to sqlite3changeset_apply() returns SQLITE_ABORT. +**
+*/ +#define SQLITE_CHANGESET_OMIT 0 +#define SQLITE_CHANGESET_REPLACE 1 +#define SQLITE_CHANGESET_ABORT 2 + +/* +** CAPI3REF: Rebasing changesets +** EXPERIMENTAL +** +** Suppose there is a site hosting a database in state S0. And that +** modifications are made that move that database to state S1 and a +** changeset recorded (the "local" changeset). Then, a changeset based +** on S0 is received from another site (the "remote" changeset) and +** applied to the database. The database is then in state +** (S1+"remote"), where the exact state depends on any conflict +** resolution decisions (OMIT or REPLACE) made while applying "remote". +** Rebasing a changeset is to update it to take those conflict +** resolution decisions into account, so that the same conflicts +** do not have to be resolved elsewhere in the network. +** +** For example, if both the local and remote changesets contain an +** INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)": +** +** local: INSERT INTO t1 VALUES(1, 'v1'); +** remote: INSERT INTO t1 VALUES(1, 'v2'); +** +** and the conflict resolution is REPLACE, then the INSERT change is +** removed from the local changeset (it was overridden). Or, if the +** conflict resolution was "OMIT", then the local changeset is modified +** to instead contain: +** +** UPDATE t1 SET b = 'v2' WHERE a=1; +** +** Changes within the local changeset are rebased as follows: +** +**
+**
Local INSERT
+** This may only conflict with a remote INSERT. If the conflict +** resolution was OMIT, then add an UPDATE change to the rebased +** changeset. Or, if the conflict resolution was REPLACE, add +** nothing to the rebased changeset. +** +**
Local DELETE
+** This may conflict with a remote UPDATE or DELETE. In both cases the +** only possible resolution is OMIT. If the remote operation was a +** DELETE, then add no change to the rebased changeset. If the remote +** operation was an UPDATE, then the old.* fields of change are updated +** to reflect the new.* values in the UPDATE. +** +**
Local UPDATE
+** This may conflict with a remote UPDATE or DELETE. If it conflicts +** with a DELETE, and the conflict resolution was OMIT, then the update +** is changed into an INSERT. Any undefined values in the new.* record +** from the update change are filled in using the old.* values from +** the conflicting DELETE. Or, if the conflict resolution was REPLACE, +** the UPDATE change is simply omitted from the rebased changeset. +** +** If conflict is with a remote UPDATE and the resolution is OMIT, then +** the old.* values are rebased using the new.* values in the remote +** change. Or, if the resolution is REPLACE, then the change is copied +** into the rebased changeset with updates to columns also updated by +** the conflicting remote UPDATE removed. If this means no columns would +** be updated, the change is omitted. +**
+** +** A local change may be rebased against multiple remote changes +** simultaneously. If a single key is modified by multiple remote +** changesets, they are combined as follows before the local changeset +** is rebased: +** +**
    +**
  • If there has been one or more REPLACE resolutions on a +** key, it is rebased according to a REPLACE. +** +**
  • If there have been no REPLACE resolutions on a key, then +** the local changeset is rebased according to the most recent +** of the OMIT resolutions. +**
+** +** Note that conflict resolutions from multiple remote changesets are +** combined on a per-field basis, not per-row. This means that in the +** case of multiple remote UPDATE operations, some fields of a single +** local change may be rebased for REPLACE while others are rebased for +** OMIT. +** +** In order to rebase a local changeset, the remote changeset must first +** be applied to the local database using sqlite3changeset_apply_v2() and +** the buffer of rebase information captured. Then: +** +**
    +**
  1. An sqlite3_rebaser object is created by calling +** sqlite3rebaser_create(). +**
  2. The new object is configured with the rebase buffer obtained from +** sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure(). +** If the local changeset is to be rebased against multiple remote +** changesets, then sqlite3rebaser_configure() should be called +** multiple times, in the same order that the multiple +** sqlite3changeset_apply_v2() calls were made. +**
  3. Each local changeset is rebased by calling sqlite3rebaser_rebase(). +**
  4. The sqlite3_rebaser object is deleted by calling +** sqlite3rebaser_delete(). +**
+*/ +typedef struct sqlite3_rebaser sqlite3_rebaser; + +/* +** CAPI3REF: Create a changeset rebaser object. +** EXPERIMENTAL +** +** Allocate a new changeset rebaser object. If successful, set (*ppNew) to +** point to the new object and return SQLITE_OK. Otherwise, if an error +** occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew) +** to NULL. +*/ +SQLITE_API int sqlite3rebaser_create(sqlite3_rebaser **ppNew); + +/* +** CAPI3REF: Configure a changeset rebaser object. +** EXPERIMENTAL +** +** Configure the changeset rebaser object to rebase changesets according +** to the conflict resolutions described by buffer pRebase (size nRebase +** bytes), which must have been obtained from a previous call to +** sqlite3changeset_apply_v2(). +*/ +SQLITE_API int sqlite3rebaser_configure( + sqlite3_rebaser*, + int nRebase, const void *pRebase +); + +/* +** CAPI3REF: Rebase a changeset +** EXPERIMENTAL +** +** Argument pIn must point to a buffer containing a changeset nIn bytes +** in size. This function allocates and populates a buffer with a copy +** of the changeset rebased according to the configuration of the +** rebaser object passed as the first argument. If successful, (*ppOut) +** is set to point to the new buffer containing the rebased changeset and +** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the +** responsibility of the caller to eventually free the new buffer using +** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut) +** are set to zero and an SQLite error code returned. +*/ +SQLITE_API int sqlite3rebaser_rebase( + sqlite3_rebaser*, + int nIn, const void *pIn, + int *pnOut, void **ppOut +); + +/* +** CAPI3REF: Delete a changeset rebaser object. +** EXPERIMENTAL +** +** Delete the changeset rebaser object and all associated resources. There +** should be one call to this function for each successful invocation +** of sqlite3rebaser_create(). +*/ +SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p); + +/* +** CAPI3REF: Streaming Versions of API functions. +** +** The six streaming API xxx_strm() functions serve similar purposes to the +** corresponding non-streaming API functions: +** +** +** +**
Streaming functionNon-streaming equivalent
sqlite3changeset_apply_strm[sqlite3changeset_apply] +**
sqlite3changeset_apply_strm_v2[sqlite3changeset_apply_v2] +**
sqlite3changeset_concat_strm[sqlite3changeset_concat] +**
sqlite3changeset_invert_strm[sqlite3changeset_invert] +**
sqlite3changeset_start_strm[sqlite3changeset_start] +**
sqlite3session_changeset_strm[sqlite3session_changeset] +**
sqlite3session_patchset_strm[sqlite3session_patchset] +**
+** +** Non-streaming functions that accept changesets (or patchsets) as input +** require that the entire changeset be stored in a single buffer in memory. +** Similarly, those that return a changeset or patchset do so by returning +** a pointer to a single large buffer allocated using sqlite3_malloc(). +** Normally this is convenient. However, if an application running in a +** low-memory environment is required to handle very large changesets, the +** large contiguous memory allocations required can become onerous. +** +** In order to avoid this problem, instead of a single large buffer, input +** is passed to a streaming API functions by way of a callback function that +** the sessions module invokes to incrementally request input data as it is +** required. In all cases, a pair of API function parameters such as +** +**
+**        int nChangeset,
+**        void *pChangeset,
+**  
+** +** Is replaced by: +** +**
+**        int (*xInput)(void *pIn, void *pData, int *pnData),
+**        void *pIn,
+**  
+** +** Each time the xInput callback is invoked by the sessions module, the first +** argument passed is a copy of the supplied pIn context pointer. The second +** argument, pData, points to a buffer (*pnData) bytes in size. Assuming no +** error occurs the xInput method should copy up to (*pnData) bytes of data +** into the buffer and set (*pnData) to the actual number of bytes copied +** before returning SQLITE_OK. If the input is completely exhausted, (*pnData) +** should be set to zero to indicate this. Or, if an error occurs, an SQLite +** error code should be returned. In all cases, if an xInput callback returns +** an error, all processing is abandoned and the streaming API function +** returns a copy of the error code to the caller. +** +** In the case of sqlite3changeset_start_strm(), the xInput callback may be +** invoked by the sessions module at any point during the lifetime of the +** iterator. If such an xInput callback returns an error, the iterator enters +** an error state, whereby all subsequent calls to iterator functions +** immediately fail with the same error code as returned by xInput. +** +** Similarly, streaming API functions that return changesets (or patchsets) +** return them in chunks by way of a callback function instead of via a +** pointer to a single large buffer. In this case, a pair of parameters such +** as: +** +**
+**        int *pnChangeset,
+**        void **ppChangeset,
+**  
+** +** Is replaced by: +** +**
+**        int (*xOutput)(void *pOut, const void *pData, int nData),
+**        void *pOut
+**  
+** +** The xOutput callback is invoked zero or more times to return data to +** the application. The first parameter passed to each call is a copy of the +** pOut pointer supplied by the application. The second parameter, pData, +** points to a buffer nData bytes in size containing the chunk of output +** data being returned. If the xOutput callback successfully processes the +** supplied data, it should return SQLITE_OK to indicate success. Otherwise, +** it should return some other SQLite error code. In this case processing +** is immediately abandoned and the streaming API function returns a copy +** of the xOutput error code to the application. +** +** The sessions module never invokes an xOutput callback with the third +** parameter set to a value less than or equal to zero. Other than this, +** no guarantees are made as to the size of the chunks of data returned. +*/ +SQLITE_API int sqlite3changeset_apply_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx /* First argument passed to xConflict */ +); +SQLITE_API int sqlite3changeset_apply_v2_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +); +SQLITE_API int sqlite3changeset_concat_strm( + int (*xInputA)(void *pIn, void *pData, int *pnData), + void *pInA, + int (*xInputB)(void *pIn, void *pData, int *pnData), + void *pInB, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); +SQLITE_API int sqlite3changeset_invert_strm( + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); +SQLITE_API int sqlite3changeset_start_strm( + sqlite3_changeset_iter **pp, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn +); +SQLITE_API int sqlite3changeset_start_v2_strm( + sqlite3_changeset_iter **pp, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn, + int flags +); +SQLITE_API int sqlite3session_changeset_strm( + sqlite3_session *pSession, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); +SQLITE_API int sqlite3session_patchset_strm( + sqlite3_session *pSession, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); +SQLITE_API int sqlite3changegroup_add_strm(sqlite3_changegroup*, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn +); +SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); +SQLITE_API int sqlite3rebaser_rebase_strm( + sqlite3_rebaser *pRebaser, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); + +/* +** CAPI3REF: Configure global parameters +** +** The sqlite3session_config() interface is used to make global configuration +** changes to the sessions module in order to tune it to the specific needs +** of the application. +** +** The sqlite3session_config() interface is not threadsafe. If it is invoked +** while any other thread is inside any other sessions method then the +** results are undefined. Furthermore, if it is invoked after any sessions +** related objects have been created, the results are also undefined. +** +** The first argument to the sqlite3session_config() function must be one +** of the SQLITE_SESSION_CONFIG_XXX constants defined below. The +** interpretation of the (void*) value passed as the second parameter and +** the effect of calling this function depends on the value of the first +** parameter. +** +**
+**
SQLITE_SESSION_CONFIG_STRMSIZE
+** By default, the sessions module streaming interfaces attempt to input +** and output data in approximately 1 KiB chunks. This operand may be used +** to set and query the value of this configuration setting. The pointer +** passed as the second argument must point to a value of type (int). +** If this value is greater than 0, it is used as the new streaming data +** chunk size for both input and output. Before returning, the (int) value +** pointed to by pArg is set to the final value of the streaming interface +** chunk size. +**
+** +** This function returns SQLITE_OK if successful, or an SQLite error code +** otherwise. +*/ +SQLITE_API int sqlite3session_config(int op, void *pArg); + +/* +** CAPI3REF: Values for sqlite3session_config(). +*/ +#define SQLITE_SESSION_CONFIG_STRMSIZE 1 + +/* +** Make sure we can call this stuff from C++. +*/ +#ifdef __cplusplus +} +#endif + +#endif /* !defined(__SQLITESESSION_H_) && defined(SQLITE_ENABLE_SESSION) */ + +/******** End of sqlite3session.h *********/ +/******** Begin file fts5.h *********/ +/* +** 2014 May 31 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** Interfaces to extend FTS5. Using the interfaces defined in this file, +** FTS5 may be extended with: +** +** * custom tokenizers, and +** * custom auxiliary functions. +*/ + + +#ifndef _FTS5_H +#define _FTS5_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************* +** CUSTOM AUXILIARY FUNCTIONS +** +** Virtual table implementations may overload SQL functions by implementing +** the sqlite3_module.xFindFunction() method. +*/ + +typedef struct Fts5ExtensionApi Fts5ExtensionApi; +typedef struct Fts5Context Fts5Context; +typedef struct Fts5PhraseIter Fts5PhraseIter; + +typedef void (*fts5_extension_function)( + const Fts5ExtensionApi *pApi, /* API offered by current FTS version */ + Fts5Context *pFts, /* First arg to pass to pApi functions */ + sqlite3_context *pCtx, /* Context for returning result/error */ + int nVal, /* Number of values in apVal[] array */ + sqlite3_value **apVal /* Array of trailing arguments */ +); + +struct Fts5PhraseIter { + const unsigned char *a; + const unsigned char *b; +}; + +/* +** EXTENSION API FUNCTIONS +** +** xUserData(pFts): +** Return a copy of the pUserData pointer passed to the xCreateFunction() +** API when the extension function was registered. +** +** xColumnTotalSize(pFts, iCol, pnToken): +** If parameter iCol is less than zero, set output variable *pnToken +** to the total number of tokens in the FTS5 table. Or, if iCol is +** non-negative but less than the number of columns in the table, return +** the total number of tokens in column iCol, considering all rows in +** the FTS5 table. +** +** If parameter iCol is greater than or equal to the number of columns +** in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g. +** an OOM condition or IO error), an appropriate SQLite error code is +** returned. +** +** xColumnCount(pFts): +** Return the number of columns in the table. +** +** xColumnSize(pFts, iCol, pnToken): +** If parameter iCol is less than zero, set output variable *pnToken +** to the total number of tokens in the current row. Or, if iCol is +** non-negative but less than the number of columns in the table, set +** *pnToken to the number of tokens in column iCol of the current row. +** +** If parameter iCol is greater than or equal to the number of columns +** in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g. +** an OOM condition or IO error), an appropriate SQLite error code is +** returned. +** +** This function may be quite inefficient if used with an FTS5 table +** created with the "columnsize=0" option. +** +** xColumnText: +** If parameter iCol is less than zero, or greater than or equal to the +** number of columns in the table, SQLITE_RANGE is returned. +** +** Otherwise, this function attempts to retrieve the text of column iCol of +** the current document. If successful, (*pz) is set to point to a buffer +** containing the text in utf-8 encoding, (*pn) is set to the size in bytes +** (not characters) of the buffer and SQLITE_OK is returned. Otherwise, +** if an error occurs, an SQLite error code is returned and the final values +** of (*pz) and (*pn) are undefined. +** +** xPhraseCount: +** Returns the number of phrases in the current query expression. +** +** xPhraseSize: +** If parameter iCol is less than zero, or greater than or equal to the +** number of phrases in the current query, as returned by xPhraseCount, +** 0 is returned. Otherwise, this function returns the number of tokens in +** phrase iPhrase of the query. Phrases are numbered starting from zero. +** +** xInstCount: +** Set *pnInst to the total number of occurrences of all phrases within +** the query within the current row. Return SQLITE_OK if successful, or +** an error code (i.e. SQLITE_NOMEM) if an error occurs. +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. If the FTS5 table is created +** with either "detail=none" or "detail=column" and "content=" option +** (i.e. if it is a contentless table), then this API always returns 0. +** +** xInst: +** Query for the details of phrase match iIdx within the current row. +** Phrase matches are numbered starting from zero, so the iIdx argument +** should be greater than or equal to zero and smaller than the value +** output by xInstCount(). If iIdx is less than zero or greater than +** or equal to the value returned by xInstCount(), SQLITE_RANGE is returned. +** +** Otherwise, output parameter *piPhrase is set to the phrase number, *piCol +** to the column in which it occurs and *piOff the token offset of the +** first token of the phrase. SQLITE_OK is returned if successful, or an +** error code (i.e. SQLITE_NOMEM) if an error occurs. +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. +** +** xRowid: +** Returns the rowid of the current row. +** +** xTokenize: +** Tokenize text using the tokenizer belonging to the FTS5 table. +** +** xQueryPhrase(pFts5, iPhrase, pUserData, xCallback): +** This API function is used to query the FTS table for phrase iPhrase +** of the current query. Specifically, a query equivalent to: +** +** ... FROM ftstable WHERE ftstable MATCH $p ORDER BY rowid +** +** with $p set to a phrase equivalent to the phrase iPhrase of the +** current query is executed. Any column filter that applies to +** phrase iPhrase of the current query is included in $p. For each +** row visited, the callback function passed as the fourth argument +** is invoked. The context and API objects passed to the callback +** function may be used to access the properties of each matched row. +** Invoking Api.xUserData() returns a copy of the pointer passed as +** the third argument to pUserData. +** +** If parameter iPhrase is less than zero, or greater than or equal to +** the number of phrases in the query, as returned by xPhraseCount(), +** this function returns SQLITE_RANGE. +** +** If the callback function returns any value other than SQLITE_OK, the +** query is abandoned and the xQueryPhrase function returns immediately. +** If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK. +** Otherwise, the error code is propagated upwards. +** +** If the query runs to completion without incident, SQLITE_OK is returned. +** Or, if some error occurs before the query completes or is aborted by +** the callback, an SQLite error code is returned. +** +** +** xSetAuxdata(pFts5, pAux, xDelete) +** +** Save the pointer passed as the second argument as the extension function's +** "auxiliary data". The pointer may then be retrieved by the current or any +** future invocation of the same fts5 extension function made as part of +** the same MATCH query using the xGetAuxdata() API. +** +** Each extension function is allocated a single auxiliary data slot for +** each FTS query (MATCH expression). If the extension function is invoked +** more than once for a single FTS query, then all invocations share a +** single auxiliary data context. +** +** If there is already an auxiliary data pointer when this function is +** invoked, then it is replaced by the new pointer. If an xDelete callback +** was specified along with the original pointer, it is invoked at this +** point. +** +** The xDelete callback, if one is specified, is also invoked on the +** auxiliary data pointer after the FTS5 query has finished. +** +** If an error (e.g. an OOM condition) occurs within this function, +** the auxiliary data is set to NULL and an error code returned. If the +** xDelete parameter was not NULL, it is invoked on the auxiliary data +** pointer before returning. +** +** +** xGetAuxdata(pFts5, bClear) +** +** Returns the current auxiliary data pointer for the fts5 extension +** function. See the xSetAuxdata() method for details. +** +** If the bClear argument is non-zero, then the auxiliary data is cleared +** (set to NULL) before this function returns. In this case the xDelete, +** if any, is not invoked. +** +** +** xRowCount(pFts5, pnRow) +** +** This function is used to retrieve the total number of rows in the table. +** In other words, the same value that would be returned by: +** +** SELECT count(*) FROM ftstable; +** +** xPhraseFirst() +** This function is used, along with type Fts5PhraseIter and the xPhraseNext +** method, to iterate through all instances of a single query phrase within +** the current row. This is the same information as is accessible via the +** xInstCount/xInst APIs. While the xInstCount/xInst APIs are more convenient +** to use, this API may be faster under some circumstances. To iterate +** through instances of phrase iPhrase, use the following code: +** +** Fts5PhraseIter iter; +** int iCol, iOff; +** for(pApi->xPhraseFirst(pFts, iPhrase, &iter, &iCol, &iOff); +** iCol>=0; +** pApi->xPhraseNext(pFts, &iter, &iCol, &iOff) +** ){ +** // An instance of phrase iPhrase at offset iOff of column iCol +** } +** +** The Fts5PhraseIter structure is defined above. Applications should not +** modify this structure directly - it should only be used as shown above +** with the xPhraseFirst() and xPhraseNext() API methods (and by +** xPhraseFirstColumn() and xPhraseNextColumn() as illustrated below). +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. If the FTS5 table is created +** with either "detail=none" or "detail=column" and "content=" option +** (i.e. if it is a contentless table), then this API always iterates +** through an empty set (all calls to xPhraseFirst() set iCol to -1). +** +** In all cases, matches are visited in (column ASC, offset ASC) order. +** i.e. all those in column 0, sorted by offset, followed by those in +** column 1, etc. +** +** xPhraseNext() +** See xPhraseFirst above. +** +** xPhraseFirstColumn() +** This function and xPhraseNextColumn() are similar to the xPhraseFirst() +** and xPhraseNext() APIs described above. The difference is that instead +** of iterating through all instances of a phrase in the current row, these +** APIs are used to iterate through the set of columns in the current row +** that contain one or more instances of a specified phrase. For example: +** +** Fts5PhraseIter iter; +** int iCol; +** for(pApi->xPhraseFirstColumn(pFts, iPhrase, &iter, &iCol); +** iCol>=0; +** pApi->xPhraseNextColumn(pFts, &iter, &iCol) +** ){ +** // Column iCol contains at least one instance of phrase iPhrase +** } +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" option. If the FTS5 table is created with either +** "detail=none" "content=" option (i.e. if it is a contentless table), +** then this API always iterates through an empty set (all calls to +** xPhraseFirstColumn() set iCol to -1). +** +** The information accessed using this API and its companion +** xPhraseFirstColumn() may also be obtained using xPhraseFirst/xPhraseNext +** (or xInst/xInstCount). The chief advantage of this API is that it is +** significantly more efficient than those alternatives when used with +** "detail=column" tables. +** +** xPhraseNextColumn() +** See xPhraseFirstColumn above. +** +** xQueryToken(pFts5, iPhrase, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase iPhrase of the current +** query. Before returning, output parameter *ppToken is set to point +** to a buffer containing the requested token, and *pnToken to the +** size of this buffer in bytes. +** +** If iPhrase or iToken are less than zero, or if iPhrase is greater than +** or equal to the number of phrases in the query as reported by +** xPhraseCount(), or if iToken is equal to or greater than the number of +** tokens in the phrase, SQLITE_RANGE is returned and *ppToken and *pnToken + are both zeroed. +** +** The output text is not a copy of the query text that specified the +** token. It is the output of the tokenizer module. For tokendata=1 +** tables, this includes any embedded 0x00 and trailing data. +** +** xInstToken(pFts5, iIdx, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase hit iIdx within the +** current row. If iIdx is less than zero or greater than or equal to the +** value returned by xInstCount(), SQLITE_RANGE is returned. Otherwise, +** output variable (*ppToken) is set to point to a buffer containing the +** matching document token, and (*pnToken) to the size of that buffer in +** bytes. +** +** The output text is not a copy of the document text that was tokenized. +** It is the output of the tokenizer module. For tokendata=1 tables, this +** includes any embedded 0x00 and trailing data. +** +** This API may be slow in some cases if the token identified by parameters +** iIdx and iToken matched a prefix token in the query. In most cases, the +** first call to this API for each prefix token in the query is forced +** to scan the portion of the full-text index that matches the prefix +** token to collect the extra data required by this API. If the prefix +** token matches a large number of token instances in the document set, +** this may be a performance problem. +** +** If the user knows in advance that a query may use this API for a +** prefix token, FTS5 may be configured to collect all required data as part +** of the initial querying of the full-text index, avoiding the second scan +** entirely. This also causes prefix queries that do not use this API to +** run more slowly and use more memory. FTS5 may be configured in this way +** either on a per-table basis using the [FTS5 insttoken | 'insttoken'] +** option, or on a per-query basis using the +** [fts5_insttoken | fts5_insttoken()] user function. +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. +** +** xColumnLocale(pFts5, iIdx, pzLocale, pnLocale) +** If parameter iCol is less than zero, or greater than or equal to the +** number of columns in the table, SQLITE_RANGE is returned. +** +** Otherwise, this function attempts to retrieve the locale associated +** with column iCol of the current row. Usually, there is no associated +** locale, and output parameters (*pzLocale) and (*pnLocale) are set +** to NULL and 0, respectively. However, if the fts5_locale() function +** was used to associate a locale with the value when it was inserted +** into the fts5 table, then (*pzLocale) is set to point to a nul-terminated +** buffer containing the name of the locale in utf-8 encoding. (*pnLocale) +** is set to the size in bytes of the buffer, not including the +** nul-terminator. +** +** If successful, SQLITE_OK is returned. Or, if an error occurs, an +** SQLite error code is returned. The final value of the output parameters +** is undefined in this case. +** +** xTokenize_v2: +** Tokenize text using the tokenizer belonging to the FTS5 table. This +** API is the same as the xTokenize() API, except that it allows a tokenizer +** locale to be specified. +*/ +struct Fts5ExtensionApi { + int iVersion; /* Currently always set to 4 */ + + void *(*xUserData)(Fts5Context*); + + int (*xColumnCount)(Fts5Context*); + int (*xRowCount)(Fts5Context*, sqlite3_int64 *pnRow); + int (*xColumnTotalSize)(Fts5Context*, int iCol, sqlite3_int64 *pnToken); + + int (*xTokenize)(Fts5Context*, + const char *pText, int nText, /* Text to tokenize */ + void *pCtx, /* Context passed to xToken() */ + int (*xToken)(void*, int, const char*, int, int, int) /* Callback */ + ); + + int (*xPhraseCount)(Fts5Context*); + int (*xPhraseSize)(Fts5Context*, int iPhrase); + + int (*xInstCount)(Fts5Context*, int *pnInst); + int (*xInst)(Fts5Context*, int iIdx, int *piPhrase, int *piCol, int *piOff); + + sqlite3_int64 (*xRowid)(Fts5Context*); + int (*xColumnText)(Fts5Context*, int iCol, const char **pz, int *pn); + int (*xColumnSize)(Fts5Context*, int iCol, int *pnToken); + + int (*xQueryPhrase)(Fts5Context*, int iPhrase, void *pUserData, + int(*)(const Fts5ExtensionApi*,Fts5Context*,void*) + ); + int (*xSetAuxdata)(Fts5Context*, void *pAux, void(*xDelete)(void*)); + void *(*xGetAuxdata)(Fts5Context*, int bClear); + + int (*xPhraseFirst)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*); + void (*xPhraseNext)(Fts5Context*, Fts5PhraseIter*, int *piCol, int *piOff); + + int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*); + void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol); + + /* Below this point are iVersion>=3 only */ + int (*xQueryToken)(Fts5Context*, + int iPhrase, int iToken, + const char **ppToken, int *pnToken + ); + int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*); + + /* Below this point are iVersion>=4 only */ + int (*xColumnLocale)(Fts5Context*, int iCol, const char **pz, int *pn); + int (*xTokenize_v2)(Fts5Context*, + const char *pText, int nText, /* Text to tokenize */ + const char *pLocale, int nLocale, /* Locale to pass to tokenizer */ + void *pCtx, /* Context passed to xToken() */ + int (*xToken)(void*, int, const char*, int, int, int) /* Callback */ + ); +}; + +/* +** CUSTOM AUXILIARY FUNCTIONS +*************************************************************************/ + +/************************************************************************* +** CUSTOM TOKENIZERS +** +** Applications may also register custom tokenizer types. A tokenizer +** is registered by providing fts5 with a populated instance of the +** following structure. All structure methods must be defined, setting +** any member of the fts5_tokenizer struct to NULL leads to undefined +** behaviour. The structure methods are expected to function as follows: +** +** xCreate: +** This function is used to allocate and initialize a tokenizer instance. +** A tokenizer instance is required to actually tokenize text. +** +** The first argument passed to this function is a copy of the (void*) +** pointer provided by the application when the fts5_tokenizer_v2 object +** was registered with FTS5 (the third argument to xCreateTokenizer()). +** The second and third arguments are an array of nul-terminated strings +** containing the tokenizer arguments, if any, specified following the +** tokenizer name as part of the CREATE VIRTUAL TABLE statement used +** to create the FTS5 table. +** +** The final argument is an output variable. If successful, (*ppOut) +** should be set to point to the new tokenizer handle and SQLITE_OK +** returned. If an error occurs, some value other than SQLITE_OK should +** be returned. In this case, fts5 assumes that the final value of *ppOut +** is undefined. +** +** xDelete: +** This function is invoked to delete a tokenizer handle previously +** allocated using xCreate(). Fts5 guarantees that this function will +** be invoked exactly once for each successful call to xCreate(). +** +** xTokenize: +** This function is expected to tokenize the nText byte string indicated +** by argument pText. pText may or may not be nul-terminated. The first +** argument passed to this function is a pointer to an Fts5Tokenizer object +** returned by an earlier call to xCreate(). +** +** The third argument indicates the reason that FTS5 is requesting +** tokenization of the supplied text. This is always one of the following +** four values: +** +**
  • FTS5_TOKENIZE_DOCUMENT - A document is being inserted into +** or removed from the FTS table. The tokenizer is being invoked to +** determine the set of tokens to add to (or delete from) the +** FTS index. +** +**
  • FTS5_TOKENIZE_QUERY - A MATCH query is being executed +** against the FTS index. The tokenizer is being called to tokenize +** a bareword or quoted string specified as part of the query. +** +**
  • (FTS5_TOKENIZE_QUERY | FTS5_TOKENIZE_PREFIX) - Same as +** FTS5_TOKENIZE_QUERY, except that the bareword or quoted string is +** followed by a "*" character, indicating that the last token +** returned by the tokenizer will be treated as a token prefix. +** +**
  • FTS5_TOKENIZE_AUX - The tokenizer is being invoked to +** satisfy an fts5_api.xTokenize() request made by an auxiliary +** function. Or an fts5_api.xColumnSize() request made by the same +** on a columnsize=0 database. +**
+** +** The sixth and seventh arguments passed to xTokenize() - pLocale and +** nLocale - are a pointer to a buffer containing the locale to use for +** tokenization (e.g. "en_US") and its size in bytes, respectively. The +** pLocale buffer is not nul-terminated. pLocale may be passed NULL (in +** which case nLocale is always 0) to indicate that the tokenizer should +** use its default locale. +** +** For each token in the input string, the supplied callback xToken() must +** be invoked. The first argument to it should be a copy of the pointer +** passed as the second argument to xTokenize(). The third and fourth +** arguments are a pointer to a buffer containing the token text, and the +** size of the token in bytes. The 4th and 5th arguments are the byte offsets +** of the first byte of and first byte immediately following the text from +** which the token is derived within the input. +** +** The second argument passed to the xToken() callback ("tflags") should +** normally be set to 0. The exception is if the tokenizer supports +** synonyms. In this case see the discussion below for details. +** +** FTS5 assumes the xToken() callback is invoked for each token in the +** order that they occur within the input text. +** +** If an xToken() callback returns any value other than SQLITE_OK, then +** the tokenization should be abandoned and the xTokenize() method should +** immediately return a copy of the xToken() return value. Or, if the +** input buffer is exhausted, xTokenize() should return SQLITE_OK. Finally, +** if an error occurs with the xTokenize() implementation itself, it +** may abandon the tokenization and return any error code other than +** SQLITE_OK or SQLITE_DONE. +** +** If the tokenizer is registered using an fts5_tokenizer_v2 object, +** then the xTokenize() method has two additional arguments - pLocale +** and nLocale. These specify the locale that the tokenizer should use +** for the current request. If pLocale and nLocale are both 0, then the +** tokenizer should use its default locale. Otherwise, pLocale points to +** an nLocale byte buffer containing the name of the locale to use as utf-8 +** text. pLocale is not nul-terminated. +** +** FTS5_TOKENIZER +** +** There is also an fts5_tokenizer object. This is an older, deprecated, +** version of fts5_tokenizer_v2. It is similar except that: +** +**
    +**
  • There is no "iVersion" field, and +**
  • The xTokenize() method does not take a locale argument. +**
+** +** Legacy fts5_tokenizer tokenizers must be registered using the +** legacy xCreateTokenizer() function, instead of xCreateTokenizer_v2(). +** +** Tokenizer implementations registered using either API may be retrieved +** using both xFindTokenizer() and xFindTokenizer_v2(). +** +** SYNONYM SUPPORT +** +** Custom tokenizers may also support synonyms. Consider a case in which a +** user wishes to query for a phrase such as "first place". Using the +** built-in tokenizers, the FTS5 query 'first + place' will match instances +** of "first place" within the document set, but not alternative forms +** such as "1st place". In some applications, it would be better to match +** all instances of "first place" or "1st place" regardless of which form +** the user specified in the MATCH query text. +** +** There are several ways to approach this in FTS5: +** +**
  1. By mapping all synonyms to a single token. In this case, using +** the above example, this means that the tokenizer returns the +** same token for inputs "first" and "1st". Say that token is in +** fact "first", so that when the user inserts the document "I won +** 1st place" entries are added to the index for tokens "i", "won", +** "first" and "place". If the user then queries for '1st + place', +** the tokenizer substitutes "first" for "1st" and the query works +** as expected. +** +**
  2. By querying the index for all synonyms of each query term +** separately. In this case, when tokenizing query text, the +** tokenizer may provide multiple synonyms for a single term +** within the document. FTS5 then queries the index for each +** synonym individually. For example, faced with the query: +** +** +** ... MATCH 'first place' +** +** the tokenizer offers both "1st" and "first" as synonyms for the +** first token in the MATCH query and FTS5 effectively runs a query +** similar to: +** +** +** ... MATCH '(first OR 1st) place' +** +** except that, for the purposes of auxiliary functions, the query +** still appears to contain just two phrases - "(first OR 1st)" +** being treated as a single phrase. +** +**
  3. By adding multiple synonyms for a single term to the FTS index. +** Using this method, when tokenizing document text, the tokenizer +** provides multiple synonyms for each token. So that when a +** document such as "I won first place" is tokenized, entries are +** added to the FTS index for "i", "won", "first", "1st" and +** "place". +** +** This way, even if the tokenizer does not provide synonyms +** when tokenizing query text (it should not - to do so would be +** inefficient), it doesn't matter if the user queries for +** 'first + place' or '1st + place', as there are entries in the +** FTS index corresponding to both forms of the first token. +**
+** +** Whether it is parsing document or query text, any call to xToken that +** specifies a tflags argument with the FTS5_TOKEN_COLOCATED bit +** is considered to supply a synonym for the previous token. For example, +** when parsing the document "I won first place", a tokenizer that supports +** synonyms would call xToken() 5 times, as follows: +** +** +** xToken(pCtx, 0, "i", 1, 0, 1); +** xToken(pCtx, 0, "won", 3, 2, 5); +** xToken(pCtx, 0, "first", 5, 6, 11); +** xToken(pCtx, FTS5_TOKEN_COLOCATED, "1st", 3, 6, 11); +** xToken(pCtx, 0, "place", 5, 12, 17); +** +** +** It is an error to specify the FTS5_TOKEN_COLOCATED flag the first time +** xToken() is called. Multiple synonyms may be specified for a single token +** by making multiple calls to xToken(FTS5_TOKEN_COLOCATED) in sequence. +** There is no limit to the number of synonyms that may be provided for a +** single token. +** +** In many cases, method (1) above is the best approach. It does not add +** extra data to the FTS index or require FTS5 to query for multiple terms, +** so it is efficient in terms of disk space and query speed. However, it +** does not support prefix queries very well. If, as suggested above, the +** token "first" is substituted for "1st" by the tokenizer, then the query: +** +** +** ... MATCH '1s*' +** +** will not match documents that contain the token "1st" (as the tokenizer +** will probably not map "1s" to any prefix of "first"). +** +** For full prefix support, method (3) may be preferred. In this case, +** because the index contains entries for both "first" and "1st", prefix +** queries such as 'fi*' or '1s*' will match correctly. However, because +** extra entries are added to the FTS index, this method uses more space +** within the database. +** +** Method (2) offers a midpoint between (1) and (3). Using this method, +** a query such as '1s*' will match documents that contain the literal +** token "1st", but not "first" (assuming the tokenizer is not able to +** provide synonyms for prefixes). However, a non-prefix query like '1st' +** will match against "1st" and "first". This method does not require +** extra disk space, as no extra entries are added to the FTS index. +** On the other hand, it may require more CPU cycles to run MATCH queries, +** as separate queries of the FTS index are required for each synonym. +** +** When using methods (2) or (3), it is important that the tokenizer only +** provide synonyms when tokenizing document text (method (3)) or query +** text (method (2)), not both. Doing so will not cause any errors, but is +** inefficient. +*/ +typedef struct Fts5Tokenizer Fts5Tokenizer; +typedef struct fts5_tokenizer_v2 fts5_tokenizer_v2; +struct fts5_tokenizer_v2 { + int iVersion; /* Currently always 2 */ + + int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut); + void (*xDelete)(Fts5Tokenizer*); + int (*xTokenize)(Fts5Tokenizer*, + void *pCtx, + int flags, /* Mask of FTS5_TOKENIZE_* flags */ + const char *pText, int nText, + const char *pLocale, int nLocale, + int (*xToken)( + void *pCtx, /* Copy of 2nd argument to xTokenize() */ + int tflags, /* Mask of FTS5_TOKEN_* flags */ + const char *pToken, /* Pointer to buffer containing token */ + int nToken, /* Size of token in bytes */ + int iStart, /* Byte offset of token within input text */ + int iEnd /* Byte offset of end of token within input text */ + ) + ); +}; + +/* +** New code should use the fts5_tokenizer_v2 type to define tokenizer +** implementations. The following type is included for legacy applications +** that still use it. +*/ +typedef struct fts5_tokenizer fts5_tokenizer; +struct fts5_tokenizer { + int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut); + void (*xDelete)(Fts5Tokenizer*); + int (*xTokenize)(Fts5Tokenizer*, + void *pCtx, + int flags, /* Mask of FTS5_TOKENIZE_* flags */ + const char *pText, int nText, + int (*xToken)( + void *pCtx, /* Copy of 2nd argument to xTokenize() */ + int tflags, /* Mask of FTS5_TOKEN_* flags */ + const char *pToken, /* Pointer to buffer containing token */ + int nToken, /* Size of token in bytes */ + int iStart, /* Byte offset of token within input text */ + int iEnd /* Byte offset of end of token within input text */ + ) + ); +}; + + +/* Flags that may be passed as the third argument to xTokenize() */ +#define FTS5_TOKENIZE_QUERY 0x0001 +#define FTS5_TOKENIZE_PREFIX 0x0002 +#define FTS5_TOKENIZE_DOCUMENT 0x0004 +#define FTS5_TOKENIZE_AUX 0x0008 + +/* Flags that may be passed by the tokenizer implementation back to FTS5 +** as the third argument to the supplied xToken callback. */ +#define FTS5_TOKEN_COLOCATED 0x0001 /* Same position as prev. token */ + +/* +** END OF CUSTOM TOKENIZERS +*************************************************************************/ + +/************************************************************************* +** FTS5 EXTENSION REGISTRATION API +*/ +typedef struct fts5_api fts5_api; +struct fts5_api { + int iVersion; /* Currently always set to 3 */ + + /* Create a new tokenizer */ + int (*xCreateTokenizer)( + fts5_api *pApi, + const char *zName, + void *pUserData, + fts5_tokenizer *pTokenizer, + void (*xDestroy)(void*) + ); + + /* Find an existing tokenizer */ + int (*xFindTokenizer)( + fts5_api *pApi, + const char *zName, + void **ppUserData, + fts5_tokenizer *pTokenizer + ); + + /* Create a new auxiliary function */ + int (*xCreateFunction)( + fts5_api *pApi, + const char *zName, + void *pUserData, + fts5_extension_function xFunction, + void (*xDestroy)(void*) + ); + + /* APIs below this point are only available if iVersion>=3 */ + + /* Create a new tokenizer */ + int (*xCreateTokenizer_v2)( + fts5_api *pApi, + const char *zName, + void *pUserData, + fts5_tokenizer_v2 *pTokenizer, + void (*xDestroy)(void*) + ); + + /* Find an existing tokenizer */ + int (*xFindTokenizer_v2)( + fts5_api *pApi, + const char *zName, + void **ppUserData, + fts5_tokenizer_v2 **ppTokenizer + ); +}; + +/* +** END OF REGISTRATION API +*************************************************************************/ + +#ifdef __cplusplus +} /* end of the 'extern "C"' block */ +#endif + +#endif /* _FTS5_H */ + +/******** End of fts5.h *********/ +#endif /* SQLITE3_H */ diff --git a/board/mentalnet/overlay/usr/include/sqlite3ext.h b/board/mentalnet/overlay/usr/include/sqlite3ext.h new file mode 100644 index 0000000..cf775df --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sqlite3ext.h @@ -0,0 +1,723 @@ +/* +** 2006 June 7 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This header file defines the SQLite interface for use by +** shared libraries that want to be imported as extensions into +** an SQLite instance. Shared libraries that intend to be loaded +** as extensions by SQLite should #include this file instead of +** sqlite3.h. +*/ +#ifndef SQLITE3EXT_H +#define SQLITE3EXT_H +#include "sqlite3.h" + +/* +** The following structure holds pointers to all of the SQLite API +** routines. +** +** WARNING: In order to maintain backwards compatibility, add new +** interfaces to the end of this structure only. If you insert new +** interfaces in the middle of this structure, then older different +** versions of SQLite will not be able to load each other's shared +** libraries! +*/ +struct sqlite3_api_routines { + void * (*aggregate_context)(sqlite3_context*,int nBytes); + int (*aggregate_count)(sqlite3_context*); + int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*)); + int (*bind_double)(sqlite3_stmt*,int,double); + int (*bind_int)(sqlite3_stmt*,int,int); + int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64); + int (*bind_null)(sqlite3_stmt*,int); + int (*bind_parameter_count)(sqlite3_stmt*); + int (*bind_parameter_index)(sqlite3_stmt*,const char*zName); + const char * (*bind_parameter_name)(sqlite3_stmt*,int); + int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*)); + int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*)); + int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*); + int (*busy_handler)(sqlite3*,int(*)(void*,int),void*); + int (*busy_timeout)(sqlite3*,int ms); + int (*changes)(sqlite3*); + int (*close)(sqlite3*); + int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const char*)); + int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const void*)); + const void * (*column_blob)(sqlite3_stmt*,int iCol); + int (*column_bytes)(sqlite3_stmt*,int iCol); + int (*column_bytes16)(sqlite3_stmt*,int iCol); + int (*column_count)(sqlite3_stmt*pStmt); + const char * (*column_database_name)(sqlite3_stmt*,int); + const void * (*column_database_name16)(sqlite3_stmt*,int); + const char * (*column_decltype)(sqlite3_stmt*,int i); + const void * (*column_decltype16)(sqlite3_stmt*,int); + double (*column_double)(sqlite3_stmt*,int iCol); + int (*column_int)(sqlite3_stmt*,int iCol); + sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol); + const char * (*column_name)(sqlite3_stmt*,int); + const void * (*column_name16)(sqlite3_stmt*,int); + const char * (*column_origin_name)(sqlite3_stmt*,int); + const void * (*column_origin_name16)(sqlite3_stmt*,int); + const char * (*column_table_name)(sqlite3_stmt*,int); + const void * (*column_table_name16)(sqlite3_stmt*,int); + const unsigned char * (*column_text)(sqlite3_stmt*,int iCol); + const void * (*column_text16)(sqlite3_stmt*,int iCol); + int (*column_type)(sqlite3_stmt*,int iCol); + sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol); + void * (*commit_hook)(sqlite3*,int(*)(void*),void*); + int (*complete)(const char*sql); + int (*complete16)(const void*sql); + int (*create_collation)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_collation16)(sqlite3*,const void*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_function)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_function16)(sqlite3*,const void*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*); + int (*data_count)(sqlite3_stmt*pStmt); + sqlite3 * (*db_handle)(sqlite3_stmt*); + int (*declare_vtab)(sqlite3*,const char*); + int (*enable_shared_cache)(int); + int (*errcode)(sqlite3*db); + const char * (*errmsg)(sqlite3*); + const void * (*errmsg16)(sqlite3*); + int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**); + int (*expired)(sqlite3_stmt*); + int (*finalize)(sqlite3_stmt*pStmt); + void (*free)(void*); + void (*free_table)(char**result); + int (*get_autocommit)(sqlite3*); + void * (*get_auxdata)(sqlite3_context*,int); + int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**); + int (*global_recover)(void); + void (*interruptx)(sqlite3*); + sqlite_int64 (*last_insert_rowid)(sqlite3*); + const char * (*libversion)(void); + int (*libversion_number)(void); + void *(*malloc)(int); + char * (*mprintf)(const char*,...); + int (*open)(const char*,sqlite3**); + int (*open16)(const void*,sqlite3**); + int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); + int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); + void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*); + void (*progress_handler)(sqlite3*,int,int(*)(void*),void*); + void *(*realloc)(void*,int); + int (*reset)(sqlite3_stmt*pStmt); + void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_double)(sqlite3_context*,double); + void (*result_error)(sqlite3_context*,const char*,int); + void (*result_error16)(sqlite3_context*,const void*,int); + void (*result_int)(sqlite3_context*,int); + void (*result_int64)(sqlite3_context*,sqlite_int64); + void (*result_null)(sqlite3_context*); + void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*)); + void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_value)(sqlite3_context*,sqlite3_value*); + void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); + int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*, + const char*,const char*),void*); + void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); + char * (*xsnprintf)(int,char*,const char*,...); + int (*step)(sqlite3_stmt*); + int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*, + char const**,char const**,int*,int*,int*); + void (*thread_cleanup)(void); + int (*total_changes)(sqlite3*); + void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); + int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); + void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*, + sqlite_int64),void*); + void * (*user_data)(sqlite3_context*); + const void * (*value_blob)(sqlite3_value*); + int (*value_bytes)(sqlite3_value*); + int (*value_bytes16)(sqlite3_value*); + double (*value_double)(sqlite3_value*); + int (*value_int)(sqlite3_value*); + sqlite_int64 (*value_int64)(sqlite3_value*); + int (*value_numeric_type)(sqlite3_value*); + const unsigned char * (*value_text)(sqlite3_value*); + const void * (*value_text16)(sqlite3_value*); + const void * (*value_text16be)(sqlite3_value*); + const void * (*value_text16le)(sqlite3_value*); + int (*value_type)(sqlite3_value*); + char *(*vmprintf)(const char*,va_list); + /* Added ??? */ + int (*overload_function)(sqlite3*, const char *zFuncName, int nArg); + /* Added by 3.3.13 */ + int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); + int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); + int (*clear_bindings)(sqlite3_stmt*); + /* Added by 3.4.1 */ + int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*, + void (*xDestroy)(void *)); + /* Added by 3.5.0 */ + int (*bind_zeroblob)(sqlite3_stmt*,int,int); + int (*blob_bytes)(sqlite3_blob*); + int (*blob_close)(sqlite3_blob*); + int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64, + int,sqlite3_blob**); + int (*blob_read)(sqlite3_blob*,void*,int,int); + int (*blob_write)(sqlite3_blob*,const void*,int,int); + int (*create_collation_v2)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*), + void(*)(void*)); + int (*file_control)(sqlite3*,const char*,int,void*); + sqlite3_int64 (*memory_highwater)(int); + sqlite3_int64 (*memory_used)(void); + sqlite3_mutex *(*mutex_alloc)(int); + void (*mutex_enter)(sqlite3_mutex*); + void (*mutex_free)(sqlite3_mutex*); + void (*mutex_leave)(sqlite3_mutex*); + int (*mutex_try)(sqlite3_mutex*); + int (*open_v2)(const char*,sqlite3**,int,const char*); + int (*release_memory)(int); + void (*result_error_nomem)(sqlite3_context*); + void (*result_error_toobig)(sqlite3_context*); + int (*sleep)(int); + void (*soft_heap_limit)(int); + sqlite3_vfs *(*vfs_find)(const char*); + int (*vfs_register)(sqlite3_vfs*,int); + int (*vfs_unregister)(sqlite3_vfs*); + int (*xthreadsafe)(void); + void (*result_zeroblob)(sqlite3_context*,int); + void (*result_error_code)(sqlite3_context*,int); + int (*test_control)(int, ...); + void (*randomness)(int,void*); + sqlite3 *(*context_db_handle)(sqlite3_context*); + int (*extended_result_codes)(sqlite3*,int); + int (*limit)(sqlite3*,int,int); + sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*); + const char *(*sql)(sqlite3_stmt*); + int (*status)(int,int*,int*,int); + int (*backup_finish)(sqlite3_backup*); + sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*); + int (*backup_pagecount)(sqlite3_backup*); + int (*backup_remaining)(sqlite3_backup*); + int (*backup_step)(sqlite3_backup*,int); + const char *(*compileoption_get)(int); + int (*compileoption_used)(const char*); + int (*create_function_v2)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*)); + int (*db_config)(sqlite3*,int,...); + sqlite3_mutex *(*db_mutex)(sqlite3*); + int (*db_status)(sqlite3*,int,int*,int*,int); + int (*extended_errcode)(sqlite3*); + void (*log)(int,const char*,...); + sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64); + const char *(*sourceid)(void); + int (*stmt_status)(sqlite3_stmt*,int,int); + int (*strnicmp)(const char*,const char*,int); + int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*); + int (*wal_autocheckpoint)(sqlite3*,int); + int (*wal_checkpoint)(sqlite3*,const char*); + void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*); + int (*blob_reopen)(sqlite3_blob*,sqlite3_int64); + int (*vtab_config)(sqlite3*,int op,...); + int (*vtab_on_conflict)(sqlite3*); + /* Version 3.7.16 and later */ + int (*close_v2)(sqlite3*); + const char *(*db_filename)(sqlite3*,const char*); + int (*db_readonly)(sqlite3*,const char*); + int (*db_release_memory)(sqlite3*); + const char *(*errstr)(int); + int (*stmt_busy)(sqlite3_stmt*); + int (*stmt_readonly)(sqlite3_stmt*); + int (*stricmp)(const char*,const char*); + int (*uri_boolean)(const char*,const char*,int); + sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64); + const char *(*uri_parameter)(const char*,const char*); + char *(*xvsnprintf)(int,char*,const char*,va_list); + int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*); + /* Version 3.8.7 and later */ + int (*auto_extension)(void(*)(void)); + int (*bind_blob64)(sqlite3_stmt*,int,const void*,sqlite3_uint64, + void(*)(void*)); + int (*bind_text64)(sqlite3_stmt*,int,const char*,sqlite3_uint64, + void(*)(void*),unsigned char); + int (*cancel_auto_extension)(void(*)(void)); + int (*load_extension)(sqlite3*,const char*,const char*,char**); + void *(*malloc64)(sqlite3_uint64); + sqlite3_uint64 (*msize)(void*); + void *(*realloc64)(void*,sqlite3_uint64); + void (*reset_auto_extension)(void); + void (*result_blob64)(sqlite3_context*,const void*,sqlite3_uint64, + void(*)(void*)); + void (*result_text64)(sqlite3_context*,const char*,sqlite3_uint64, + void(*)(void*), unsigned char); + int (*strglob)(const char*,const char*); + /* Version 3.8.11 and later */ + sqlite3_value *(*value_dup)(const sqlite3_value*); + void (*value_free)(sqlite3_value*); + int (*result_zeroblob64)(sqlite3_context*,sqlite3_uint64); + int (*bind_zeroblob64)(sqlite3_stmt*, int, sqlite3_uint64); + /* Version 3.9.0 and later */ + unsigned int (*value_subtype)(sqlite3_value*); + void (*result_subtype)(sqlite3_context*,unsigned int); + /* Version 3.10.0 and later */ + int (*status64)(int,sqlite3_int64*,sqlite3_int64*,int); + int (*strlike)(const char*,const char*,unsigned int); + int (*db_cacheflush)(sqlite3*); + /* Version 3.12.0 and later */ + int (*system_errno)(sqlite3*); + /* Version 3.14.0 and later */ + int (*trace_v2)(sqlite3*,unsigned,int(*)(unsigned,void*,void*,void*),void*); + char *(*expanded_sql)(sqlite3_stmt*); + /* Version 3.18.0 and later */ + void (*set_last_insert_rowid)(sqlite3*,sqlite3_int64); + /* Version 3.20.0 and later */ + int (*prepare_v3)(sqlite3*,const char*,int,unsigned int, + sqlite3_stmt**,const char**); + int (*prepare16_v3)(sqlite3*,const void*,int,unsigned int, + sqlite3_stmt**,const void**); + int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*)); + void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*)); + void *(*value_pointer)(sqlite3_value*,const char*); + int (*vtab_nochange)(sqlite3_context*); + int (*value_nochange)(sqlite3_value*); + const char *(*vtab_collation)(sqlite3_index_info*,int); + /* Version 3.24.0 and later */ + int (*keyword_count)(void); + int (*keyword_name)(int,const char**,int*); + int (*keyword_check)(const char*,int); + sqlite3_str *(*str_new)(sqlite3*); + char *(*str_finish)(sqlite3_str*); + void (*str_appendf)(sqlite3_str*, const char *zFormat, ...); + void (*str_vappendf)(sqlite3_str*, const char *zFormat, va_list); + void (*str_append)(sqlite3_str*, const char *zIn, int N); + void (*str_appendall)(sqlite3_str*, const char *zIn); + void (*str_appendchar)(sqlite3_str*, int N, char C); + void (*str_reset)(sqlite3_str*); + int (*str_errcode)(sqlite3_str*); + int (*str_length)(sqlite3_str*); + char *(*str_value)(sqlite3_str*); + /* Version 3.25.0 and later */ + int (*create_window_function)(sqlite3*,const char*,int,int,void*, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInv)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*)); + /* Version 3.26.0 and later */ + const char *(*normalized_sql)(sqlite3_stmt*); + /* Version 3.28.0 and later */ + int (*stmt_isexplain)(sqlite3_stmt*); + int (*value_frombind)(sqlite3_value*); + /* Version 3.30.0 and later */ + int (*drop_modules)(sqlite3*,const char**); + /* Version 3.31.0 and later */ + sqlite3_int64 (*hard_heap_limit64)(sqlite3_int64); + const char *(*uri_key)(const char*,int); + const char *(*filename_database)(const char*); + const char *(*filename_journal)(const char*); + const char *(*filename_wal)(const char*); + /* Version 3.32.0 and later */ + const char *(*create_filename)(const char*,const char*,const char*, + int,const char**); + void (*free_filename)(const char*); + sqlite3_file *(*database_file_object)(const char*); + /* Version 3.34.0 and later */ + int (*txn_state)(sqlite3*,const char*); + /* Version 3.36.1 and later */ + sqlite3_int64 (*changes64)(sqlite3*); + sqlite3_int64 (*total_changes64)(sqlite3*); + /* Version 3.37.0 and later */ + int (*autovacuum_pages)(sqlite3*, + unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int), + void*, void(*)(void*)); + /* Version 3.38.0 and later */ + int (*error_offset)(sqlite3*); + int (*vtab_rhs_value)(sqlite3_index_info*,int,sqlite3_value**); + int (*vtab_distinct)(sqlite3_index_info*); + int (*vtab_in)(sqlite3_index_info*,int,int); + int (*vtab_in_first)(sqlite3_value*,sqlite3_value**); + int (*vtab_in_next)(sqlite3_value*,sqlite3_value**); + /* Version 3.39.0 and later */ + int (*deserialize)(sqlite3*,const char*,unsigned char*, + sqlite3_int64,sqlite3_int64,unsigned); + unsigned char *(*serialize)(sqlite3*,const char *,sqlite3_int64*, + unsigned int); + const char *(*db_name)(sqlite3*,int); + /* Version 3.40.0 and later */ + int (*value_encoding)(sqlite3_value*); + /* Version 3.41.0 and later */ + int (*is_interrupted)(sqlite3*); + /* Version 3.43.0 and later */ + int (*stmt_explain)(sqlite3_stmt*,int); + /* Version 3.44.0 and later */ + void *(*get_clientdata)(sqlite3*,const char*); + int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); + /* Version 3.50.0 and later */ + int (*setlk_timeout)(sqlite3*,int,int); +}; + +/* +** This is the function signature used for all extension entry points. It +** is also defined in the file "loadext.c". +*/ +typedef int (*sqlite3_loadext_entry)( + sqlite3 *db, /* Handle to the database. */ + char **pzErrMsg, /* Used to set error string on failure. */ + const sqlite3_api_routines *pThunk /* Extension API function pointers. */ +); + +/* +** The following macros redefine the API routines so that they are +** redirected through the global sqlite3_api structure. +** +** This header file is also used by the loadext.c source file +** (part of the main SQLite library - not an extension) so that +** it can get access to the sqlite3_api_routines structure +** definition. But the main library does not want to redefine +** the API. So the redefinition macros are only valid if the +** SQLITE_CORE macros is undefined. +*/ +#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) +#define sqlite3_aggregate_context sqlite3_api->aggregate_context +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_aggregate_count sqlite3_api->aggregate_count +#endif +#define sqlite3_bind_blob sqlite3_api->bind_blob +#define sqlite3_bind_double sqlite3_api->bind_double +#define sqlite3_bind_int sqlite3_api->bind_int +#define sqlite3_bind_int64 sqlite3_api->bind_int64 +#define sqlite3_bind_null sqlite3_api->bind_null +#define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count +#define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index +#define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name +#define sqlite3_bind_text sqlite3_api->bind_text +#define sqlite3_bind_text16 sqlite3_api->bind_text16 +#define sqlite3_bind_value sqlite3_api->bind_value +#define sqlite3_busy_handler sqlite3_api->busy_handler +#define sqlite3_busy_timeout sqlite3_api->busy_timeout +#define sqlite3_changes sqlite3_api->changes +#define sqlite3_close sqlite3_api->close +#define sqlite3_collation_needed sqlite3_api->collation_needed +#define sqlite3_collation_needed16 sqlite3_api->collation_needed16 +#define sqlite3_column_blob sqlite3_api->column_blob +#define sqlite3_column_bytes sqlite3_api->column_bytes +#define sqlite3_column_bytes16 sqlite3_api->column_bytes16 +#define sqlite3_column_count sqlite3_api->column_count +#define sqlite3_column_database_name sqlite3_api->column_database_name +#define sqlite3_column_database_name16 sqlite3_api->column_database_name16 +#define sqlite3_column_decltype sqlite3_api->column_decltype +#define sqlite3_column_decltype16 sqlite3_api->column_decltype16 +#define sqlite3_column_double sqlite3_api->column_double +#define sqlite3_column_int sqlite3_api->column_int +#define sqlite3_column_int64 sqlite3_api->column_int64 +#define sqlite3_column_name sqlite3_api->column_name +#define sqlite3_column_name16 sqlite3_api->column_name16 +#define sqlite3_column_origin_name sqlite3_api->column_origin_name +#define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16 +#define sqlite3_column_table_name sqlite3_api->column_table_name +#define sqlite3_column_table_name16 sqlite3_api->column_table_name16 +#define sqlite3_column_text sqlite3_api->column_text +#define sqlite3_column_text16 sqlite3_api->column_text16 +#define sqlite3_column_type sqlite3_api->column_type +#define sqlite3_column_value sqlite3_api->column_value +#define sqlite3_commit_hook sqlite3_api->commit_hook +#define sqlite3_complete sqlite3_api->complete +#define sqlite3_complete16 sqlite3_api->complete16 +#define sqlite3_create_collation sqlite3_api->create_collation +#define sqlite3_create_collation16 sqlite3_api->create_collation16 +#define sqlite3_create_function sqlite3_api->create_function +#define sqlite3_create_function16 sqlite3_api->create_function16 +#define sqlite3_create_module sqlite3_api->create_module +#define sqlite3_create_module_v2 sqlite3_api->create_module_v2 +#define sqlite3_data_count sqlite3_api->data_count +#define sqlite3_db_handle sqlite3_api->db_handle +#define sqlite3_declare_vtab sqlite3_api->declare_vtab +#define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache +#define sqlite3_errcode sqlite3_api->errcode +#define sqlite3_errmsg sqlite3_api->errmsg +#define sqlite3_errmsg16 sqlite3_api->errmsg16 +#define sqlite3_exec sqlite3_api->exec +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_expired sqlite3_api->expired +#endif +#define sqlite3_finalize sqlite3_api->finalize +#define sqlite3_free sqlite3_api->free +#define sqlite3_free_table sqlite3_api->free_table +#define sqlite3_get_autocommit sqlite3_api->get_autocommit +#define sqlite3_get_auxdata sqlite3_api->get_auxdata +#define sqlite3_get_table sqlite3_api->get_table +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_global_recover sqlite3_api->global_recover +#endif +#define sqlite3_interrupt sqlite3_api->interruptx +#define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid +#define sqlite3_libversion sqlite3_api->libversion +#define sqlite3_libversion_number sqlite3_api->libversion_number +#define sqlite3_malloc sqlite3_api->malloc +#define sqlite3_mprintf sqlite3_api->mprintf +#define sqlite3_open sqlite3_api->open +#define sqlite3_open16 sqlite3_api->open16 +#define sqlite3_prepare sqlite3_api->prepare +#define sqlite3_prepare16 sqlite3_api->prepare16 +#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 +#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 +#define sqlite3_profile sqlite3_api->profile +#define sqlite3_progress_handler sqlite3_api->progress_handler +#define sqlite3_realloc sqlite3_api->realloc +#define sqlite3_reset sqlite3_api->reset +#define sqlite3_result_blob sqlite3_api->result_blob +#define sqlite3_result_double sqlite3_api->result_double +#define sqlite3_result_error sqlite3_api->result_error +#define sqlite3_result_error16 sqlite3_api->result_error16 +#define sqlite3_result_int sqlite3_api->result_int +#define sqlite3_result_int64 sqlite3_api->result_int64 +#define sqlite3_result_null sqlite3_api->result_null +#define sqlite3_result_text sqlite3_api->result_text +#define sqlite3_result_text16 sqlite3_api->result_text16 +#define sqlite3_result_text16be sqlite3_api->result_text16be +#define sqlite3_result_text16le sqlite3_api->result_text16le +#define sqlite3_result_value sqlite3_api->result_value +#define sqlite3_rollback_hook sqlite3_api->rollback_hook +#define sqlite3_set_authorizer sqlite3_api->set_authorizer +#define sqlite3_set_auxdata sqlite3_api->set_auxdata +#define sqlite3_snprintf sqlite3_api->xsnprintf +#define sqlite3_step sqlite3_api->step +#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata +#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup +#define sqlite3_total_changes sqlite3_api->total_changes +#define sqlite3_trace sqlite3_api->trace +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_transfer_bindings sqlite3_api->transfer_bindings +#endif +#define sqlite3_update_hook sqlite3_api->update_hook +#define sqlite3_user_data sqlite3_api->user_data +#define sqlite3_value_blob sqlite3_api->value_blob +#define sqlite3_value_bytes sqlite3_api->value_bytes +#define sqlite3_value_bytes16 sqlite3_api->value_bytes16 +#define sqlite3_value_double sqlite3_api->value_double +#define sqlite3_value_int sqlite3_api->value_int +#define sqlite3_value_int64 sqlite3_api->value_int64 +#define sqlite3_value_numeric_type sqlite3_api->value_numeric_type +#define sqlite3_value_text sqlite3_api->value_text +#define sqlite3_value_text16 sqlite3_api->value_text16 +#define sqlite3_value_text16be sqlite3_api->value_text16be +#define sqlite3_value_text16le sqlite3_api->value_text16le +#define sqlite3_value_type sqlite3_api->value_type +#define sqlite3_vmprintf sqlite3_api->vmprintf +#define sqlite3_vsnprintf sqlite3_api->xvsnprintf +#define sqlite3_overload_function sqlite3_api->overload_function +#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 +#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 +#define sqlite3_clear_bindings sqlite3_api->clear_bindings +#define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob +#define sqlite3_blob_bytes sqlite3_api->blob_bytes +#define sqlite3_blob_close sqlite3_api->blob_close +#define sqlite3_blob_open sqlite3_api->blob_open +#define sqlite3_blob_read sqlite3_api->blob_read +#define sqlite3_blob_write sqlite3_api->blob_write +#define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2 +#define sqlite3_file_control sqlite3_api->file_control +#define sqlite3_memory_highwater sqlite3_api->memory_highwater +#define sqlite3_memory_used sqlite3_api->memory_used +#define sqlite3_mutex_alloc sqlite3_api->mutex_alloc +#define sqlite3_mutex_enter sqlite3_api->mutex_enter +#define sqlite3_mutex_free sqlite3_api->mutex_free +#define sqlite3_mutex_leave sqlite3_api->mutex_leave +#define sqlite3_mutex_try sqlite3_api->mutex_try +#define sqlite3_open_v2 sqlite3_api->open_v2 +#define sqlite3_release_memory sqlite3_api->release_memory +#define sqlite3_result_error_nomem sqlite3_api->result_error_nomem +#define sqlite3_result_error_toobig sqlite3_api->result_error_toobig +#define sqlite3_sleep sqlite3_api->sleep +#define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit +#define sqlite3_vfs_find sqlite3_api->vfs_find +#define sqlite3_vfs_register sqlite3_api->vfs_register +#define sqlite3_vfs_unregister sqlite3_api->vfs_unregister +#define sqlite3_threadsafe sqlite3_api->xthreadsafe +#define sqlite3_result_zeroblob sqlite3_api->result_zeroblob +#define sqlite3_result_error_code sqlite3_api->result_error_code +#define sqlite3_test_control sqlite3_api->test_control +#define sqlite3_randomness sqlite3_api->randomness +#define sqlite3_context_db_handle sqlite3_api->context_db_handle +#define sqlite3_extended_result_codes sqlite3_api->extended_result_codes +#define sqlite3_limit sqlite3_api->limit +#define sqlite3_next_stmt sqlite3_api->next_stmt +#define sqlite3_sql sqlite3_api->sql +#define sqlite3_status sqlite3_api->status +#define sqlite3_backup_finish sqlite3_api->backup_finish +#define sqlite3_backup_init sqlite3_api->backup_init +#define sqlite3_backup_pagecount sqlite3_api->backup_pagecount +#define sqlite3_backup_remaining sqlite3_api->backup_remaining +#define sqlite3_backup_step sqlite3_api->backup_step +#define sqlite3_compileoption_get sqlite3_api->compileoption_get +#define sqlite3_compileoption_used sqlite3_api->compileoption_used +#define sqlite3_create_function_v2 sqlite3_api->create_function_v2 +#define sqlite3_db_config sqlite3_api->db_config +#define sqlite3_db_mutex sqlite3_api->db_mutex +#define sqlite3_db_status sqlite3_api->db_status +#define sqlite3_extended_errcode sqlite3_api->extended_errcode +#define sqlite3_log sqlite3_api->log +#define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64 +#define sqlite3_sourceid sqlite3_api->sourceid +#define sqlite3_stmt_status sqlite3_api->stmt_status +#define sqlite3_strnicmp sqlite3_api->strnicmp +#define sqlite3_unlock_notify sqlite3_api->unlock_notify +#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint +#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint +#define sqlite3_wal_hook sqlite3_api->wal_hook +#define sqlite3_blob_reopen sqlite3_api->blob_reopen +#define sqlite3_vtab_config sqlite3_api->vtab_config +#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict +/* Version 3.7.16 and later */ +#define sqlite3_close_v2 sqlite3_api->close_v2 +#define sqlite3_db_filename sqlite3_api->db_filename +#define sqlite3_db_readonly sqlite3_api->db_readonly +#define sqlite3_db_release_memory sqlite3_api->db_release_memory +#define sqlite3_errstr sqlite3_api->errstr +#define sqlite3_stmt_busy sqlite3_api->stmt_busy +#define sqlite3_stmt_readonly sqlite3_api->stmt_readonly +#define sqlite3_stricmp sqlite3_api->stricmp +#define sqlite3_uri_boolean sqlite3_api->uri_boolean +#define sqlite3_uri_int64 sqlite3_api->uri_int64 +#define sqlite3_uri_parameter sqlite3_api->uri_parameter +#define sqlite3_uri_vsnprintf sqlite3_api->xvsnprintf +#define sqlite3_wal_checkpoint_v2 sqlite3_api->wal_checkpoint_v2 +/* Version 3.8.7 and later */ +#define sqlite3_auto_extension sqlite3_api->auto_extension +#define sqlite3_bind_blob64 sqlite3_api->bind_blob64 +#define sqlite3_bind_text64 sqlite3_api->bind_text64 +#define sqlite3_cancel_auto_extension sqlite3_api->cancel_auto_extension +#define sqlite3_load_extension sqlite3_api->load_extension +#define sqlite3_malloc64 sqlite3_api->malloc64 +#define sqlite3_msize sqlite3_api->msize +#define sqlite3_realloc64 sqlite3_api->realloc64 +#define sqlite3_reset_auto_extension sqlite3_api->reset_auto_extension +#define sqlite3_result_blob64 sqlite3_api->result_blob64 +#define sqlite3_result_text64 sqlite3_api->result_text64 +#define sqlite3_strglob sqlite3_api->strglob +/* Version 3.8.11 and later */ +#define sqlite3_value_dup sqlite3_api->value_dup +#define sqlite3_value_free sqlite3_api->value_free +#define sqlite3_result_zeroblob64 sqlite3_api->result_zeroblob64 +#define sqlite3_bind_zeroblob64 sqlite3_api->bind_zeroblob64 +/* Version 3.9.0 and later */ +#define sqlite3_value_subtype sqlite3_api->value_subtype +#define sqlite3_result_subtype sqlite3_api->result_subtype +/* Version 3.10.0 and later */ +#define sqlite3_status64 sqlite3_api->status64 +#define sqlite3_strlike sqlite3_api->strlike +#define sqlite3_db_cacheflush sqlite3_api->db_cacheflush +/* Version 3.12.0 and later */ +#define sqlite3_system_errno sqlite3_api->system_errno +/* Version 3.14.0 and later */ +#define sqlite3_trace_v2 sqlite3_api->trace_v2 +#define sqlite3_expanded_sql sqlite3_api->expanded_sql +/* Version 3.18.0 and later */ +#define sqlite3_set_last_insert_rowid sqlite3_api->set_last_insert_rowid +/* Version 3.20.0 and later */ +#define sqlite3_prepare_v3 sqlite3_api->prepare_v3 +#define sqlite3_prepare16_v3 sqlite3_api->prepare16_v3 +#define sqlite3_bind_pointer sqlite3_api->bind_pointer +#define sqlite3_result_pointer sqlite3_api->result_pointer +#define sqlite3_value_pointer sqlite3_api->value_pointer +/* Version 3.22.0 and later */ +#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange +#define sqlite3_value_nochange sqlite3_api->value_nochange +#define sqlite3_vtab_collation sqlite3_api->vtab_collation +/* Version 3.24.0 and later */ +#define sqlite3_keyword_count sqlite3_api->keyword_count +#define sqlite3_keyword_name sqlite3_api->keyword_name +#define sqlite3_keyword_check sqlite3_api->keyword_check +#define sqlite3_str_new sqlite3_api->str_new +#define sqlite3_str_finish sqlite3_api->str_finish +#define sqlite3_str_appendf sqlite3_api->str_appendf +#define sqlite3_str_vappendf sqlite3_api->str_vappendf +#define sqlite3_str_append sqlite3_api->str_append +#define sqlite3_str_appendall sqlite3_api->str_appendall +#define sqlite3_str_appendchar sqlite3_api->str_appendchar +#define sqlite3_str_reset sqlite3_api->str_reset +#define sqlite3_str_errcode sqlite3_api->str_errcode +#define sqlite3_str_length sqlite3_api->str_length +#define sqlite3_str_value sqlite3_api->str_value +/* Version 3.25.0 and later */ +#define sqlite3_create_window_function sqlite3_api->create_window_function +/* Version 3.26.0 and later */ +#define sqlite3_normalized_sql sqlite3_api->normalized_sql +/* Version 3.28.0 and later */ +#define sqlite3_stmt_isexplain sqlite3_api->stmt_isexplain +#define sqlite3_value_frombind sqlite3_api->value_frombind +/* Version 3.30.0 and later */ +#define sqlite3_drop_modules sqlite3_api->drop_modules +/* Version 3.31.0 and later */ +#define sqlite3_hard_heap_limit64 sqlite3_api->hard_heap_limit64 +#define sqlite3_uri_key sqlite3_api->uri_key +#define sqlite3_filename_database sqlite3_api->filename_database +#define sqlite3_filename_journal sqlite3_api->filename_journal +#define sqlite3_filename_wal sqlite3_api->filename_wal +/* Version 3.32.0 and later */ +#define sqlite3_create_filename sqlite3_api->create_filename +#define sqlite3_free_filename sqlite3_api->free_filename +#define sqlite3_database_file_object sqlite3_api->database_file_object +/* Version 3.34.0 and later */ +#define sqlite3_txn_state sqlite3_api->txn_state +/* Version 3.36.1 and later */ +#define sqlite3_changes64 sqlite3_api->changes64 +#define sqlite3_total_changes64 sqlite3_api->total_changes64 +/* Version 3.37.0 and later */ +#define sqlite3_autovacuum_pages sqlite3_api->autovacuum_pages +/* Version 3.38.0 and later */ +#define sqlite3_error_offset sqlite3_api->error_offset +#define sqlite3_vtab_rhs_value sqlite3_api->vtab_rhs_value +#define sqlite3_vtab_distinct sqlite3_api->vtab_distinct +#define sqlite3_vtab_in sqlite3_api->vtab_in +#define sqlite3_vtab_in_first sqlite3_api->vtab_in_first +#define sqlite3_vtab_in_next sqlite3_api->vtab_in_next +/* Version 3.39.0 and later */ +#ifndef SQLITE_OMIT_DESERIALIZE +#define sqlite3_deserialize sqlite3_api->deserialize +#define sqlite3_serialize sqlite3_api->serialize +#endif +#define sqlite3_db_name sqlite3_api->db_name +/* Version 3.40.0 and later */ +#define sqlite3_value_encoding sqlite3_api->value_encoding +/* Version 3.41.0 and later */ +#define sqlite3_is_interrupted sqlite3_api->is_interrupted +/* Version 3.43.0 and later */ +#define sqlite3_stmt_explain sqlite3_api->stmt_explain +/* Version 3.44.0 and later */ +#define sqlite3_get_clientdata sqlite3_api->get_clientdata +#define sqlite3_set_clientdata sqlite3_api->set_clientdata +/* Version 3.50.0 and later */ +#define sqlite3_setlk_timeout sqlite3_api->setlk_timeout +#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ + +#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) + /* This case when the file really is being compiled as a loadable + ** extension */ +# define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api=0; +# define SQLITE_EXTENSION_INIT2(v) sqlite3_api=v; +# define SQLITE_EXTENSION_INIT3 \ + extern const sqlite3_api_routines *sqlite3_api; +#else + /* This case when the file is being statically linked into the + ** application */ +# define SQLITE_EXTENSION_INIT1 /*no-op*/ +# define SQLITE_EXTENSION_INIT2(v) (void)v; /* unused parameter */ +# define SQLITE_EXTENSION_INIT3 /*no-op*/ +#endif + +#endif /* SQLITE3EXT_H */ diff --git a/board/mentalnet/overlay/usr/include/stab.h b/board/mentalnet/overlay/usr/include/stab.h new file mode 100644 index 0000000..9dc3c32 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stab.h @@ -0,0 +1,17 @@ +#ifndef __GNU_STAB__ + +/* Indicate the GNU stab.h is in use. */ + +#define __GNU_STAB__ + +#define __define_stab(NAME, CODE, STRING) NAME=CODE, + +enum __stab_debug_code +{ +#include +LAST_UNUSED_STAB_CODE +}; + +#undef __define_stab + +#endif /* __GNU_STAB_ */ diff --git a/board/mentalnet/overlay/usr/include/stdbit.h b/board/mentalnet/overlay/usr/include/stdbit.h new file mode 100644 index 0000000..4afa436 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stdbit.h @@ -0,0 +1,848 @@ +/* ISO C23 Standard: 7.18 - Bit and byte utilities . + Copyright (C) 2024-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _STDBIT_H +#define _STDBIT_H 1 + +#include +#include +#include +#include +#include +/* In C23, defines only an implementation-namespace macro, + so is OK to include here. Before C23, including allows + the header to use bool rather than _Bool unconditionally, and so to + compile as C++ (although the type-generic macros are not a good + form of type-generic interface for C++). */ +#include +#define __need_size_t +#include + +#define __STDC_VERSION_STDBIT_H__ 202311L + +#define __STDC_ENDIAN_LITTLE__ __LITTLE_ENDIAN +#define __STDC_ENDIAN_BIG__ __BIG_ENDIAN +#define __STDC_ENDIAN_NATIVE__ __BYTE_ORDER + +__BEGIN_DECLS + +/* Use __pacify_uint16 (N) instead of (uint16_t) (N) when the cast is helpful + only to pacify older GCC (e.g., GCC 10 -Wconversion) or non-GCC (e.g + clang -Wimplicit-int-conversion). */ +#if __GNUC_PREREQ (11, 0) +# define __pacify_uint8(n) (n) +# define __pacify_uint16(n) (n) +#else +# define __pacify_uint8(n) ((uint8_t) (n)) +# define __pacify_uint16(n) ((uint16_t) (n)) +#endif + +/* Count leading zeros. */ +extern unsigned int stdc_leading_zeros_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_leading_zeros_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_leading_zeros_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_leading_zeros_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_leading_zeros_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_leading_zeros) +# define stdc_leading_zeros(x) (__builtin_stdc_leading_zeros (x)) +#else +# define stdc_leading_zeros(x) \ + (stdc_leading_zeros_ull (x) \ + - (unsigned int) (8 * (sizeof (0ULL) - sizeof (x)))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline unsigned int +__clz64_inline (uint64_t __x) +{ + return __x == 0 ? 64U : (unsigned int) __builtin_clzll (__x); +} + +static __always_inline unsigned int +__clz32_inline (uint32_t __x) +{ + return __x == 0 ? 32U : (unsigned int) __builtin_clz (__x); +} + +static __always_inline unsigned int +__clz16_inline (uint16_t __x) +{ + return __clz32_inline (__x) - 16; +} + +static __always_inline unsigned int +__clz8_inline (uint8_t __x) +{ + return __clz32_inline (__x) - 24; +} + +# define stdc_leading_zeros_uc(x) (__clz8_inline (x)) +# define stdc_leading_zeros_us(x) (__clz16_inline (x)) +# define stdc_leading_zeros_ui(x) (__clz32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_leading_zeros_ul(x) (__clz64_inline (x)) +# else +# define stdc_leading_zeros_ul(x) (__clz32_inline (x)) +# endif +# define stdc_leading_zeros_ull(x) (__clz64_inline (x)) +#endif + +/* Count leading ones. */ +extern unsigned int stdc_leading_ones_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_leading_ones_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_leading_ones_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_leading_ones_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_leading_ones_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_leading_ones) +# define stdc_leading_ones(x) (__builtin_stdc_leading_ones (x)) +#else +# define stdc_leading_ones(x) \ + (stdc_leading_ones_ull ((unsigned long long int) (x) \ + << 8 * (sizeof (0ULL) - sizeof (x)))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline unsigned int +__clo64_inline (uint64_t __x) +{ + return __clz64_inline (~__x); +} + +static __always_inline unsigned int +__clo32_inline (uint32_t __x) +{ + return __clz32_inline (~__x); +} + +static __always_inline unsigned int +__clo16_inline (uint16_t __x) +{ + return __clz16_inline (__pacify_uint16 (~__x)); +} + +static __always_inline unsigned int +__clo8_inline (uint8_t __x) +{ + return __clz8_inline (__pacify_uint8 (~__x)); +} + +# define stdc_leading_ones_uc(x) (__clo8_inline (x)) +# define stdc_leading_ones_us(x) (__clo16_inline (x)) +# define stdc_leading_ones_ui(x) (__clo32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_leading_ones_ul(x) (__clo64_inline (x)) +# else +# define stdc_leading_ones_ul(x) (__clo32_inline (x)) +# endif +# define stdc_leading_ones_ull(x) (__clo64_inline (x)) +#endif + +/* Count trailing zeros. */ +extern unsigned int stdc_trailing_zeros_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_trailing_zeros_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_trailing_zeros_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_trailing_zeros_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_trailing_zeros_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_trailing_zeros) +# define stdc_trailing_zeros(x) (__builtin_stdc_trailing_zeros (x)) +#else +# define stdc_trailing_zeros(x) \ + (sizeof (x) == 8 ? stdc_trailing_zeros_ull (x) \ + : sizeof (x) == 4 ? stdc_trailing_zeros_ui (x) \ + : sizeof (x) == 2 ? stdc_trailing_zeros_us (__pacify_uint16 (x)) \ + : stdc_trailing_zeros_uc (__pacify_uint8 (x))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_ctzll) +static __always_inline unsigned int +__ctz64_inline (uint64_t __x) +{ + return __x == 0 ? 64U : (unsigned int) __builtin_ctzll (__x); +} + +static __always_inline unsigned int +__ctz32_inline (uint32_t __x) +{ + return __x == 0 ? 32U : (unsigned int) __builtin_ctz (__x); +} + +static __always_inline unsigned int +__ctz16_inline (uint16_t __x) +{ + return __x == 0 ? 16U : (unsigned int) __builtin_ctz (__x); +} + +static __always_inline unsigned int +__ctz8_inline (uint8_t __x) +{ + return __x == 0 ? 8U : (unsigned int) __builtin_ctz (__x); +} + +# define stdc_trailing_zeros_uc(x) (__ctz8_inline (x)) +# define stdc_trailing_zeros_us(x) (__ctz16_inline (x)) +# define stdc_trailing_zeros_ui(x) (__ctz32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_trailing_zeros_ul(x) (__ctz64_inline (x)) +# else +# define stdc_trailing_zeros_ul(x) (__ctz32_inline (x)) +# endif +# define stdc_trailing_zeros_ull(x) (__ctz64_inline (x)) +#endif + +/* Count trailing ones. */ +extern unsigned int stdc_trailing_ones_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_trailing_ones_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_trailing_ones_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_trailing_ones_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_trailing_ones_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_trailing_ones) +# define stdc_trailing_ones(x) (__builtin_stdc_trailing_ones (x)) +#else +# define stdc_trailing_ones(x) (stdc_trailing_ones_ull (x)) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_ctzll) +static __always_inline unsigned int +__cto64_inline (uint64_t __x) +{ + return __ctz64_inline (~__x); +} + +static __always_inline unsigned int +__cto32_inline (uint32_t __x) +{ + return __ctz32_inline (~__x); +} + +static __always_inline unsigned int +__cto16_inline (uint16_t __x) +{ + return __ctz16_inline (__pacify_uint16 (~__x)); +} + +static __always_inline unsigned int +__cto8_inline (uint8_t __x) +{ + return __ctz8_inline (__pacify_uint8 (~__x)); +} + +# define stdc_trailing_ones_uc(x) (__cto8_inline (x)) +# define stdc_trailing_ones_us(x) (__cto16_inline (x)) +# define stdc_trailing_ones_ui(x) (__cto32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_trailing_ones_ul(x) (__cto64_inline (x)) +# else +# define stdc_trailing_ones_ul(x) (__cto32_inline (x)) +# endif +# define stdc_trailing_ones_ull(x) (__cto64_inline (x)) +#endif + +/* First leading zero. */ +extern unsigned int stdc_first_leading_zero_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_leading_zero_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_leading_zero_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_leading_zero_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_first_leading_zero_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_first_leading_zero) +# define stdc_first_leading_zero(x) (__builtin_stdc_first_leading_zero (x)) +#else +# define stdc_first_leading_zero(x) \ + (sizeof (x) == 8 ? stdc_first_leading_zero_ull (x) \ + : sizeof (x) == 4 ? stdc_first_leading_zero_ui (x) \ + : sizeof (x) == 2 ? stdc_first_leading_zero_us (__pacify_uint16 (x)) \ + : stdc_first_leading_zero_uc (__pacify_uint8 (x))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline unsigned int +__flz64_inline (uint64_t __x) +{ + return __x == (uint64_t) -1 ? 0 : 1 + __clo64_inline (__x); +} + +static __always_inline unsigned int +__flz32_inline (uint32_t __x) +{ + return __x == (uint32_t) -1 ? 0 : 1 + __clo32_inline (__x); +} + +static __always_inline unsigned int +__flz16_inline (uint16_t __x) +{ + return __x == (uint16_t) -1 ? 0 : 1 + __clo16_inline (__x); +} + +static __always_inline unsigned int +__flz8_inline (uint8_t __x) +{ + return __x == (uint8_t) -1 ? 0 : 1 + __clo8_inline (__x); +} + +# define stdc_first_leading_zero_uc(x) (__flz8_inline (x)) +# define stdc_first_leading_zero_us(x) (__flz16_inline (x)) +# define stdc_first_leading_zero_ui(x) (__flz32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_first_leading_zero_ul(x) (__flz64_inline (x)) +# else +# define stdc_first_leading_zero_ul(x) (__flz32_inline (x)) +# endif +# define stdc_first_leading_zero_ull(x) (__flz64_inline (x)) +#endif + +/* First leading one. */ +extern unsigned int stdc_first_leading_one_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_leading_one_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_leading_one_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_leading_one_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_first_leading_one_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_first_leading_one) +# define stdc_first_leading_one(x) (__builtin_stdc_first_leading_one (x)) +#else +# define stdc_first_leading_one(x) \ + (sizeof (x) == 8 ? stdc_first_leading_one_ull (x) \ + : sizeof (x) == 4 ? stdc_first_leading_one_ui (x) \ + : sizeof (x) == 2 ? stdc_first_leading_one_us (__pacify_uint16 (x)) \ + : stdc_first_leading_one_uc (__pacify_uint8 (x))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline unsigned int +__flo64_inline (uint64_t __x) +{ + return __x == 0 ? 0 : 1 + __clz64_inline (__x); +} + +static __always_inline unsigned int +__flo32_inline (uint32_t __x) +{ + return __x == 0 ? 0 : 1 + __clz32_inline (__x); +} + +static __always_inline unsigned int +__flo16_inline (uint16_t __x) +{ + return __x == 0 ? 0 : 1 + __clz16_inline (__x); +} + +static __always_inline unsigned int +__flo8_inline (uint8_t __x) +{ + return __x == 0 ? 0 : 1 + __clz8_inline (__x); +} + +# define stdc_first_leading_one_uc(x) (__flo8_inline (x)) +# define stdc_first_leading_one_us(x) (__flo16_inline (x)) +# define stdc_first_leading_one_ui(x) (__flo32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_first_leading_one_ul(x) (__flo64_inline (x)) +# else +# define stdc_first_leading_one_ul(x) (__flo32_inline (x)) +# endif +# define stdc_first_leading_one_ull(x) (__flo64_inline (x)) +#endif + +/* First trailing zero. */ +extern unsigned int stdc_first_trailing_zero_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_trailing_zero_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_trailing_zero_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_trailing_zero_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_first_trailing_zero_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_first_trailing_zero) +# define stdc_first_trailing_zero(x) (__builtin_stdc_first_trailing_zero (x)) +#else +# define stdc_first_trailing_zero(x) \ + (sizeof (x) == 8 ? stdc_first_trailing_zero_ull (x) \ + : sizeof (x) == 4 ? stdc_first_trailing_zero_ui (x) \ + : sizeof (x) == 2 ? stdc_first_trailing_zero_us (__pacify_uint16 (x)) \ + : stdc_first_trailing_zero_uc (__pacify_uint8 (x))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_ctzll) +static __always_inline unsigned int +__ftz64_inline (uint64_t __x) +{ + return __x == (uint64_t) -1 ? 0 : 1 + __cto64_inline (__x); +} + +static __always_inline unsigned int +__ftz32_inline (uint32_t __x) +{ + return __x == (uint32_t) -1 ? 0 : 1 + __cto32_inline (__x); +} + +static __always_inline unsigned int +__ftz16_inline (uint16_t __x) +{ + return __x == (uint16_t) -1 ? 0 : 1 + __cto16_inline (__x); +} + +static __always_inline unsigned int +__ftz8_inline (uint8_t __x) +{ + return __x == (uint8_t) -1 ? 0 : 1 + __cto8_inline (__x); +} + +# define stdc_first_trailing_zero_uc(x) (__ftz8_inline (x)) +# define stdc_first_trailing_zero_us(x) (__ftz16_inline (x)) +# define stdc_first_trailing_zero_ui(x) (__ftz32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_first_trailing_zero_ul(x) (__ftz64_inline (x)) +# else +# define stdc_first_trailing_zero_ul(x) (__ftz32_inline (x)) +# endif +# define stdc_first_trailing_zero_ull(x) (__ftz64_inline (x)) +#endif + +/* First trailing one. */ +extern unsigned int stdc_first_trailing_one_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_trailing_one_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_trailing_one_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_first_trailing_one_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_first_trailing_one_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_first_trailing_one) +# define stdc_first_trailing_one(x) (__builtin_stdc_first_trailing_one (x)) +#else +# define stdc_first_trailing_one(x) \ + (sizeof (x) == 8 ? stdc_first_trailing_one_ull (x) \ + : sizeof (x) == 4 ? stdc_first_trailing_one_ui (x) \ + : sizeof (x) == 2 ? stdc_first_trailing_one_us (__pacify_uint16 (x)) \ + : stdc_first_trailing_one_uc (__pacify_uint8 (x))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_ctzll) +static __always_inline unsigned int +__fto64_inline (uint64_t __x) +{ + return __x == 0 ? 0 : 1 + __ctz64_inline (__x); +} + +static __always_inline unsigned int +__fto32_inline (uint32_t __x) +{ + return __x == 0 ? 0 : 1 + __ctz32_inline (__x); +} + +static __always_inline unsigned int +__fto16_inline (uint16_t __x) +{ + return __x == 0 ? 0 : 1 + __ctz16_inline (__x); +} + +static __always_inline unsigned int +__fto8_inline (uint8_t __x) +{ + return __x == 0 ? 0 : 1 + __ctz8_inline (__x); +} + +# define stdc_first_trailing_one_uc(x) (__fto8_inline (x)) +# define stdc_first_trailing_one_us(x) (__fto16_inline (x)) +# define stdc_first_trailing_one_ui(x) (__fto32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_first_trailing_one_ul(x) (__fto64_inline (x)) +# else +# define stdc_first_trailing_one_ul(x) (__fto32_inline (x)) +# endif +# define stdc_first_trailing_one_ull(x) (__fto64_inline (x)) +#endif + +/* Count zeros. */ +extern unsigned int stdc_count_zeros_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_count_zeros_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_count_zeros_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_count_zeros_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_count_zeros_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_count_zeros) +# define stdc_count_zeros(x) (__builtin_stdc_count_zeros (x)) +#else +# define stdc_count_zeros(x) \ + (stdc_count_zeros_ull (x) \ + - (unsigned int) (8 * (sizeof (0ULL) - sizeof (x)))) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_popcountll) +static __always_inline unsigned int +__cz64_inline (uint64_t __x) +{ + return 64U - (unsigned int) __builtin_popcountll (__x); +} + +static __always_inline unsigned int +__cz32_inline (uint32_t __x) +{ + return 32U - (unsigned int) __builtin_popcount (__x); +} + +static __always_inline unsigned int +__cz16_inline (uint16_t __x) +{ + return 16U - (unsigned int) __builtin_popcount (__x); +} + +static __always_inline unsigned int +__cz8_inline (uint8_t __x) +{ + return 8U - (unsigned int) __builtin_popcount (__x); +} + +# define stdc_count_zeros_uc(x) (__cz8_inline (x)) +# define stdc_count_zeros_us(x) (__cz16_inline (x)) +# define stdc_count_zeros_ui(x) (__cz32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_count_zeros_ul(x) (__cz64_inline (x)) +# else +# define stdc_count_zeros_ul(x) (__cz32_inline (x)) +# endif +# define stdc_count_zeros_ull(x) (__cz64_inline (x)) +#endif + +/* Count ones. */ +extern unsigned int stdc_count_ones_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_count_ones_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_count_ones_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_count_ones_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_count_ones_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_count_ones) +# define stdc_count_ones(x) (__builtin_stdc_count_ones (x)) +#else +# define stdc_count_ones(x) (stdc_count_ones_ull (x)) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_popcountll) +static __always_inline unsigned int +__co64_inline (uint64_t __x) +{ + return (unsigned int) __builtin_popcountll (__x); +} + +static __always_inline unsigned int +__co32_inline (uint32_t __x) +{ + return (unsigned int) __builtin_popcount (__x); +} + +static __always_inline unsigned int +__co16_inline (uint16_t __x) +{ + return (unsigned int) __builtin_popcount (__x); +} + +static __always_inline unsigned int +__co8_inline (uint8_t __x) +{ + return (unsigned int) __builtin_popcount (__x); +} + +# define stdc_count_ones_uc(x) (__co8_inline (x)) +# define stdc_count_ones_us(x) (__co16_inline (x)) +# define stdc_count_ones_ui(x) (__co32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_count_ones_ul(x) (__co64_inline (x)) +# else +# define stdc_count_ones_ul(x) (__co32_inline (x)) +# endif +# define stdc_count_ones_ull(x) (__co64_inline (x)) +#endif + +/* Single-bit check. */ +extern bool stdc_has_single_bit_uc (unsigned char __x) + __THROW __attribute_const__; +extern bool stdc_has_single_bit_us (unsigned short __x) + __THROW __attribute_const__; +extern bool stdc_has_single_bit_ui (unsigned int __x) + __THROW __attribute_const__; +extern bool stdc_has_single_bit_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern bool stdc_has_single_bit_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_has_single_bit) +# define stdc_has_single_bit(x) (__builtin_stdc_has_single_bit (x)) +#else +# define stdc_has_single_bit(x) \ + ((bool) (sizeof (x) <= sizeof (unsigned int) \ + ? stdc_has_single_bit_ui (x) \ + : stdc_has_single_bit_ull (x))) +#endif + +static __always_inline bool +__hsb64_inline (uint64_t __x) +{ + return (__x ^ (__x - 1)) > __x - 1; +} + +static __always_inline bool +__hsb32_inline (uint32_t __x) +{ + return (__x ^ (__x - 1)) > __x - 1; +} + +static __always_inline bool +__hsb16_inline (uint16_t __x) +{ + return (__x ^ (__x - 1)) > __x - 1; +} + +static __always_inline bool +__hsb8_inline (uint8_t __x) +{ + return (__x ^ (__x - 1)) > __x - 1; +} + +#define stdc_has_single_bit_uc(x) (__hsb8_inline (x)) +#define stdc_has_single_bit_us(x) (__hsb16_inline (x)) +#define stdc_has_single_bit_ui(x) (__hsb32_inline (x)) +#if __WORDSIZE == 64 +# define stdc_has_single_bit_ul(x) (__hsb64_inline (x)) +#else +# define stdc_has_single_bit_ul(x) (__hsb32_inline (x)) +#endif +#define stdc_has_single_bit_ull(x) (__hsb64_inline (x)) + +/* Bit width. */ +extern unsigned int stdc_bit_width_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned int stdc_bit_width_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_bit_width_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned int stdc_bit_width_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned int stdc_bit_width_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_bit_width) +# define stdc_bit_width(x) (__builtin_stdc_bit_width (x)) +#else +# define stdc_bit_width(x) (stdc_bit_width_ull (x)) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline unsigned int +__bw64_inline (uint64_t __x) +{ + return 64 - __clz64_inline (__x); +} + +static __always_inline unsigned int +__bw32_inline (uint32_t __x) +{ + return 32 - __clz32_inline (__x); +} + +static __always_inline unsigned int +__bw16_inline (uint16_t __x) +{ + return 16 - __clz16_inline (__x); +} + +static __always_inline unsigned int +__bw8_inline (uint8_t __x) +{ + return 8 - __clz8_inline (__x); +} + +# define stdc_bit_width_uc(x) (__bw8_inline (x)) +# define stdc_bit_width_us(x) (__bw16_inline (x)) +# define stdc_bit_width_ui(x) (__bw32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_bit_width_ul(x) (__bw64_inline (x)) +# else +# define stdc_bit_width_ul(x) (__bw32_inline (x)) +# endif +# define stdc_bit_width_ull(x) (__bw64_inline (x)) +#endif + +/* Bit floor. */ +extern unsigned char stdc_bit_floor_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned short stdc_bit_floor_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_bit_floor_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned long int stdc_bit_floor_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned long long int stdc_bit_floor_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_bit_floor) +# define stdc_bit_floor(x) (__builtin_stdc_bit_floor (x)) +#else +# define stdc_bit_floor(x) ((__typeof (x)) stdc_bit_floor_ull (x)) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline uint64_t +__bf64_inline (uint64_t __x) +{ + return __x == 0 ? 0 : ((uint64_t) 1) << (__bw64_inline (__x) - 1); +} + +static __always_inline uint32_t +__bf32_inline (uint32_t __x) +{ + return __x == 0 ? 0 : ((uint32_t) 1) << (__bw32_inline (__x) - 1); +} + +static __always_inline uint16_t +__bf16_inline (uint16_t __x) +{ + return __pacify_uint16 (__x == 0 + ? 0 : ((uint16_t) 1) << (__bw16_inline (__x) - 1)); +} + +static __always_inline uint8_t +__bf8_inline (uint8_t __x) +{ + return __pacify_uint8 (__x == 0 + ? 0 : ((uint8_t) 1) << (__bw8_inline (__x) - 1)); +} + +# define stdc_bit_floor_uc(x) ((unsigned char) __bf8_inline (x)) +# define stdc_bit_floor_us(x) ((unsigned short) __bf16_inline (x)) +# define stdc_bit_floor_ui(x) ((unsigned int) __bf32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_bit_floor_ul(x) ((unsigned long int) __bf64_inline (x)) +# else +# define stdc_bit_floor_ul(x) ((unsigned long int) __bf32_inline (x)) +# endif +# define stdc_bit_floor_ull(x) ((unsigned long long int) __bf64_inline (x)) +#endif + +/* Bit ceiling. */ +extern unsigned char stdc_bit_ceil_uc (unsigned char __x) + __THROW __attribute_const__; +extern unsigned short stdc_bit_ceil_us (unsigned short __x) + __THROW __attribute_const__; +extern unsigned int stdc_bit_ceil_ui (unsigned int __x) + __THROW __attribute_const__; +extern unsigned long int stdc_bit_ceil_ul (unsigned long int __x) + __THROW __attribute_const__; +__extension__ +extern unsigned long long int stdc_bit_ceil_ull (unsigned long long int __x) + __THROW __attribute_const__; +#if __glibc_has_builtin (__builtin_stdc_bit_ceil) +# define stdc_bit_ceil(x) (__builtin_stdc_bit_ceil (x)) +#else +# define stdc_bit_ceil(x) ((__typeof (x)) stdc_bit_ceil_ull (x)) +#endif + +#if __GNUC_PREREQ (3, 4) || __glibc_has_builtin (__builtin_clzll) +static __always_inline uint64_t +__bc64_inline (uint64_t __x) +{ + return __x <= 1 ? 1 : ((uint64_t) 2) << (__bw64_inline (__x - 1) - 1); +} + +static __always_inline uint32_t +__bc32_inline (uint32_t __x) +{ + return __x <= 1 ? 1 : ((uint32_t) 2) << (__bw32_inline (__x - 1) - 1); +} + +static __always_inline uint16_t +__bc16_inline (uint16_t __x) +{ + return __pacify_uint16 (__x <= 1 + ? 1 + : ((uint16_t) 2) + << (__bw16_inline ((uint16_t) (__x - 1)) - 1)); +} + +static __always_inline uint8_t +__bc8_inline (uint8_t __x) +{ + return __pacify_uint8 (__x <= 1 + ? 1 + : ((uint8_t) 2) + << (__bw8_inline ((uint8_t) (__x - 1)) - 1)); +} + +# define stdc_bit_ceil_uc(x) ((unsigned char) __bc8_inline (x)) +# define stdc_bit_ceil_us(x) ((unsigned short) __bc16_inline (x)) +# define stdc_bit_ceil_ui(x) ((unsigned int) __bc32_inline (x)) +# if __WORDSIZE == 64 +# define stdc_bit_ceil_ul(x) ((unsigned long int) __bc64_inline (x)) +# else +# define stdc_bit_ceil_ul(x) ((unsigned long int) __bc32_inline (x)) +# endif +# define stdc_bit_ceil_ull(x) ((unsigned long long int) __bc64_inline (x)) +#endif + +__END_DECLS + +#endif /* _STDBIT_H */ diff --git a/board/mentalnet/overlay/usr/include/stdc-predef.h b/board/mentalnet/overlay/usr/include/stdc-predef.h new file mode 100644 index 0000000..5dfbabf --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stdc-predef.h @@ -0,0 +1,64 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _STDC_PREDEF_H +#define _STDC_PREDEF_H 1 + +/* This header is separate from features.h so that the compiler can + include it implicitly at the start of every compilation. It must + not itself include or any other header that includes + because the implicit include comes before any feature + test macros that may be defined in a source file before it first + explicitly includes a system header. GCC knows the name of this + header in order to preinclude it. */ + +/* glibc's intent is to support the IEC 559 math functionality, real + and complex. If the GCC (4.9 and later) predefined macros + specifying compiler intent are available, use them to determine + whether the overall intent is to support these features; otherwise, + presume an older compiler has intent to support these features and + define these macros by default. */ + +#ifdef __GCC_IEC_559 +# if __GCC_IEC_559 > 0 +# define __STDC_IEC_559__ 1 +# define __STDC_IEC_60559_BFP__ 201404L +# endif +#else +# define __STDC_IEC_559__ 1 +# define __STDC_IEC_60559_BFP__ 201404L +#endif + +#ifdef __GCC_IEC_559_COMPLEX +# if __GCC_IEC_559_COMPLEX > 0 +# define __STDC_IEC_559_COMPLEX__ 1 +# define __STDC_IEC_60559_COMPLEX__ 201404L +# endif +#else +# define __STDC_IEC_559_COMPLEX__ 1 +# define __STDC_IEC_60559_COMPLEX__ 201404L +#endif + +/* wchar_t uses Unicode 10.0.0. Version 10.0 of the Unicode Standard is + synchronized with ISO/IEC 10646:2017, fifth edition, plus + the following additions from Amendment 1 to the fifth edition: + - 56 emoji characters + - 285 hentaigana + - 3 additional Zanabazar Square characters */ +#define __STDC_ISO_10646__ 201706L + +#endif diff --git a/board/mentalnet/overlay/usr/include/stdint.h b/board/mentalnet/overlay/usr/include/stdint.h new file mode 100644 index 0000000..3ec1bc4 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stdint.h @@ -0,0 +1,308 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99: 7.18 Integer types + */ + +#ifndef _STDINT_H +#define _STDINT_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include +#include +#include +#include + +/* Exact integral types. */ + +/* Signed. */ +#include + +/* Unsigned. */ +#include + + +/* Small types. */ +#include + + +/* Fast types. */ + +/* Signed. */ +typedef signed char int_fast8_t; +#if __WORDSIZE == 64 +typedef long int int_fast16_t; +typedef long int int_fast32_t; +typedef long int int_fast64_t; +#else +typedef int int_fast16_t; +typedef int int_fast32_t; +__extension__ +typedef long long int int_fast64_t; +#endif + +/* Unsigned. */ +typedef unsigned char uint_fast8_t; +#if __WORDSIZE == 64 +typedef unsigned long int uint_fast16_t; +typedef unsigned long int uint_fast32_t; +typedef unsigned long int uint_fast64_t; +#else +typedef unsigned int uint_fast16_t; +typedef unsigned int uint_fast32_t; +__extension__ +typedef unsigned long long int uint_fast64_t; +#endif + + +/* Types for `void *' pointers. */ +#if __WORDSIZE == 64 +# ifndef __intptr_t_defined +typedef long int intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned long int uintptr_t; +#else +# ifndef __intptr_t_defined +typedef int intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned int uintptr_t; +#endif + + +/* Largest integral types. */ +typedef __intmax_t intmax_t; +typedef __uintmax_t uintmax_t; + + +# if __WORDSIZE == 64 +# define __INT64_C(c) c ## L +# define __UINT64_C(c) c ## UL +# else +# define __INT64_C(c) c ## LL +# define __UINT64_C(c) c ## ULL +# endif + +/* Limits of integral types. */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN (-128) +# define INT_LEAST16_MIN (-32767-1) +# define INT_LEAST32_MIN (-2147483647-1) +# define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX (127) +# define INT_LEAST16_MAX (32767) +# define INT_LEAST32_MAX (2147483647) +# define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX (255) +# define UINT_LEAST16_MAX (65535) +# define UINT_LEAST32_MAX (4294967295U) +# define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) + + +/* Minimum of fast signed integral types having a minimum size. */ +# define INT_FAST8_MIN (-128) +# if __WORDSIZE == 64 +# define INT_FAST16_MIN (-9223372036854775807L-1) +# define INT_FAST32_MIN (-9223372036854775807L-1) +# else +# define INT_FAST16_MIN (-2147483647-1) +# define INT_FAST32_MIN (-2147483647-1) +# endif +# define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of fast signed integral types having a minimum size. */ +# define INT_FAST8_MAX (127) +# if __WORDSIZE == 64 +# define INT_FAST16_MAX (9223372036854775807L) +# define INT_FAST32_MAX (9223372036854775807L) +# else +# define INT_FAST16_MAX (2147483647) +# define INT_FAST32_MAX (2147483647) +# endif +# define INT_FAST64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of fast unsigned integral types having a minimum size. */ +# define UINT_FAST8_MAX (255) +# if __WORDSIZE == 64 +# define UINT_FAST16_MAX (18446744073709551615UL) +# define UINT_FAST32_MAX (18446744073709551615UL) +# else +# define UINT_FAST16_MAX (4294967295U) +# define UINT_FAST32_MAX (4294967295U) +# endif +# define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) + + +/* Values to test for integral types holding `void *' pointer. */ +# if __WORDSIZE == 64 +# define INTPTR_MIN (-9223372036854775807L-1) +# define INTPTR_MAX (9223372036854775807L) +# define UINTPTR_MAX (18446744073709551615UL) +# else +# define INTPTR_MIN (-2147483647-1) +# define INTPTR_MAX (2147483647) +# define UINTPTR_MAX (4294967295U) +# endif + + +/* Minimum for largest signed integral type. */ +# define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum for largest signed integral type. */ +# define INTMAX_MAX (__INT64_C(9223372036854775807)) + +/* Maximum for largest unsigned integral type. */ +# define UINTMAX_MAX (__UINT64_C(18446744073709551615)) + + +/* Limits of other integer types. */ + +/* Limits of `ptrdiff_t' type. */ +# if __WORDSIZE == 64 +# define PTRDIFF_MIN (-9223372036854775807L-1) +# define PTRDIFF_MAX (9223372036854775807L) +# else +# if __WORDSIZE32_PTRDIFF_LONG +# define PTRDIFF_MIN (-2147483647L-1) +# define PTRDIFF_MAX (2147483647L) +# else +# define PTRDIFF_MIN (-2147483647-1) +# define PTRDIFF_MAX (2147483647) +# endif +# endif + +/* Limits of `sig_atomic_t'. */ +# define SIG_ATOMIC_MIN (-2147483647-1) +# define SIG_ATOMIC_MAX (2147483647) + +/* Limit of `size_t' type. */ +# if __WORDSIZE == 64 +# define SIZE_MAX (18446744073709551615UL) +# else +# if __WORDSIZE32_SIZE_ULONG +# define SIZE_MAX (4294967295UL) +# else +# define SIZE_MAX (4294967295U) +# endif +# endif + +/* Limits of `wchar_t'. */ +# ifndef WCHAR_MIN +/* These constants might also be defined in . */ +# define WCHAR_MIN __WCHAR_MIN +# define WCHAR_MAX __WCHAR_MAX +# endif + +/* Limits of `wint_t'. */ +# define WINT_MIN (0u) +# define WINT_MAX (4294967295u) + +/* Signed. */ +# define INT8_C(c) c +# define INT16_C(c) c +# define INT32_C(c) c +# if __WORDSIZE == 64 +# define INT64_C(c) c ## L +# else +# define INT64_C(c) c ## LL +# endif + +/* Unsigned. */ +# define UINT8_C(c) c +# define UINT16_C(c) c +# define UINT32_C(c) c ## U +# if __WORDSIZE == 64 +# define UINT64_C(c) c ## UL +# else +# define UINT64_C(c) c ## ULL +# endif + +/* Maximal type. */ +# if __WORDSIZE == 64 +# define INTMAX_C(c) c ## L +# define UINTMAX_C(c) c ## UL +# else +# define INTMAX_C(c) c ## LL +# define UINTMAX_C(c) c ## ULL +# endif + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) + +# define INT8_WIDTH 8 +# define UINT8_WIDTH 8 +# define INT16_WIDTH 16 +# define UINT16_WIDTH 16 +# define INT32_WIDTH 32 +# define UINT32_WIDTH 32 +# define INT64_WIDTH 64 +# define UINT64_WIDTH 64 + +# define INT_LEAST8_WIDTH 8 +# define UINT_LEAST8_WIDTH 8 +# define INT_LEAST16_WIDTH 16 +# define UINT_LEAST16_WIDTH 16 +# define INT_LEAST32_WIDTH 32 +# define UINT_LEAST32_WIDTH 32 +# define INT_LEAST64_WIDTH 64 +# define UINT_LEAST64_WIDTH 64 + +# define INT_FAST8_WIDTH 8 +# define UINT_FAST8_WIDTH 8 +# define INT_FAST16_WIDTH __WORDSIZE +# define UINT_FAST16_WIDTH __WORDSIZE +# define INT_FAST32_WIDTH __WORDSIZE +# define UINT_FAST32_WIDTH __WORDSIZE +# define INT_FAST64_WIDTH 64 +# define UINT_FAST64_WIDTH 64 + +# define INTPTR_WIDTH __WORDSIZE +# define UINTPTR_WIDTH __WORDSIZE + +# define INTMAX_WIDTH 64 +# define UINTMAX_WIDTH 64 + +# define PTRDIFF_WIDTH __WORDSIZE +# define SIG_ATOMIC_WIDTH 32 +# define SIZE_WIDTH __WORDSIZE +# define WCHAR_WIDTH 32 +# define WINT_WIDTH 32 + +#endif + +#endif /* stdint.h */ diff --git a/board/mentalnet/overlay/usr/include/stdio.h b/board/mentalnet/overlay/usr/include/stdio.h new file mode 100644 index 0000000..602f53a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stdio.h @@ -0,0 +1,975 @@ +/* Define ISO C stdio on top of C++ iostreams. + Copyright (C) 1991-2025 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.19 Input/output + */ + +#ifndef _STDIO_H +#define _STDIO_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +__BEGIN_DECLS + +#define __need_size_t +#define __need_NULL +#include + +#define __need___va_list +#include + +#include +#include +#include +#include +#include +#include + +#ifdef __USE_MISC +# include +#endif + +#if defined __USE_XOPEN || defined __USE_XOPEN2K8 +# ifdef __GNUC__ +# ifndef _VA_LIST_DEFINED +typedef __gnuc_va_list va_list; +# define _VA_LIST_DEFINED +# endif +# else +# include +# endif +#endif + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +# ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +# endif +# if defined __USE_LARGEFILE64 && !defined __off64_t_defined +typedef __off64_t off64_t; +# define __off64_t_defined +# endif +#endif + +#ifdef __USE_XOPEN2K8 +# ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +# endif +#endif + +/* The type of the second argument to `fgetpos' and `fsetpos'. */ +#ifndef __USE_FILE_OFFSET64 +typedef __fpos_t fpos_t; +#else +typedef __fpos64_t fpos_t; +#endif +#ifdef __USE_LARGEFILE64 +typedef __fpos64_t fpos64_t; +#endif + +/* The possibilities for the third argument to `setvbuf'. */ +#define _IOFBF 0 /* Fully buffered. */ +#define _IOLBF 1 /* Line buffered. */ +#define _IONBF 2 /* No buffering. */ + + +/* Default buffer size. */ +#define BUFSIZ 8192 + + +/* The value returned by fgetc and similar functions to indicate the + end of the file. */ +#define EOF (-1) + + +/* The possibilities for the third argument to `fseek'. + These values should not be changed. */ +#define SEEK_SET 0 /* Seek from beginning of file. */ +#define SEEK_CUR 1 /* Seek from current position. */ +#define SEEK_END 2 /* Seek from end of file. */ +#ifdef __USE_GNU +# define SEEK_DATA 3 /* Seek to next data. */ +# define SEEK_HOLE 4 /* Seek to next hole. */ +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* Default path prefix for `tempnam' and `tmpnam'. */ +# define P_tmpdir "/tmp" +#endif + +#define L_tmpnam 20 +#define TMP_MAX 238328 + +/* Get the values: + FILENAME_MAX Maximum length of a filename. */ +#include + +#ifdef __USE_POSIX +# define L_ctermid 9 +# if !defined __USE_XOPEN2K || defined __USE_GNU +# define L_cuserid 9 +# endif +#endif + +#undef FOPEN_MAX +#define FOPEN_MAX 16 + + +#if __GLIBC_USE (ISOC23) +/* Maximum length of printf output for a NaN. */ +# define _PRINTF_NAN_LEN_MAX 4 +#endif + + +/* Standard streams. */ +extern FILE *stdin; /* Standard input stream. */ +extern FILE *stdout; /* Standard output stream. */ +extern FILE *stderr; /* Standard error output stream. */ +/* C89/C99 say they're macros. Make them happy. */ +#define stdin stdin +#define stdout stdout +#define stderr stderr + +/* Remove file FILENAME. */ +extern int remove (const char *__filename) __THROW; +/* Rename file OLD to NEW. */ +extern int rename (const char *__old, const char *__new) __THROW; + +#ifdef __USE_ATFILE +/* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */ +extern int renameat (int __oldfd, const char *__old, int __newfd, + const char *__new) __THROW; +#endif + +#ifdef __USE_GNU +/* Flags for renameat2. */ +# define RENAME_NOREPLACE (1 << 0) +# define RENAME_EXCHANGE (1 << 1) +# define RENAME_WHITEOUT (1 << 2) + +/* Rename file OLD relative to OLDFD to NEW relative to NEWFD, with + additional flags. */ +extern int renameat2 (int __oldfd, const char *__old, int __newfd, + const char *__new, unsigned int __flags) __THROW; +#endif + +/* Close STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fclose (FILE *__stream) __nonnull ((1)); + +#undef __attr_dealloc_fclose +#define __attr_dealloc_fclose __attr_dealloc (fclose, 1) + +/* Create a temporary file and open it read/write. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +#ifndef __USE_FILE_OFFSET64 +extern FILE *tmpfile (void) + __attribute_malloc__ __attr_dealloc_fclose __wur; +#else +# ifdef __REDIRECT +extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) + __attribute_malloc__ __attr_dealloc_fclose __wur; +# else +# define tmpfile tmpfile64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern FILE *tmpfile64 (void) + __attribute_malloc__ __attr_dealloc_fclose __wur; +#endif + +/* Generate a temporary filename. */ +extern char *tmpnam (char[L_tmpnam]) __THROW __wur; + +#ifdef __USE_MISC +/* This is the reentrant variant of `tmpnam'. The only difference is + that it does not allow S to be NULL. */ +extern char *tmpnam_r (char __s[L_tmpnam]) __THROW __wur; +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* Generate a unique temporary filename using up to five characters of PFX + if it is not NULL. The directory to put this file in is searched for + as follows: First the environment variable "TMPDIR" is checked. + If it contains the name of a writable directory, that directory is used. + If not and if DIR is not NULL, that value is checked. If that fails, + P_tmpdir is tried and finally "/tmp". The storage for the filename + is allocated by `malloc'. */ +extern char *tempnam (const char *__dir, const char *__pfx) + __THROW __attribute_malloc__ __wur __attr_dealloc_free; +#endif + +/* Flush STREAM, or all streams if STREAM is NULL. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fflush (FILE *__stream); + +#ifdef __USE_MISC +/* Faster versions when locking is not required. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fflush_unlocked (FILE *__stream); +#endif + +#ifdef __USE_GNU +/* Close all streams. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fcloseall (void); +#endif + + +#ifndef __USE_FILE_OFFSET64 +/* Open a file and create a new stream for it. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern FILE *fopen (const char *__restrict __filename, + const char *__restrict __modes) + __attribute_malloc__ __attr_dealloc_fclose __wur; +/* Open a file, replacing an existing stream with it. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern FILE *freopen (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream) __wur __nonnull ((3)); +#else +# ifdef __REDIRECT +extern FILE *__REDIRECT (fopen, (const char *__restrict __filename, + const char *__restrict __modes), fopen64) + __attribute_malloc__ __attr_dealloc_fclose __wur; +extern FILE *__REDIRECT (freopen, (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream), freopen64) + __wur __nonnull ((3)); +# else +# define fopen fopen64 +# define freopen freopen64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern FILE *fopen64 (const char *__restrict __filename, + const char *__restrict __modes) + __attribute_malloc__ __attr_dealloc_fclose __wur; +extern FILE *freopen64 (const char *__restrict __filename, + const char *__restrict __modes, + FILE *__restrict __stream) __wur __nonnull ((3)); +#endif + +#ifdef __USE_POSIX +/* Create a new stream that refers to an existing system file descriptor. */ +extern FILE *fdopen (int __fd, const char *__modes) __THROW + __attribute_malloc__ __attr_dealloc_fclose __wur; +#endif + +#ifdef __USE_MISC +/* Create a new stream that refers to the given magic cookie, + and uses the given functions for input and output. */ +extern FILE *fopencookie (void *__restrict __magic_cookie, + const char *__restrict __modes, + cookie_io_functions_t __io_funcs) __THROW + __attribute_malloc__ __attr_dealloc_fclose __wur; +#endif + +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) +/* Create a new stream that refers to a memory buffer. */ +extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) + __THROW __attribute_malloc__ __attr_dealloc_fclose __wur; + +/* Open a stream that writes into a malloc'd buffer that is expanded as + necessary. *BUFLOC and *SIZELOC are updated with the buffer's location + and the number of characters written on fflush or fclose. */ +extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW + __attribute_malloc__ __attr_dealloc_fclose __wur; + +#ifdef _WCHAR_H +/* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces + a wide character string. Declared here only to add attribute malloc + and only if has been previously #included. */ +extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW + __attribute_malloc__ __attr_dealloc_fclose; +# endif +#endif + +/* If BUF is NULL, make STREAM unbuffered. + Else make it use buffer BUF, of size BUFSIZ. */ +extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW + __nonnull ((1)); +/* Make STREAM use buffering mode MODE. + If BUF is not NULL, use N bytes of it for buffering; + else allocate an internal buffer N bytes long. */ +extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, + int __modes, size_t __n) __THROW __nonnull ((1)); + +#ifdef __USE_MISC +/* If BUF is NULL, make STREAM unbuffered. + Else make it use SIZE bytes of BUF for buffering. */ +extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, + size_t __size) __THROW __nonnull ((1)); + +/* Make STREAM line-buffered. */ +extern void setlinebuf (FILE *__stream) __THROW __nonnull ((1)); +#endif + + +/* Write formatted output to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fprintf (FILE *__restrict __stream, + const char *__restrict __format, ...) __nonnull ((1)); +/* Write formatted output to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int printf (const char *__restrict __format, ...); +/* Write formatted output to S. */ +extern int sprintf (char *__restrict __s, + const char *__restrict __format, ...) __THROWNL; + +/* Write formatted output to S from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) __nonnull ((1)); +/* Write formatted output to stdout from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); +/* Write formatted output to S from argument list ARG. */ +extern int vsprintf (char *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) __THROWNL; + +#if defined __USE_ISOC99 || defined __USE_UNIX98 +/* Maximum chars of output to write in MAXLEN. */ +extern int snprintf (char *__restrict __s, size_t __maxlen, + const char *__restrict __format, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 3, 4))); + +extern int vsnprintf (char *__restrict __s, size_t __maxlen, + const char *__restrict __format, __gnuc_va_list __arg) + __THROWNL __attribute__ ((__format__ (__printf__, 3, 0))); +#endif + +#if defined (__USE_MISC) || __GLIBC_USE (LIB_EXT2) +/* Write formatted output to a string dynamically allocated with `malloc'. + Store the address of the string in *PTR. */ +extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, + __gnuc_va_list __arg) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur; +extern int __asprintf (char **__restrict __ptr, + const char *__restrict __fmt, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur; +extern int asprintf (char **__restrict __ptr, + const char *__restrict __fmt, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur; +#endif + +#ifdef __USE_XOPEN2K8 +/* Write formatted output to a file descriptor. */ +extern int vdprintf (int __fd, const char *__restrict __fmt, + __gnuc_va_list __arg) + __attribute__ ((__format__ (__printf__, 2, 0))); +extern int dprintf (int __fd, const char *__restrict __fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +#endif + + +/* Read formatted input from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur __nonnull ((1)); +/* Read formatted input from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int scanf (const char *__restrict __format, ...) __wur; +/* Read formatted input from S. */ +extern int sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; + +/* For historical reasons, the C99-compliant versions of the scanf + functions are at alternative names. When __LDBL_COMPAT or + __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in + bits/stdio-ldbl.h. */ +#include +#if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, + const char *__restrict __format, ...), + __isoc23_fscanf) __wur __nonnull ((1)); +extern int __REDIRECT (scanf, (const char *__restrict __format, ...), + __isoc23_scanf) __wur; +extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, + const char *__restrict __format, ...), + __isoc23_sscanf); +# else +extern int __isoc23_fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur + __nonnull ((1)); +extern int __isoc23_scanf (const char *__restrict __format, ...) __wur; +extern int __isoc23_sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; +# define fscanf __isoc23_fscanf +# define scanf __isoc23_scanf +# define sscanf __isoc23_sscanf +# endif +# else +# ifdef __REDIRECT +extern int __REDIRECT (fscanf, (FILE *__restrict __stream, + const char *__restrict __format, ...), + __isoc99_fscanf) __wur __nonnull ((1)); +extern int __REDIRECT (scanf, (const char *__restrict __format, ...), + __isoc99_scanf) __wur; +extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, + const char *__restrict __format, ...), + __isoc99_sscanf); +# else +extern int __isoc99_fscanf (FILE *__restrict __stream, + const char *__restrict __format, ...) __wur + __nonnull ((1)); +extern int __isoc99_scanf (const char *__restrict __format, ...) __wur; +extern int __isoc99_sscanf (const char *__restrict __s, + const char *__restrict __format, ...) __THROW; +# define fscanf __isoc99_fscanf +# define scanf __isoc99_scanf +# define sscanf __isoc99_sscanf +# endif +# endif +#endif + +#ifdef __USE_ISOC99 +/* Read formatted input from S into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, + __gnuc_va_list __arg) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur __nonnull ((1)); + +/* Read formatted input from stdin into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; + +/* Read formatted input from S into argument list ARG. */ +extern int vsscanf (const char *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg) + __THROW __attribute__ ((__format__ (__scanf__, 2, 0))); + +/* Same redirection as above for the v*scanf family. */ +# if !__GLIBC_USE (DEPRECATED_SCANF) +# if __GLIBC_USE (C23_STRTOL) +# if defined __REDIRECT && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +extern int __REDIRECT (vfscanf, + (FILE *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg), + __isoc23_vfscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur __nonnull ((1)); +extern int __REDIRECT (vscanf, (const char *__restrict __format, + __gnuc_va_list __arg), __isoc23_vscanf) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; +extern int __REDIRECT_NTH (vsscanf, + (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg), __isoc23_vsscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))); +# elif !defined __REDIRECT +extern int __isoc23_vfscanf (FILE *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __wur __nonnull ((1)); +extern int __isoc23_vscanf (const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc23_vsscanf (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfscanf __isoc23_vfscanf +# define vscanf __isoc23_vscanf +# define vsscanf __isoc23_vsscanf +# endif +# else +# if defined __REDIRECT && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +extern int __REDIRECT (vfscanf, + (FILE *__restrict __s, + const char *__restrict __format, __gnuc_va_list __arg), + __isoc99_vfscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))) __wur __nonnull ((1)); +extern int __REDIRECT (vscanf, (const char *__restrict __format, + __gnuc_va_list __arg), __isoc99_vscanf) + __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; +extern int __REDIRECT_NTH (vsscanf, + (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg), __isoc99_vsscanf) + __attribute__ ((__format__ (__scanf__, 2, 0))); +# elif !defined __REDIRECT +extern int __isoc99_vfscanf (FILE *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __wur __nonnull ((1)); +extern int __isoc99_vscanf (const char *__restrict __format, + __gnuc_va_list __arg) __wur; +extern int __isoc99_vsscanf (const char *__restrict __s, + const char *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfscanf __isoc99_vfscanf +# define vscanf __isoc99_vscanf +# define vsscanf __isoc99_vsscanf +# endif +# endif +# endif +#endif /* Use ISO C9x. */ + + +/* Read a character from STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int fgetc (FILE *__stream) __nonnull ((1)); +extern int getc (FILE *__stream) __nonnull ((1)); + +/* Read a character from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int getchar (void); + +#ifdef __USE_POSIX199506 +/* These are defined in POSIX.1:1996. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int getc_unlocked (FILE *__stream) __nonnull ((1)); +extern int getchar_unlocked (void); +#endif /* Use POSIX. */ + +#ifdef __USE_MISC +/* Faster version when locking is not necessary. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fgetc_unlocked (FILE *__stream) __nonnull ((1)); +#endif /* Use MISC. */ + + +/* Write a character to STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. + + These functions is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fputc (int __c, FILE *__stream) __nonnull ((2)); +extern int putc (int __c, FILE *__stream) __nonnull ((2)); + +/* Write a character to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int putchar (int __c); + +#ifdef __USE_MISC +/* Faster version when locking is not necessary. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fputc_unlocked (int __c, FILE *__stream) __nonnull ((2)); +#endif /* Use MISC. */ + +#ifdef __USE_POSIX199506 +/* These are defined in POSIX.1:1996. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern int putc_unlocked (int __c, FILE *__stream) __nonnull ((2)); +extern int putchar_unlocked (int __c); +#endif /* Use POSIX. */ + + +#if defined __USE_MISC \ + || (defined __USE_XOPEN && !defined __USE_XOPEN2K) +/* Get a word (int) from STREAM. */ +extern int getw (FILE *__stream) __nonnull ((1)); + +/* Write a word (int) to STREAM. */ +extern int putw (int __w, FILE *__stream) __nonnull ((2)); +#endif + + +/* Get a newline-terminated string of finite length from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) + __wur __fortified_attr_access (__write_only__, 1, 2) __nonnull ((3)); + +#if __GLIBC_USE (DEPRECATED_GETS) +/* Get a newline-terminated string from stdin, removing the newline. + + This function is impossible to use safely. It has been officially + removed from ISO C11 and ISO C++14, and we have also removed it + from the _GNU_SOURCE feature list. It remains available when + explicitly using an old ISO C, Unix, or POSIX standard. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern char *gets (char *__s) __wur __attribute_deprecated__; +#endif + +#ifdef __USE_GNU +/* This function does the same as `fgets' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern char *fgets_unlocked (char *__restrict __s, int __n, + FILE *__restrict __stream) __wur + __fortified_attr_access (__write_only__, 1, 2) __nonnull ((3)); +#endif + + +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) +/* Read up to (and including) a DELIMITER from STREAM into *LINEPTR + (and null-terminate it). *LINEPTR is a pointer returned from malloc (or + NULL), pointing to *N characters of space. It is realloc'd as + necessary. Returns the number of characters read (not including the + null terminator), or -1 on error or EOF. */ +extern __ssize_t __getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur __nonnull ((4)); +extern __ssize_t getdelim (char **__restrict __lineptr, + size_t *__restrict __n, int __delimiter, + FILE *__restrict __stream) __wur __nonnull ((4)); + +/* Like `getdelim', but reads up to a newline. */ +extern __ssize_t getline (char **__restrict __lineptr, + size_t *__restrict __n, + FILE *__restrict __stream) __wur __nonnull ((3)); +#endif + + +/* Write a string to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fputs (const char *__restrict __s, FILE *__restrict __stream) + __nonnull ((2)); + +/* Write a string, followed by a newline, to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int puts (const char *__s); + + +/* Push a character back onto the input buffer of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int ungetc (int __c, FILE *__stream) __nonnull ((2)); + + +/* Read chunks of generic data from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern size_t fread (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) __wur + __nonnull((4)); +/* Write chunks of generic data to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern size_t fwrite (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __s) __nonnull((4)); + +#ifdef __USE_GNU +/* This function does the same as `fputs' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fputs_unlocked (const char *__restrict __s, + FILE *__restrict __stream) __nonnull ((2)); +#endif + +#ifdef __USE_MISC +/* Faster versions when locking is not necessary. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) __wur + __nonnull ((4)); +extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream) + __nonnull ((4)); +#endif + + +/* Seek to a certain position on STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fseek (FILE *__stream, long int __off, int __whence) + __nonnull ((1)); +/* Return the current position of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern long int ftell (FILE *__stream) __wur __nonnull ((1)); +/* Rewind to the beginning of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void rewind (FILE *__stream) __nonnull ((1)); + +/* The Single Unix Specification, Version 2, specifies an alternative, + more adequate interface for the two functions above which deal with + file offset. `long int' is not the right type. These definitions + are originally defined in the Large File Support API. */ + +#if defined __USE_LARGEFILE || defined __USE_XOPEN2K +# ifndef __USE_FILE_OFFSET64 +/* Seek to a certain position on STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fseeko (FILE *__stream, __off_t __off, int __whence) + __nonnull ((1)); +/* Return the current position of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern __off_t ftello (FILE *__stream) __wur __nonnull ((1)); +# else +# ifdef __REDIRECT +extern int __REDIRECT (fseeko, + (FILE *__stream, __off64_t __off, int __whence), + fseeko64) __nonnull ((1)); +extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64) + __nonnull ((1)); +# else +# define fseeko fseeko64 +# define ftello ftello64 +# endif +# endif +#endif + +#ifndef __USE_FILE_OFFSET64 +/* Get STREAM's position. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) + __nonnull ((1)); +/* Set STREAM's position. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fsetpos (FILE *__stream, const fpos_t *__pos) __nonnull ((1)); +#else +# ifdef __REDIRECT +extern int __REDIRECT (fgetpos, (FILE *__restrict __stream, + fpos_t *__restrict __pos), fgetpos64) + __nonnull ((1)); +extern int __REDIRECT (fsetpos, + (FILE *__stream, const fpos_t *__pos), fsetpos64) + __nonnull ((1)); +# else +# define fgetpos fgetpos64 +# define fsetpos fsetpos64 +# endif +#endif + +#ifdef __USE_LARGEFILE64 +extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) + __nonnull ((1)); +extern __off64_t ftello64 (FILE *__stream) __wur __nonnull ((1)); +extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos) + __nonnull ((1)); +extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos) __nonnull ((1)); +#endif + +/* Clear the error and EOF indicators for STREAM. */ +extern void clearerr (FILE *__stream) __THROW __nonnull ((1)); +/* Return the EOF indicator for STREAM. */ +extern int feof (FILE *__stream) __THROW __wur __nonnull ((1)); +/* Return the error indicator for STREAM. */ +extern int ferror (FILE *__stream) __THROW __wur __nonnull ((1)); + +#ifdef __USE_MISC +/* Faster versions when locking is not required. */ +extern void clearerr_unlocked (FILE *__stream) __THROW __nonnull ((1)); +extern int feof_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)); +extern int ferror_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)); +#endif + + +/* Print a message describing the meaning of the value of errno. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void perror (const char *__s) __COLD; + + +#ifdef __USE_POSIX +/* Return the system file descriptor for STREAM. */ +extern int fileno (FILE *__stream) __THROW __wur __nonnull ((1)); +#endif /* Use POSIX. */ + +#ifdef __USE_MISC +/* Faster version when locking is not required. */ +extern int fileno_unlocked (FILE *__stream) __THROW __wur __nonnull ((1)); +#endif + + +#ifdef __USE_POSIX2 +/* Close a stream opened by popen and return the status of its child. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int pclose (FILE *__stream) __nonnull ((1)); + +/* Create a new stream connected to a pipe running the given command. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern FILE *popen (const char *__command, const char *__modes) + __attribute_malloc__ __attr_dealloc (pclose, 1) __wur; + +#endif + + +#ifdef __USE_POSIX +/* Return the name of the controlling terminal. */ +extern char *ctermid (char *__s) __THROW + __attr_access ((__write_only__, 1)); +#endif /* Use POSIX. */ + + +#if (defined __USE_XOPEN && !defined __USE_XOPEN2K) || defined __USE_GNU +/* Return the name of the current user. */ +extern char *cuserid (char *__s) + __attr_access ((__write_only__, 1)); +#endif /* Use X/Open, but not issue 6. */ + + +#ifdef __USE_GNU +struct obstack; /* See . */ + +/* Write formatted output to an obstack. */ +extern int obstack_printf (struct obstack *__restrict __obstack, + const char *__restrict __format, ...) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))); +extern int obstack_vprintf (struct obstack *__restrict __obstack, + const char *__restrict __format, + __gnuc_va_list __args) + __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))); +#endif /* Use GNU. */ + + +#ifdef __USE_POSIX199506 +/* These are defined in POSIX.1:1996. */ + +/* Acquire ownership of STREAM. */ +extern void flockfile (FILE *__stream) __THROW __nonnull ((1)); + +/* Try to acquire ownership of STREAM but do not block if it is not + possible. */ +extern int ftrylockfile (FILE *__stream) __THROW __wur __nonnull ((1)); + +/* Relinquish the ownership granted for STREAM. */ +extern void funlockfile (FILE *__stream) __THROW __nonnull ((1)); +#endif /* POSIX */ + +#if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU +/* X/Open Issues 1-5 required getopt to be declared in this + header. It was removed in Issue 6. GNU follows Issue 6. */ +# include +#endif + +/* Slow-path routines used by the optimized inline functions in + bits/stdio.h. */ +extern int __uflow (FILE *); +extern int __overflow (FILE *, int); + +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Declare all functions from bits/stdio2-decl.h first. */ +# include +#endif + +/* The following headers provide asm redirections. These redirections must + appear before the first usage of these functions, e.g. in bits/stdio.h. */ +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +/* If we are compiling with optimizing read this file. It contains + several optimizing inline functions and macros. */ +#ifdef __USE_EXTERN_INLINES +# include +#endif +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Now include the function definitions and redirects too. */ +# include +#endif + +__END_DECLS + +#endif /* included. */ diff --git a/board/mentalnet/overlay/usr/include/stdio_ext.h b/board/mentalnet/overlay/usr/include/stdio_ext.h new file mode 100644 index 0000000..3a9a981 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stdio_ext.h @@ -0,0 +1,86 @@ +/* Functions to access FILE structure internals. + Copyright (C) 2000-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* This header contains the same definitions as the header of the same name + on Sun's Solaris OS. */ + +#ifndef _STDIO_EXT_H +#define _STDIO_EXT_H 1 + +#include + +enum +{ + /* Query current state of the locking status. */ + FSETLOCKING_QUERY = 0, +#define FSETLOCKING_QUERY FSETLOCKING_QUERY + /* The library protects all uses of the stream functions, except for + uses of the *_unlocked functions, by calls equivalent to flockfile(). */ + FSETLOCKING_INTERNAL, +#define FSETLOCKING_INTERNAL FSETLOCKING_INTERNAL + /* The user will take care of locking. */ + FSETLOCKING_BYCALLER +#define FSETLOCKING_BYCALLER FSETLOCKING_BYCALLER +}; + + +__BEGIN_DECLS + +/* Return the size of the buffer of FP in bytes currently in use by + the given stream. */ +extern size_t __fbufsize (FILE *__fp) __THROW; + + +/* Return non-zero value iff the stream FP is opened readonly, or if the + last operation on the stream was a read operation. */ +extern int __freading (FILE *__fp) __THROW; + +/* Return non-zero value iff the stream FP is opened write-only or + append-only, or if the last operation on the stream was a write + operation. */ +extern int __fwriting (FILE *__fp) __THROW; + + +/* Return non-zero value iff stream FP is not opened write-only or + append-only. */ +extern int __freadable (FILE *__fp) __THROW; + +/* Return non-zero value iff stream FP is not opened read-only. */ +extern int __fwritable (FILE *__fp) __THROW; + + +/* Return non-zero value iff the stream FP is line-buffered. */ +extern int __flbf (FILE *__fp) __THROW; + + +/* Discard all pending buffered I/O on the stream FP. */ +extern void __fpurge (FILE *__fp) __THROW; + +/* Return amount of output in bytes pending on a stream FP. */ +extern size_t __fpending (FILE *__fp) __THROW; + +/* Flush all line-buffered files. */ +extern void _flushlbf (void); + + +/* Set locking status of stream FP to TYPE. */ +extern int __fsetlocking (FILE *__fp, int __type) __THROW; + +__END_DECLS + +#endif /* stdio_ext.h */ diff --git a/board/mentalnet/overlay/usr/include/stdlib.h b/board/mentalnet/overlay/usr/include/stdlib.h new file mode 100644 index 0000000..975f5ae --- /dev/null +++ b/board/mentalnet/overlay/usr/include/stdlib.h @@ -0,0 +1,1169 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.20 General utilities + */ + +#ifndef _STDLIB_H + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +/* Get size_t, wchar_t and NULL from . */ +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#include + +__BEGIN_DECLS + +#define _STDLIB_H 1 + +#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H +/* XPG requires a few symbols from being defined. */ +# include +# include + +/* Define the macros also would define this way. */ +# define WEXITSTATUS(status) __WEXITSTATUS (status) +# define WTERMSIG(status) __WTERMSIG (status) +# define WSTOPSIG(status) __WSTOPSIG (status) +# define WIFEXITED(status) __WIFEXITED (status) +# define WIFSIGNALED(status) __WIFSIGNALED (status) +# define WIFSTOPPED(status) __WIFSTOPPED (status) +# ifdef __WIFCONTINUED +# define WIFCONTINUED(status) __WIFCONTINUED (status) +# endif +#endif /* X/Open or XPG7 and not included. */ + +/* _FloatN API tests for enablement. */ +#include + +/* Returned by `div'. */ +typedef struct + { + int quot; /* Quotient. */ + int rem; /* Remainder. */ + } div_t; + +/* Returned by `ldiv'. */ +#ifndef __ldiv_t_defined +typedef struct + { + long int quot; /* Quotient. */ + long int rem; /* Remainder. */ + } ldiv_t; +# define __ldiv_t_defined 1 +#endif + +#if defined __USE_ISOC99 && !defined __lldiv_t_defined +/* Returned by `lldiv'. */ +__extension__ typedef struct + { + long long int quot; /* Quotient. */ + long long int rem; /* Remainder. */ + } lldiv_t; +# define __lldiv_t_defined 1 +#endif + + +/* The largest number rand will return (same as INT_MAX). */ +#define RAND_MAX 2147483647 + + +/* We define these the same for all machines. + Changes from this to the outside world should be done in `_exit'. */ +#define EXIT_FAILURE 1 /* Failing exit status. */ +#define EXIT_SUCCESS 0 /* Successful exit status. */ + + +/* Maximum length of a multibyte character in the current locale. */ +#define MB_CUR_MAX (__ctype_get_mb_cur_max ()) +extern size_t __ctype_get_mb_cur_max (void) __THROW __wur; + + +/* Convert a string to a floating-point number. */ +extern double atof (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; +/* Convert a string to an integer. */ +extern int atoi (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; +/* Convert a string to a long integer. */ +extern long int atol (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; + +#ifdef __USE_ISOC99 +/* Convert a string to a long long integer. */ +__extension__ extern long long int atoll (const char *__nptr) + __THROW __attribute_pure__ __nonnull ((1)) __wur; +#endif + +/* Convert a string to a floating-point number. */ +extern double strtod (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); + +#ifdef __USE_ISOC99 +/* Likewise for `float' and `long double' sizes of floating-point numbers. */ +extern float strtof (const char *__restrict __nptr, + char **__restrict __endptr) __THROW __nonnull ((1)); + +extern long double strtold (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +/* Likewise for '_FloatN' and '_FloatNx'. */ + +#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float16 strtof16 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float32 strtof32 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float64 strtof64 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float128 strtof128 (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float32x strtof32x (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float64x strtof64x (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern _Float128x strtof128x (const char *__restrict __nptr, + char **__restrict __endptr) + __THROW __nonnull ((1)); +#endif + +/* Convert a string to a long integer. */ +extern long int strtol (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +/* Convert a string to an unsigned long integer. */ +extern unsigned long int strtoul (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); + +#ifdef __USE_MISC +/* Convert a string to a quadword integer. */ +__extension__ +extern long long int strtoq (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +/* Convert a string to an unsigned quadword integer. */ +__extension__ +extern unsigned long long int strtouq (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +#endif /* Use misc. */ + +#ifdef __USE_ISOC99 +/* Convert a string to a quadword integer. */ +__extension__ +extern long long int strtoll (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +/* Convert a string to an unsigned quadword integer. */ +__extension__ +extern unsigned long long int strtoull (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +#endif /* ISO C99 or use MISC. */ + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +#if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (strtol, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtol) + __nonnull ((1)); +extern unsigned long int __REDIRECT_NTH (strtoul, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoul) + __nonnull ((1)); +# ifdef __USE_MISC +__extension__ +extern long long int __REDIRECT_NTH (strtoq, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoll) + __nonnull ((1)); +__extension__ +extern unsigned long long int __REDIRECT_NTH (strtouq, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoull) + __nonnull ((1)); +# endif +__extension__ +extern long long int __REDIRECT_NTH (strtoll, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoll) + __nonnull ((1)); +__extension__ +extern unsigned long long int __REDIRECT_NTH (strtoull, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base), __isoc23_strtoull) + __nonnull ((1)); +# else +extern long int __isoc23_strtol (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +extern unsigned long int __isoc23_strtoul (const char *__restrict __nptr, + char **__restrict __endptr, + int __base) + __THROW __nonnull ((1)); +__extension__ +extern long long int __isoc23_strtoll (const char *__restrict __nptr, + char **__restrict __endptr, int __base) + __THROW __nonnull ((1)); +__extension__ +extern unsigned long long int __isoc23_strtoull (const char *__restrict __nptr, + char **__restrict __endptr, + int __base) + __THROW __nonnull ((1)); +# define strtol __isoc23_strtol +# define strtoul __isoc23_strtoul +# ifdef __USE_MISC +# define strtoq __isoc23_strtoll +# define strtouq __isoc23_strtoull +# endif +# define strtoll __isoc23_strtoll +# define strtoull __isoc23_strtoull +# endif +#endif + +/* Convert a floating-point number to a string. */ +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) +extern int strfromd (char *__dest, size_t __size, const char *__format, + double __f) + __THROW __nonnull ((3)); + +extern int strfromf (char *__dest, size_t __size, const char *__format, + float __f) + __THROW __nonnull ((3)); + +extern int strfroml (char *__dest, size_t __size, const char *__format, + long double __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf16 (char *__dest, size_t __size, const char * __format, + _Float16 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf32 (char *__dest, size_t __size, const char * __format, + _Float32 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf64 (char *__dest, size_t __size, const char * __format, + _Float64 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf128 (char *__dest, size_t __size, const char * __format, + _Float128 __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf32x (char *__dest, size_t __size, const char * __format, + _Float32x __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf64x (char *__dest, size_t __size, const char * __format, + _Float64x __f) + __THROW __nonnull ((3)); +#endif + +#if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +extern int strfromf128x (char *__dest, size_t __size, const char * __format, + _Float128x __f) + __THROW __nonnull ((3)); +#endif + + +#ifdef __USE_GNU +/* Parallel versions of the functions above which take the locale to + use as an additional parameter. These are GNU extensions inspired + by the POSIX.1-2008 extended locale API. */ +# include + +extern long int strtol_l (const char *__restrict __nptr, + char **__restrict __endptr, int __base, + locale_t __loc) __THROW __nonnull ((1, 4)); + +extern unsigned long int strtoul_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); + +__extension__ +extern long long int strtoll_l (const char *__restrict __nptr, + char **__restrict __endptr, int __base, + locale_t __loc) + __THROW __nonnull ((1, 4)); + +__extension__ +extern unsigned long long int strtoull_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (strtol_l, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_strtol_l) + __nonnull ((1, 4)); +extern unsigned long int __REDIRECT_NTH (strtoul_l, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_strtoul_l) + __nonnull ((1, 4)); +__extension__ +extern long long int __REDIRECT_NTH (strtoll_l, (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, + locale_t __loc), + __isoc23_strtoll_l) + __nonnull ((1, 4)); +__extension__ +extern unsigned long long int __REDIRECT_NTH (strtoull_l, + (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_strtoull_l) + __nonnull ((1, 4)); +# else +extern long int __isoc23_strtol_l (const char *__restrict __nptr, + char **__restrict __endptr, int __base, + locale_t __loc) __THROW __nonnull ((1, 4)); +extern unsigned long int __isoc23_strtoul_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); +__extension__ +extern long long int __isoc23_strtoll_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); +__extension__ +extern unsigned long long int __isoc23_strtoull_l (const char *__restrict __nptr, + char **__restrict __endptr, + int __base, locale_t __loc) + __THROW __nonnull ((1, 4)); +# define strtol_l __isoc23_strtol_l +# define strtoul_l __isoc23_strtoul_l +# define strtoll_l __isoc23_strtoll_l +# define strtoull_l __isoc23_strtoull_l +# endif +# endif + +extern double strtod_l (const char *__restrict __nptr, + char **__restrict __endptr, locale_t __loc) + __THROW __nonnull ((1, 3)); + +extern float strtof_l (const char *__restrict __nptr, + char **__restrict __endptr, locale_t __loc) + __THROW __nonnull ((1, 3)); + +extern long double strtold_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); + +# if __HAVE_FLOAT16 +extern _Float16 strtof16_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT32 +extern _Float32 strtof32_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT64 +extern _Float64 strtof64_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT128 +extern _Float128 strtof128_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT32X +extern _Float32x strtof32x_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT64X +extern _Float64x strtof64x_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif + +# if __HAVE_FLOAT128X +extern _Float128x strtof128x_l (const char *__restrict __nptr, + char **__restrict __endptr, + locale_t __loc) + __THROW __nonnull ((1, 3)); +# endif +#endif /* GNU */ + + +#ifdef __USE_EXTERN_INLINES +__extern_inline int +__NTH (atoi (const char *__nptr)) +{ + return (int) strtol (__nptr, (char **) NULL, 10); +} +__extern_inline long int +__NTH (atol (const char *__nptr)) +{ + return strtol (__nptr, (char **) NULL, 10); +} + +# ifdef __USE_ISOC99 +__extension__ __extern_inline long long int +__NTH (atoll (const char *__nptr)) +{ + return strtoll (__nptr, (char **) NULL, 10); +} +# endif +#endif /* Optimizing and Inlining. */ + + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant + digit first. Returns a pointer to static storage overwritten by the + next call. */ +extern char *l64a (long int __n) __THROW __wur; + +/* Read a number from a string S in base 64 as above. */ +extern long int a64l (const char *__s) + __THROW __attribute_pure__ __nonnull ((1)) __wur; + +#endif /* Use misc || extended X/Open. */ + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +# include /* we need int32_t... */ + +/* These are the functions that actually do things. The `random', `srandom', + `initstate' and `setstate' functions are those from BSD Unices. + The `rand' and `srand' functions are required by the ANSI standard. + We provide both interfaces to the same random number generator. */ +/* Return a random long integer between 0 and 2^31-1 inclusive. */ +extern long int random (void) __THROW; + +/* Seed the random number generator with the given number. */ +extern void srandom (unsigned int __seed) __THROW; + +/* Initialize the random number generator to use state buffer STATEBUF, + of length STATELEN, and seed it with SEED. Optimal lengths are 8, 16, + 32, 64, 128 and 256, the bigger the better; values less than 8 will + cause an error and values greater than 256 will be rounded down. */ +extern char *initstate (unsigned int __seed, char *__statebuf, + size_t __statelen) __THROW __nonnull ((2)); + +/* Switch the random number generator to state buffer STATEBUF, + which should have been previously initialized by `initstate'. */ +extern char *setstate (char *__statebuf) __THROW __nonnull ((1)); + + +# ifdef __USE_MISC +/* Reentrant versions of the `random' family of functions. + These functions all use the following data structure to contain + state, rather than global state variables. */ + +struct random_data + { + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ + }; + +extern int random_r (struct random_data *__restrict __buf, + int32_t *__restrict __result) __THROW __nonnull ((1, 2)); + +extern int srandom_r (unsigned int __seed, struct random_data *__buf) + __THROW __nonnull ((2)); + +extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, + size_t __statelen, + struct random_data *__restrict __buf) + __THROW __nonnull ((2, 4)); + +extern int setstate_r (char *__restrict __statebuf, + struct random_data *__restrict __buf) + __THROW __nonnull ((1, 2)); +# endif /* Use misc. */ +#endif /* Use extended X/Open || misc. */ + + +/* Return a random integer between 0 and RAND_MAX inclusive. */ +extern int rand (void) __THROW; +/* Seed the random number generator with the given number. */ +extern void srand (unsigned int __seed) __THROW; + +#ifdef __USE_POSIX199506 +/* Reentrant interface according to POSIX.1. */ +extern int rand_r (unsigned int *__seed) __THROW; +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* System V style 48-bit random number generator functions. */ + +/* Return non-negative, double-precision floating-point value in [0.0,1.0). */ +extern double drand48 (void) __THROW; +extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1)); + +/* Return non-negative, long integer in [0,2^31). */ +extern long int lrand48 (void) __THROW; +extern long int nrand48 (unsigned short int __xsubi[3]) + __THROW __nonnull ((1)); + +/* Return signed, long integers in [-2^31,2^31). */ +extern long int mrand48 (void) __THROW; +extern long int jrand48 (unsigned short int __xsubi[3]) + __THROW __nonnull ((1)); + +/* Seed random number generator. */ +extern void srand48 (long int __seedval) __THROW; +extern unsigned short int *seed48 (unsigned short int __seed16v[3]) + __THROW __nonnull ((1)); +extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1)); + +# ifdef __USE_MISC +/* Data structure for communication with thread safe versions. This + type is to be regarded as opaque. It's only exported because users + have to allocate objects of this type. */ +struct drand48_data + { + unsigned short int __x[3]; /* Current state. */ + unsigned short int __old_x[3]; /* Old state. */ + unsigned short int __c; /* Additive const. in congruential formula. */ + unsigned short int __init; /* Flag for initializing. */ + __extension__ unsigned long long int __a; /* Factor in congruential + formula. */ + }; + +/* Return non-negative, double-precision floating-point value in [0.0,1.0). */ +extern int drand48_r (struct drand48_data *__restrict __buffer, + double *__restrict __result) __THROW __nonnull ((1, 2)); +extern int erand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + double *__restrict __result) __THROW __nonnull ((1, 2)); + +/* Return non-negative, long integer in [0,2^31). */ +extern int lrand48_r (struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); +extern int nrand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); + +/* Return signed, long integers in [-2^31,2^31). */ +extern int mrand48_r (struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); +extern int jrand48_r (unsigned short int __xsubi[3], + struct drand48_data *__restrict __buffer, + long int *__restrict __result) + __THROW __nonnull ((1, 2)); + +/* Seed random number generator. */ +extern int srand48_r (long int __seedval, struct drand48_data *__buffer) + __THROW __nonnull ((2)); + +extern int seed48_r (unsigned short int __seed16v[3], + struct drand48_data *__buffer) __THROW __nonnull ((1, 2)); + +extern int lcong48_r (unsigned short int __param[7], + struct drand48_data *__buffer) + __THROW __nonnull ((1, 2)); + +/* Return a random integer between zero and 2**32-1 (inclusive). */ +extern __uint32_t arc4random (void) + __THROW __wur; + +/* Fill the buffer with random data. */ +extern void arc4random_buf (void *__buf, size_t __size) + __THROW __nonnull ((1)); + +/* Return a random number between zero (inclusive) and the specified + limit (exclusive). */ +extern __uint32_t arc4random_uniform (__uint32_t __upper_bound) + __THROW __wur; +# endif /* Use misc. */ +#endif /* Use misc or X/Open. */ + +/* Allocate SIZE bytes of memory. */ +extern void *malloc (size_t __size) __THROW __attribute_malloc__ + __attribute_alloc_size__ ((1)) __wur; +/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ +extern void *calloc (size_t __nmemb, size_t __size) + __THROW __attribute_malloc__ __attribute_alloc_size__ ((1, 2)) __wur; + +/* Re-allocate the previously allocated block + in PTR, making the new block SIZE bytes long. */ +/* __attribute_malloc__ is not used, because if realloc returns + the same pointer that was passed to it, aliasing needs to be allowed + between objects pointed by the old and new pointers. */ +extern void *realloc (void *__ptr, size_t __size) + __THROW __attribute_warn_unused_result__ __attribute_alloc_size__ ((2)); + +/* Free a block allocated by `malloc', `realloc' or `calloc'. */ +extern void free (void *__ptr) __THROW; + +#ifdef __USE_MISC +/* Re-allocate the previously allocated block in PTR, making the new + block large enough for NMEMB elements of SIZE bytes each. */ +/* __attribute_malloc__ is not used, because if reallocarray returns + the same pointer that was passed to it, aliasing needs to be allowed + between objects pointed by the old and new pointers. */ +extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) + __THROW __attribute_warn_unused_result__ + __attribute_alloc_size__ ((2, 3)) + __attr_dealloc_free; + +/* Add reallocarray as its own deallocator. */ +extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) + __THROW __attr_dealloc (reallocarray, 1); +#endif + +#ifdef __USE_MISC +# include +#endif /* Use misc. */ + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \ + || defined __USE_MISC +/* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */ +extern void *valloc (size_t __size) __THROW __attribute_malloc__ + __attribute_alloc_size__ ((1)) __wur; +#endif + +#ifdef __USE_XOPEN2K +/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */ +extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) + __THROW __nonnull ((1)) __wur; +#endif + +#ifdef __USE_ISOC11 +/* ISO C variant of aligned allocation. */ +extern void *aligned_alloc (size_t __alignment, size_t __size) + __THROW __attribute_malloc__ __attribute_alloc_align__ ((1)) + __attribute_alloc_size__ ((2)) __wur; +#endif + +/* Abort execution and generate a core-dump. */ +extern void abort (void) __THROW __attribute__ ((__noreturn__)) __COLD; + + +/* Register a function to be called when `exit' is called. */ +extern int atexit (void (*__func) (void)) __THROW __nonnull ((1)); + +#if defined __USE_ISOC11 || defined __USE_ISOCXX11 +/* Register a function to be called when `quick_exit' is called. */ +# ifdef __cplusplus +extern "C++" int at_quick_exit (void (*__func) (void)) + __THROW __asm ("at_quick_exit") __nonnull ((1)); +# else +extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1)); +# endif +#endif + +#ifdef __USE_MISC +/* Register a function to be called with the status + given to `exit' and the given argument. */ +extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) + __THROW __nonnull ((1)); +#endif + +/* Call all functions registered with `atexit' and `on_exit', + in the reverse of the order in which they were registered, + perform stdio cleanup, and terminate program execution with STATUS. */ +extern void exit (int __status) __THROW __attribute__ ((__noreturn__)); + +#if defined __USE_ISOC11 || defined __USE_ISOCXX11 +/* Call all functions registered with `at_quick_exit' in the reverse + of the order in which they were registered and terminate program + execution with STATUS. */ +extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__)); +#endif + +#ifdef __USE_ISOC99 +/* Terminate the program with STATUS without calling any of the + functions registered with `atexit' or `on_exit'. */ +extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__)); +#endif + + +/* Return the value of envariable NAME, or NULL if it doesn't exist. */ +extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur; + +#ifdef __USE_GNU +/* This function is similar to the above but returns NULL if the + programs is running with SUID or SGID enabled. */ +extern char *secure_getenv (const char *__name) + __THROW __nonnull ((1)) __wur; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN +/* The SVID says this is in , but this seems a better place. */ +/* Put STRING, which is of the form "NAME=VALUE", in the environment. + If there is no `=', remove NAME from the environment. */ +extern int putenv (char *__string) __THROW __nonnull ((1)); +#endif + +#ifdef __USE_XOPEN2K +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +extern int setenv (const char *__name, const char *__value, int __replace) + __THROW __nonnull ((2)); + +/* Remove the variable NAME from the environment. */ +extern int unsetenv (const char *__name) __THROW __nonnull ((1)); +#endif + +#ifdef __USE_MISC +/* The `clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +extern int clearenv (void) __THROW; +#endif + + +#if defined __USE_MISC \ + || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + Always returns TEMPLATE, it's either a temporary file name or a null + string if it cannot get a unique file name. */ +extern char *mktemp (char *__template) __THROW __nonnull ((1)); +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the filename unique. + Returns a file descriptor open on the file for reading and writing, + or -1 if it cannot create a uniquely-named file. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkstemp (char *__template) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkstemp, (char *__template), mkstemp64) + __nonnull ((1)) __wur; +# else +# define mkstemp mkstemp64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkstemp64 (char *__template) __nonnull ((1)) __wur; +# endif +#endif + +#ifdef __USE_MISC +/* Similar to mkstemp, but the template can have a suffix after the + XXXXXX. The length of the suffix is specified in the second + parameter. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen), + mkstemps64) __nonnull ((1)) __wur; +# else +# define mkstemps mkstemps64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkstemps64 (char *__template, int __suffixlen) + __nonnull ((1)) __wur; +# endif +#endif + +#ifdef __USE_XOPEN2K8 +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur; +#endif + +#ifdef __USE_GNU +/* Generate a unique temporary file name from TEMPLATE similar to + mkstemp. But allow the caller to pass additional flags which are + used in the open call to create the file.. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64) + __nonnull ((1)) __wur; +# else +# define mkostemp mkostemp64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur; +# endif + +/* Similar to mkostemp, but the template can have a suffix after the + XXXXXX. The length of the suffix is specified in the second + parameter. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkostemps (char *__template, int __suffixlen, int __flags) + __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen, + int __flags), mkostemps64) + __nonnull ((1)) __wur; +# else +# define mkostemps mkostemps64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkostemps64 (char *__template, int __suffixlen, int __flags) + __nonnull ((1)) __wur; +# endif +#endif + + +/* Execute the given line as a shell command. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int system (const char *__command) __wur; + + +#ifdef __USE_GNU +/* Return a malloc'd string containing the canonical absolute name of the + existing named file. */ +extern char *canonicalize_file_name (const char *__name) + __THROW __nonnull ((1)) __attribute_malloc__ + __attr_dealloc_free __wur; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Return the canonical absolute name of file NAME. If RESOLVED is + null, the result is malloc'd; otherwise, if the canonical name is + PATH_MAX chars or more, returns null with `errno' set to + ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, + returns the name in RESOLVED. */ +extern char *realpath (const char *__restrict __name, + char *__restrict __resolved) __THROW __wur; +#endif + + +/* Shorthand for type of comparison functions. */ +#ifndef __COMPAR_FN_T +# define __COMPAR_FN_T +typedef int (*__compar_fn_t) (const void *, const void *); + +# ifdef __USE_GNU +typedef __compar_fn_t comparison_fn_t; +# endif +#endif +#ifdef __USE_GNU +typedef int (*__compar_d_fn_t) (const void *, const void *, void *); +#endif + +/* Do a binary search for KEY in BASE, which consists of NMEMB elements + of SIZE bytes each, using COMPAR to perform the comparisons. */ +extern void *bsearch (const void *__key, const void *__base, + size_t __nmemb, size_t __size, __compar_fn_t __compar) + __nonnull ((1, 2, 5)) __wur; + +#ifdef __USE_EXTERN_INLINES +# include +#endif + +/* Sort NMEMB elements of BASE, of SIZE bytes each, + using COMPAR to perform the comparisons. */ +extern void qsort (void *__base, size_t __nmemb, size_t __size, + __compar_fn_t __compar) __nonnull ((1, 4)); +#ifdef __USE_GNU +extern void qsort_r (void *__base, size_t __nmemb, size_t __size, + __compar_d_fn_t __compar, void *__arg) + __nonnull ((1, 4)); +#endif + + +/* Return the absolute value of X. */ +extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur; +extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur; + +#ifdef __USE_ISOC99 +__extension__ extern long long int llabs (long long int __x) + __THROW __attribute__ ((__const__)) __wur; +#endif + + +/* Return the `div_t', `ldiv_t' or `lldiv_t' representation + of the value of NUMER over DENOM. */ +/* GCC may have built-ins for these someday. */ +extern div_t div (int __numer, int __denom) + __THROW __attribute__ ((__const__)) __wur; +extern ldiv_t ldiv (long int __numer, long int __denom) + __THROW __attribute__ ((__const__)) __wur; + +#ifdef __USE_ISOC99 +__extension__ extern lldiv_t lldiv (long long int __numer, + long long int __denom) + __THROW __attribute__ ((__const__)) __wur; +#endif + + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ + || defined __USE_MISC +/* Convert floating point numbers to strings. The returned values are + valid only until another call to the same function. */ + +/* Convert VALUE to a string with NDIGIT digits and return a pointer to + this. Set *DECPT with the position of the decimal character and *SIGN + with the sign of the number. */ +extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur; + +/* Convert VALUE to a string rounded to NDIGIT decimal digits. Set *DECPT + with the position of the decimal character and *SIGN with the sign of + the number. */ +extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur; + +/* If possible convert VALUE to a string with NDIGIT significant digits. + Otherwise use exponential representation. The resulting string will + be written to BUF. */ +extern char *gcvt (double __value, int __ndigit, char *__buf) + __THROW __nonnull ((3)) __wur; +#endif + +#ifdef __USE_MISC +/* Long double versions of above functions. */ +extern char *qecvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign) + __THROW __nonnull ((3, 4)) __wur; +extern char *qfcvt (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign) + __THROW __nonnull ((3, 4)) __wur; +extern char *qgcvt (long double __value, int __ndigit, char *__buf) + __THROW __nonnull ((3)) __wur; + + +/* Reentrant version of the functions above which provide their own + buffers. */ +extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len) __THROW __nonnull ((3, 4, 5)); +extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, + int *__restrict __sign, char *__restrict __buf, + size_t __len) __THROW __nonnull ((3, 4, 5)); + +extern int qecvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len) + __THROW __nonnull ((3, 4, 5)); +extern int qfcvt_r (long double __value, int __ndigit, + int *__restrict __decpt, int *__restrict __sign, + char *__restrict __buf, size_t __len) + __THROW __nonnull ((3, 4, 5)); +#endif /* misc */ + + +/* Return the length of the multibyte character + in S, which is no longer than N. */ +extern int mblen (const char *__s, size_t __n) __THROW; +/* Return the length of the given multibyte character, + putting its `wchar_t' representation in *PWC. */ +extern int mbtowc (wchar_t *__restrict __pwc, + const char *__restrict __s, size_t __n) __THROW; +/* Put the multibyte character represented + by WCHAR in S, returning its length. */ +extern int wctomb (char *__s, wchar_t __wchar) __THROW; + + +/* Convert a multibyte string to a wide char string. */ +extern size_t mbstowcs (wchar_t *__restrict __pwcs, + const char *__restrict __s, size_t __n) __THROW + __attr_access ((__read_only__, 2)); +/* Convert a wide char string to multibyte string. */ +extern size_t wcstombs (char *__restrict __s, + const wchar_t *__restrict __pwcs, size_t __n) + __THROW + __fortified_attr_access (__write_only__, 1, 3) + __attr_access ((__read_only__, 2)); + +#ifdef __USE_MISC +/* Determine whether the string value of RESPONSE matches the affirmation + or negative response expression as specified by the LC_MESSAGES category + in the program's current locale. Returns 1 if affirmative, 0 if + negative, and -1 if not matching. */ +extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur; +#endif + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Parse comma separated suboption from *OPTIONP and match against + strings in TOKENS. If found return index and set *VALUEP to + optional value introduced by an equal sign. If the suboption is + not part of TOKENS return in *VALUEP beginning of unknown + suboption. On exit *OPTIONP is set to the beginning of the next + token or at the terminating NUL character. */ +extern int getsubopt (char **__restrict __optionp, + char *const *__restrict __tokens, + char **__restrict __valuep) + __THROW __nonnull ((1, 2, 3)) __wur; +#endif + + +/* X/Open pseudo terminal handling. */ + +#ifdef __USE_XOPEN2KXSI +/* Return a master pseudo-terminal handle. */ +extern int posix_openpt (int __oflag) __wur; +#endif + +#ifdef __USE_XOPEN_EXTENDED +/* The next four functions all take a master pseudo-tty fd and + perform an operation on the associated slave: */ + +/* Chown the slave to the calling user. */ +extern int grantpt (int __fd) __THROW; + +/* Release an internal lock so the slave can be opened. + Call after grantpt(). */ +extern int unlockpt (int __fd) __THROW; + +/* Return the pathname of the pseudo terminal slave associated with + the master FD is open on, or NULL on errors. + The returned storage is good until the next call to this function. */ +extern char *ptsname (int __fd) __THROW __wur; +#endif + +#ifdef __USE_GNU +/* Store at most BUFLEN characters of the pathname of the slave pseudo + terminal associated with the master FD is open on in BUF. + Return 0 on success, otherwise an error number. */ +extern int ptsname_r (int __fd, char *__buf, size_t __buflen) + __THROW __nonnull ((2)) __fortified_attr_access (__write_only__, 2, 3); + +/* Open a master pseudo terminal and return its file descriptor. */ +extern int getpt (void); +#endif + +#ifdef __USE_MISC +/* Put the 1 minute, 5 minute and 15 minute load averages into the first + NELEM elements of LOADAVG. Return the number written (never more than + three, but may be less than NELEM), or -1 if an error occurred. */ +extern int getloadavg (double __loadavg[], int __nelem) + __THROW __nonnull ((1)); +#endif + +#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K +/* Return the index into the active-logins file (utmp) for + the controlling terminal. */ +extern int ttyslot (void) __THROW; +#endif + +#include + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#endif + +#include +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +__END_DECLS + +#endif /* stdlib.h */ diff --git a/board/mentalnet/overlay/usr/include/string.h b/board/mentalnet/overlay/usr/include/string.h new file mode 100644 index 0000000..df4d489 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/string.h @@ -0,0 +1,554 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.21 String handling + */ + +#ifndef _STRING_H +#define _STRING_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +__BEGIN_DECLS + +/* Get size_t and NULL from . */ +#define __need_size_t +#define __need_NULL +#include + +/* Tell the caller that we provide correct C++ prototypes. */ +#if defined __cplusplus && (__GNUC_PREREQ (4, 4) \ + || __glibc_clang_prereq (3, 5)) +# define __CORRECT_ISO_CPP_STRING_H_PROTO +#endif + + +/* Copy N bytes of SRC to DEST. */ +extern void *memcpy (void *__restrict __dest, const void *__restrict __src, + size_t __n) __THROW __nonnull ((1, 2)); +/* Copy N bytes of SRC to DEST, guaranteeing + correct behavior for overlapping strings. */ +extern void *memmove (void *__dest, const void *__src, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Copy no more than N bytes of SRC to DEST, stopping when C is found. + Return the position in DEST one byte past where C was copied, + or NULL if C was not found in the first N bytes of SRC. */ +#if defined __USE_MISC || defined __USE_XOPEN || __GLIBC_USE (ISOC23) +extern void *memccpy (void *__restrict __dest, const void *__restrict __src, + int __c, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__write_only__, 1, 4)); +#endif /* Misc || X/Open. */ + + +/* Set N bytes of S to C. */ +extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1)); + +/* Compare N bytes of S1 and S2. */ +extern int memcmp (const void *__s1, const void *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Compare N bytes of S1 and S2. Return zero if S1 and S2 are equal. + Return some non-zero value otherwise. + + Essentially __memcmpeq has the exact same semantics as memcmp + except the return value is less constrained. memcmp is always a + correct implementation of __memcmpeq. As well !!memcmp, -memcmp, + or bcmp are correct implementations. + + __memcmpeq is meant to be used by compilers when memcmp return is + only used for its boolean value. + + __memcmpeq is declared only for use by compilers. Programs should + continue to use memcmp. */ +extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Search N bytes of S for C. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern void *memchr (void *__s, int __c, size_t __n) + __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1)); +extern const void *memchr (const void *__s, int __c, size_t __n) + __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1)); + +# ifdef __OPTIMIZE__ +__extern_always_inline void * +memchr (void *__s, int __c, size_t __n) __THROW +{ + return __builtin_memchr (__s, __c, __n); +} + +__extern_always_inline const void * +memchr (const void *__s, int __c, size_t __n) __THROW +{ + return __builtin_memchr (__s, __c, __n); +} +# endif +} +#else +extern void *memchr (const void *__s, int __c, size_t __n) + __THROW __attribute_pure__ __nonnull ((1)); +#endif + +#ifdef __USE_GNU +/* Search in S for C. This is similar to `memchr' but there is no + length limit. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" void *rawmemchr (void *__s, int __c) + __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1)); +extern "C++" const void *rawmemchr (const void *__s, int __c) + __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1)); +# else +extern void *rawmemchr (const void *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif + +/* Search N bytes of S for the final occurrence of C. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" void *memrchr (void *__s, int __c, size_t __n) + __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1)) + __attr_access ((__read_only__, 1, 3)); +extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) + __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1)) + __attr_access ((__read_only__, 1, 3)); +# else +extern void *memrchr (const void *__s, int __c, size_t __n) + __THROW __attribute_pure__ __nonnull ((1)) + __attr_access ((__read_only__, 1, 3)); +# endif +#endif + + +/* Copy SRC to DEST. */ +extern char *strcpy (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); +/* Copy no more than N characters of SRC to DEST. */ +extern char *strncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Append SRC onto DEST. */ +extern char *strcat (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); +/* Append no more than N characters from SRC onto DEST. */ +extern char *strncat (char *__restrict __dest, const char *__restrict __src, + size_t __n) __THROW __nonnull ((1, 2)); + +/* Compare S1 and S2. */ +extern int strcmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Compare N characters of S1 and S2. */ +extern int strncmp (const char *__s1, const char *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Compare the collated forms of S1 and S2. */ +extern int strcoll (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Put a transformation of SRC into no more than N bytes of DEST. */ +extern size_t strxfrm (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((2)) __attr_access ((__write_only__, 1, 3)); + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* Compare the collated forms of S1 and S2, using sorting rules from L. */ +extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l) + __THROW __attribute_pure__ __nonnull ((1, 2, 3)); +/* Put a transformation of SRC into no more than N bytes of DEST, + using sorting rules from L. */ +extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, + locale_t __l) __THROW __nonnull ((2, 4)) + __attr_access ((__write_only__, 1, 3)); +#endif + +#if (defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 \ + || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC23)) +/* Duplicate S, returning an identical malloc'd string. */ +extern char *strdup (const char *__s) + __THROW __attribute_malloc__ __nonnull ((1)); +#endif + +/* Return a malloc'd copy of at most N bytes of STRING. The + resultant string is terminated even if no null terminator + appears before STRING[N]. */ +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) || __GLIBC_USE (ISOC23) +extern char *strndup (const char *__string, size_t __n) + __THROW __attribute_malloc__ __nonnull ((1)); +#endif + +#if defined __USE_GNU && defined __GNUC__ +/* Duplicate S, returning an identical alloca'd string. */ +# define strdupa(s) \ + (__extension__ \ + ({ \ + const char *__old = (s); \ + size_t __len = strlen (__old) + 1; \ + char *__new = (char *) __builtin_alloca (__len); \ + (char *) memcpy (__new, __old, __len); \ + })) + +/* Return an alloca'd copy of at most N bytes of string. */ +# define strndupa(s, n) \ + (__extension__ \ + ({ \ + const char *__old = (s); \ + size_t __len = strnlen (__old, (n)); \ + char *__new = (char *) __builtin_alloca (__len + 1); \ + __new[__len] = '\0'; \ + (char *) memcpy (__new, __old, __len); \ + })) +#endif + +/* Find the first occurrence of C in S. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strchr (char *__s, int __c) + __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1)); +extern const char *strchr (const char *__s, int __c) + __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strchr (char *__s, int __c) __THROW +{ + return __builtin_strchr (__s, __c); +} + +__extern_always_inline const char * +strchr (const char *__s, int __c) __THROW +{ + return __builtin_strchr (__s, __c); +} +# endif +} +#else +extern char *strchr (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +#endif +/* Find the last occurrence of C in S. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strrchr (char *__s, int __c) + __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1)); +extern const char *strrchr (const char *__s, int __c) + __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strrchr (char *__s, int __c) __THROW +{ + return __builtin_strrchr (__s, __c); +} + +__extern_always_inline const char * +strrchr (const char *__s, int __c) __THROW +{ + return __builtin_strrchr (__s, __c); +} +# endif +} +#else +extern char *strrchr (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +#endif + +#ifdef __USE_MISC +/* This function is similar to `strchr'. But it returns a pointer to + the closing NUL byte in case C is not found in S. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" char *strchrnul (char *__s, int __c) + __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1)); +extern "C++" const char *strchrnul (const char *__s, int __c) + __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1)); +# else +extern char *strchrnul (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif +#endif + +/* Return the length of the initial segment of S which + consists entirely of characters not in REJECT. */ +extern size_t strcspn (const char *__s, const char *__reject) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Return the length of the initial segment of S which + consists entirely of characters in ACCEPT. */ +extern size_t strspn (const char *__s, const char *__accept) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Find the first occurrence in S of any character in ACCEPT. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strpbrk (char *__s, const char *__accept) + __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2)); +extern const char *strpbrk (const char *__s, const char *__accept) + __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strpbrk (char *__s, const char *__accept) __THROW +{ + return __builtin_strpbrk (__s, __accept); +} + +__extern_always_inline const char * +strpbrk (const char *__s, const char *__accept) __THROW +{ + return __builtin_strpbrk (__s, __accept); +} +# endif +} +#else +extern char *strpbrk (const char *__s, const char *__accept) + __THROW __attribute_pure__ __nonnull ((1, 2)); +#endif +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" +{ +extern char *strstr (char *__haystack, const char *__needle) + __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2)); +extern const char *strstr (const char *__haystack, const char *__needle) + __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2)); + +# ifdef __OPTIMIZE__ +__extern_always_inline char * +strstr (char *__haystack, const char *__needle) __THROW +{ + return __builtin_strstr (__haystack, __needle); +} + +__extern_always_inline const char * +strstr (const char *__haystack, const char *__needle) __THROW +{ + return __builtin_strstr (__haystack, __needle); +} +# endif +} +#else +extern char *strstr (const char *__haystack, const char *__needle) + __THROW __attribute_pure__ __nonnull ((1, 2)); +#endif + + +/* Divide S into tokens separated by characters in DELIM. */ +extern char *strtok (char *__restrict __s, const char *__restrict __delim) + __THROW __nonnull ((2)); + +/* Divide S into tokens separated by characters in DELIM. Information + passed between calls are stored in SAVE_PTR. */ +extern char *__strtok_r (char *__restrict __s, + const char *__restrict __delim, + char **__restrict __save_ptr) + __THROW __nonnull ((2, 3)); +#ifdef __USE_POSIX +extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, + char **__restrict __save_ptr) + __THROW __nonnull ((2, 3)); +#endif + +#ifdef __USE_MISC +/* Similar to `strstr' but this function ignores the case of both strings. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" char *strcasestr (char *__haystack, const char *__needle) + __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2)); +extern "C++" const char *strcasestr (const char *__haystack, + const char *__needle) + __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2)); +# else +extern char *strcasestr (const char *__haystack, const char *__needle) + __THROW __attribute_pure__ __nonnull ((1, 2)); +# endif +#endif + +#ifdef __USE_MISC +/* Find the first occurrence of NEEDLE in HAYSTACK. + NEEDLE is NEEDLELEN bytes long; + HAYSTACK is HAYSTACKLEN bytes long. */ +extern void *memmem (const void *__haystack, size_t __haystacklen, + const void *__needle, size_t __needlelen) + __THROW __attribute_pure__ __nonnull ((1, 3)) + __attr_access ((__read_only__, 1, 2)) + __attr_access ((__read_only__, 3, 4)); + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +extern void *__mempcpy (void *__restrict __dest, + const void *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +extern void *mempcpy (void *__restrict __dest, + const void *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +#endif + + +/* Return the length of S. */ +extern size_t strlen (const char *__s) + __THROW __attribute_pure__ __nonnull ((1)); + +#ifdef __USE_XOPEN2K8 +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +extern size_t strnlen (const char *__string, size_t __maxlen) + __THROW __attribute_pure__ __nonnull ((1)); +#endif + + +/* Return a string describing the meaning of the `errno' code in ERRNUM. */ +extern char *strerror (int __errnum) __THROW; +#ifdef __USE_XOPEN2K +/* Reentrant version of `strerror'. + There are 2 flavors of `strerror_r', GNU which returns the string + and may or may not use the supplied temporary buffer and POSIX one + which fills the string into the buffer. + To use the POSIX version, -D_XOPEN_SOURCE=600 or -D_POSIX_C_SOURCE=200112L + without -D_GNU_SOURCE is needed, otherwise the GNU version is + preferred. */ +# if defined __USE_XOPEN2K && !defined __USE_GNU +/* Fill BUF with a string describing the meaning of the `errno' code in + ERRNUM. */ +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (strerror_r, + (int __errnum, char *__buf, size_t __buflen), + __xpg_strerror_r) __nonnull ((2)) + __attr_access ((__write_only__, 2, 3)); +# else +extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) + __THROW __nonnull ((2)) __attr_access ((__write_only__, 2, 3)); +# define strerror_r __xpg_strerror_r +# endif +# else +/* If a temporary buffer is required, at most BUFLEN bytes of BUF will be + used. */ +extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) + __THROW __nonnull ((2)) __wur __attr_access ((__write_only__, 2, 3)); +# endif + +# ifdef __USE_GNU +/* Return a string describing the meaning of tthe error in ERR. */ +extern const char *strerrordesc_np (int __err) __THROW; +/* Return a string with the error name in ERR. */ +extern const char *strerrorname_np (int __err) __THROW; +# endif +#endif + +#ifdef __USE_XOPEN2K8 +/* Translate error number to string according to the locale L. */ +extern char *strerror_l (int __errnum, locale_t __l) __THROW; +#endif + +#ifdef __USE_MISC +# include + +/* Set N bytes of S to 0. The compiler will not delete a call to this + function, even if S is dead after the call. */ +extern void explicit_bzero (void *__s, size_t __n) __THROW __nonnull ((1)) + __fortified_attr_access (__write_only__, 1, 2); + +/* Return the next DELIM-delimited token from *STRINGP, + terminating it with a '\0', and update *STRINGP to point past it. */ +extern char *strsep (char **__restrict __stringp, + const char *__restrict __delim) + __THROW __nonnull ((1, 2)); +#endif + +#ifdef __USE_XOPEN2K8 +/* Return a string describing the meaning of the signal number in SIG. */ +extern char *strsignal (int __sig) __THROW; + +# ifdef __USE_GNU +/* Return an abbreviation string for the signal number SIG. */ +extern const char *sigabbrev_np (int __sig) __THROW; +/* Return a string describing the meaning of the signal number in SIG, + the result is not translated. */ +extern const char *sigdescr_np (int __sig) __THROW; +# endif + +/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ +extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); +extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) + __THROW __nonnull ((1, 2)); + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +extern char *__stpncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +extern char *stpncpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); +#endif + +#ifdef __USE_MISC +/* Copy at most N - 1 characters from SRC to DEST. */ +extern size_t strlcpy (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__write_only__, 1, 3)); + +/* Append SRC to DEST, possibly with truncation to keep the total size + below N. */ +extern size_t strlcat (char *__restrict __dest, + const char *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__read_write__, 1, 3)); +#endif + +#ifdef __USE_GNU +/* Compare S1 and S2 as strings holding name & indices/version numbers. */ +extern int strverscmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Sautee STRING briskly. */ +extern char *strfry (char *__string) __THROW __nonnull ((1)); + +/* Frobnicate N bytes of S. */ +extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1)) + __attr_access ((__read_write__, 1, 2)); + +# ifndef basename +/* Return the file name within directory of FILENAME. We don't + declare the function if the `basename' macro is available (defined + in ) which makes the XPG version of this function + available. */ +# ifdef __CORRECT_ISO_CPP_STRING_H_PROTO +extern "C++" char *basename (char *__filename) + __THROW __asm ("basename") __nonnull ((1)); +extern "C++" const char *basename (const char *__filename) + __THROW __asm ("basename") __nonnull ((1)); +# else +extern char *basename (const char *__filename) __THROW __nonnull ((1)); +# endif +# endif +#endif + +#if __GNUC_PREREQ (3,4) +# if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Functions with security checks. */ +# include +# endif +#endif + +__END_DECLS + +#endif /* string.h */ diff --git a/board/mentalnet/overlay/usr/include/strings.h b/board/mentalnet/overlay/usr/include/strings.h new file mode 100644 index 0000000..c5f3aa7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/strings.h @@ -0,0 +1,148 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _STRINGS_H +#define _STRINGS_H 1 + +#include +#define __need_size_t +#include + +/* Tell the caller that we provide correct C++ prototypes. */ +#if defined __cplusplus && __GNUC_PREREQ (4, 4) +# define __CORRECT_ISO_CPP_STRINGS_H_PROTO +#endif + +__BEGIN_DECLS + +#if defined __USE_MISC || !defined __USE_XOPEN2K8 +/* Compare N bytes of S1 and S2 (same as memcmp). */ +extern int bcmp (const void *__s1, const void *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Copy N bytes of SRC to DEST (like memmove, but args reversed). */ +extern void bcopy (const void *__src, void *__dest, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Set N bytes of S to 0. */ +extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1)); + +/* Find the first occurrence of C in S (same as strchr). */ +# ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO +extern "C++" +{ +extern char *index (char *__s, int __c) + __THROW __asm ("index") __attribute_pure__ __nonnull ((1)); +extern const char *index (const char *__s, int __c) + __THROW __asm ("index") __attribute_pure__ __nonnull ((1)); + +# if defined __OPTIMIZE__ +__extern_always_inline char * +index (char *__s, int __c) __THROW +{ + return __builtin_index (__s, __c); +} + +__extern_always_inline const char * +index (const char *__s, int __c) __THROW +{ + return __builtin_index (__s, __c); +} +# endif +} +# else +extern char *index (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif + +/* Find the last occurrence of C in S (same as strrchr). */ +# ifdef __CORRECT_ISO_CPP_STRINGS_H_PROTO +extern "C++" +{ +extern char *rindex (char *__s, int __c) + __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1)); +extern const char *rindex (const char *__s, int __c) + __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1)); + +# if defined __OPTIMIZE__ +__extern_always_inline char * +rindex (char *__s, int __c) __THROW +{ + return __builtin_rindex (__s, __c); +} + +__extern_always_inline const char * +rindex (const char *__s, int __c) __THROW +{ + return __builtin_rindex (__s, __c); +} +# endif +} +# else +extern char *rindex (const char *__s, int __c) + __THROW __attribute_pure__ __nonnull ((1)); +# endif +#endif + +#if defined __USE_MISC || !defined __USE_XOPEN2K8 || defined __USE_XOPEN2K8XSI +/* Return the position of the first bit set in I, or 0 if none are set. + The least-significant bit is position 1, the most-significant 32. */ +extern int ffs (int __i) __THROW __attribute_const__; +#endif + +/* The following two functions are non-standard but necessary for non-32 bit + platforms. */ +# ifdef __USE_MISC +extern int ffsl (long int __l) __THROW __attribute_const__; +__extension__ extern int ffsll (long long int __ll) + __THROW __attribute_const__; +# endif + +/* Compare S1 and S2, ignoring case. */ +extern int strcasecmp (const char *__s1, const char *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +#ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* Compare S1 and S2, ignoring case, using collation rules from LOC. */ +extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) + __THROW __attribute_pure__ __nonnull ((1, 2, 3)); + +/* Compare no more than N chars of S1 and S2, ignoring case, using + collation rules from LOC. */ +extern int strncasecmp_l (const char *__s1, const char *__s2, + size_t __n, locale_t __loc) + __THROW __attribute_pure__ __nonnull ((1, 2, 4)); +#endif + +__END_DECLS + +#if __GNUC_PREREQ (3,4) && __USE_FORTIFY_LEVEL > 0 \ + && defined __fortify_function +/* Functions with security checks. */ +# if defined __USE_MISC || !defined __USE_XOPEN2K8 +# include +# endif +#endif + +#endif /* strings.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/acct.h b/board/mentalnet/overlay/usr/include/sys/acct.h new file mode 100644 index 0000000..509b7ec --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/acct.h @@ -0,0 +1,108 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_ACCT_H +#define _SYS_ACCT_H 1 + +#include +#include +#include +#include + +__BEGIN_DECLS + +#define ACCT_COMM 16 + +/* + comp_t is a 16-bit "floating" point number with a 3-bit base 8 + exponent and a 13-bit fraction. See linux/kernel/acct.c for the + specific encoding system used. +*/ + +typedef uint16_t comp_t; + +struct acct +{ + char ac_flag; /* Flags. */ + uint16_t ac_uid; /* Real user ID. */ + uint16_t ac_gid; /* Real group ID. */ + uint16_t ac_tty; /* Controlling terminal. */ + uint32_t ac_btime; /* Beginning time. */ + comp_t ac_utime; /* User time. */ + comp_t ac_stime; /* System time. */ + comp_t ac_etime; /* Elapsed time. */ + comp_t ac_mem; /* Average memory usage. */ + comp_t ac_io; /* Chars transferred. */ + comp_t ac_rw; /* Blocks read or written. */ + comp_t ac_minflt; /* Minor pagefaults. */ + comp_t ac_majflt; /* Major pagefaults. */ + comp_t ac_swaps; /* Number of swaps. */ + uint32_t ac_exitcode; /* Process exitcode. */ + char ac_comm[ACCT_COMM+1]; /* Command name. */ + char ac_pad[10]; /* Padding bytes. */ +}; + + +struct acct_v3 +{ + char ac_flag; /* Flags */ + char ac_version; /* Always set to ACCT_VERSION */ + uint16_t ac_tty; /* Control Terminal */ + uint32_t ac_exitcode; /* Exitcode */ + uint32_t ac_uid; /* Real User ID */ + uint32_t ac_gid; /* Real Group ID */ + uint32_t ac_pid; /* Process ID */ + uint32_t ac_ppid; /* Parent Process ID */ + uint32_t ac_btime; /* Process Creation Time */ + float ac_etime; /* Elapsed Time */ + comp_t ac_utime; /* User Time */ + comp_t ac_stime; /* System Time */ + comp_t ac_mem; /* Average Memory Usage */ + comp_t ac_io; /* Chars Transferred */ + comp_t ac_rw; /* Blocks Read or Written */ + comp_t ac_minflt; /* Minor Pagefaults */ + comp_t ac_majflt; /* Major Pagefaults */ + comp_t ac_swaps; /* Number of Swaps */ + char ac_comm[ACCT_COMM]; /* Command Name */ +}; + + +enum + { + AFORK = 0x01, /* Has executed fork, but no exec. */ + ASU = 0x02, /* Used super-user privileges. */ + ACORE = 0x08, /* Dumped core. */ + AXSIG = 0x10, /* Killed by a signal. */ + AGROUP = 0x20 /* Was the last task of the process + (task group). */ + }; + +#if __BYTE_ORDER == __BIG_ENDIAN +# define ACCT_BYTEORDER 0x80 /* Accounting file is big endian. */ +#else +# define ACCT_BYTEORDER 0x00 /* Accounting file is little endian. */ +#endif + +#define AHZ 100 + + +/* Switch process accounting on and off. */ +extern int acct (const char *__filename) __THROW; + +__END_DECLS + +#endif /* sys/acct.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/auxv.h b/board/mentalnet/overlay/usr/include/sys/auxv.h new file mode 100644 index 0000000..885ae20 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/auxv.h @@ -0,0 +1,36 @@ +/* Access to the auxiliary vector. + Copyright (C) 2012-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_AUXV_H +#define _SYS_AUXV_H 1 + +#include +#include +#include + +__BEGIN_DECLS + +/* Return the value associated with an Elf*_auxv_t type from the auxv list + passed to the program on startup. If TYPE was not present in the auxv + list, returns zero and sets errno to ENOENT. */ +extern unsigned long int getauxval (unsigned long int __type) + __THROW; + +__END_DECLS + +#endif /* sys/auxv.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/bitypes.h b/board/mentalnet/overlay/usr/include/sys/bitypes.h new file mode 100644 index 0000000..3a9860f --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/bitypes.h @@ -0,0 +1,3 @@ +/* The GNU defines all the necessary types. */ + +#include diff --git a/board/mentalnet/overlay/usr/include/sys/capability.h b/board/mentalnet/overlay/usr/include/sys/capability.h new file mode 100644 index 0000000..0657b7b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/capability.h @@ -0,0 +1,255 @@ +/* + * + * + * Copyright (C) 1997 Aleph One + * Copyright (C) 1997,8, 2008,19-22 Andrew G. Morgan + * + * defunct POSIX.1e Standard: 25.2 Capabilities + */ + +#ifndef _SYS_CAPABILITY_H +#define _SYS_CAPABILITY_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Provide a programmatic way to #ifdef around features. + */ +#define LIBCAP_MAJOR 2 +#define LIBCAP_MINOR 73 + +/* + * This file complements the kernel file by providing prototype + * information for the user library. + */ + +#include +#include + +#ifndef __user +#define __user +#endif +#include + +/* + * POSIX capability types + */ + +/* + * Opaque capability handle (defined internally by libcap) + * internal capability representation + */ +typedef struct _cap_struct *cap_t; + +/* "external" capability representation is a (void *) */ + +/* + * This is the type used to identify capabilities + */ + +typedef int cap_value_t; + +/* + * libcap initialized first unnamed capability of the running kernel. + * capsh includes a runtime test to flag when this is larger than + * what is known to libcap... Time for a new libcap release! + */ +extern cap_value_t cap_max_bits(void); + +/* + * cap_proc_root reads and (optionally: when root != NULL) changes + * libcap's notion of where the "/proc" filesystem is mounted. When + * the return value is NULL, it should be interpreted as the + * value "/proc". + * + * Note, this is a global value and not considered thread safe to + * write - so the client should take suitable care when changing + * it. + * + * Further, libcap will allocate a memory copy for storing the + * replacement root, and it is this kind of memory that is returned. + * So, when changing the value, the caller should + * cap_free(the-return-value) else cause a memory leak. + * + * Note, the library uses a destructor to clean up the live allocated + * value of the working setting. + */ +extern char *cap_proc_root(const char *root); + +/* + * Set identifiers + */ +typedef enum { + CAP_EFFECTIVE = 0, /* Specifies the effective flag */ + CAP_PERMITTED = 1, /* Specifies the permitted flag */ + CAP_INHERITABLE = 2 /* Specifies the inheritable flag */ +} cap_flag_t; + +typedef enum { + CAP_IAB_INH = 2, + CAP_IAB_AMB = 3, + CAP_IAB_BOUND = 4 +} cap_iab_vector_t; + +/* + * An opaque generalization of the inheritable bits that includes both + * what ambient bits to raise and what bounding bits to *lower* (aka + * drop). None of these bits once set, using cap_iab_set(), affect + * the running process but are consulted, through the execve() system + * call, by the kernel. Note, the ambient bits ('A') of the running + * process are fragile with respect to other aspects of the "posix" + * (cap_t) operations: most importantly, 'A' cannot ever hold bits not + * present in the intersection of 'pI' and 'pP'. The kernel + * immediately drops all ambient caps whenever such a situation + * arises. Typically, the ambient bits are used to support a naive + * capability inheritance model - at odds with the POSIX (sic) model + * of inheritance where inherited (pI) capabilities need to also be + * wanted by the executed binary (fI) in order to become raised + * through exec. + */ +typedef struct cap_iab_s *cap_iab_t; + +/* + * These are the states available to each capability + */ +typedef enum { + CAP_CLEAR=0, /* The flag is cleared/disabled */ + CAP_SET=1 /* The flag is set/enabled */ +} cap_flag_value_t; + +/* + * User-space capability manipulation routines + */ +typedef unsigned cap_mode_t; +#define CAP_MODE_UNCERTAIN ((cap_mode_t) 0) +#define CAP_MODE_NOPRIV ((cap_mode_t) 1) +#define CAP_MODE_PURE1E_INIT ((cap_mode_t) 2) +#define CAP_MODE_PURE1E ((cap_mode_t) 3) +#define CAP_MODE_HYBRID ((cap_mode_t) 4) + +/* libcap/cap_alloc.c */ +extern cap_t cap_dup(cap_t); +extern int cap_free(void *); +extern cap_t cap_init(void); +extern cap_iab_t cap_iab_dup(cap_iab_t); +extern cap_iab_t cap_iab_init(void); + +/* libcap/cap_flag.c */ +extern int cap_get_flag(cap_t, cap_value_t, cap_flag_t, cap_flag_value_t *); +extern int cap_set_flag(cap_t, cap_flag_t, int, const cap_value_t *, + cap_flag_value_t); +extern int cap_clear(cap_t); +extern int cap_clear_flag(cap_t, cap_flag_t); +extern int cap_fill_flag(cap_t cap_d, cap_flag_t to, + cap_t ref, cap_flag_t from); +extern int cap_fill(cap_t, cap_flag_t, cap_flag_t); + +#define CAP_DIFFERS(result, flag) (((result) & (1 << (flag))) != 0) +extern int cap_compare(cap_t, cap_t); +#define CAP_IAB_DIFFERS(result, vector) (((result) & (1 << (vector))) != 0) +extern int cap_iab_compare(cap_iab_t, cap_iab_t); + +extern cap_flag_value_t cap_iab_get_vector(cap_iab_t, cap_iab_vector_t, + cap_value_t); +extern int cap_iab_set_vector(cap_iab_t, cap_iab_vector_t, cap_value_t, + cap_flag_value_t); +extern int cap_iab_fill(cap_iab_t, cap_iab_vector_t, cap_t, cap_flag_t); + +/* libcap/cap_file.c */ +extern cap_t cap_get_fd(int); +extern cap_t cap_get_file(const char *); +extern uid_t cap_get_nsowner(cap_t); +extern int cap_set_fd(int, cap_t); +extern int cap_set_file(const char *, cap_t); +extern int cap_set_nsowner(cap_t, uid_t); + +/* libcap/cap_proc.c */ +extern cap_t cap_get_proc(void); +extern cap_t cap_get_pid(pid_t); +extern int cap_set_proc(cap_t); + +extern int cap_get_bound(cap_value_t); +extern int cap_drop_bound(cap_value_t); +#define CAP_IS_SUPPORTED(cap) (cap_get_bound(cap) >= 0) + +extern int cap_get_ambient(cap_value_t); +extern int cap_set_ambient(cap_value_t, cap_flag_value_t); +extern int cap_reset_ambient(void); +#define CAP_AMBIENT_SUPPORTED() (cap_get_ambient(CAP_CHOWN) >= 0) + +/* libcap/cap_extint.c */ +extern ssize_t cap_size(cap_t cap_d); +extern ssize_t cap_copy_ext(void *cap_ext, cap_t cap_d, ssize_t length); +extern cap_t cap_copy_int(const void *cap_ext); +extern cap_t cap_copy_int_check(const void *cap_ext, ssize_t length); + +/* libcap/cap_text.c */ +extern cap_t cap_from_text(const char *); +extern char * cap_to_text(cap_t, ssize_t *); +extern int cap_from_name(const char *, cap_value_t *); +extern char * cap_to_name(cap_value_t); + +extern char * cap_iab_to_text(cap_iab_t iab); +extern cap_iab_t cap_iab_from_text(const char *text); + +/* libcap/cap_proc.c */ +extern void cap_set_syscall(long int (*new_syscall)(long int, + long int, long int, long int), + long int (*new_syscall6)(long int, + long int, long int, long int, + long int, long int, long int)); + +extern int cap_set_mode(cap_mode_t flavor); +extern cap_mode_t cap_get_mode(void); +extern const char *cap_mode_name(cap_mode_t flavor); + +extern unsigned cap_get_secbits(void); +extern int cap_set_secbits(unsigned bits); + +extern int cap_prctl(long int pr_cmd, long int arg1, long int arg2, + long int arg3, long int arg4, long int arg5); +extern int cap_prctlw(long int pr_cmd, long int arg1, long int arg2, + long int arg3, long int arg4, long int arg5); +extern int cap_setuid(uid_t uid); +extern int cap_setgroups(gid_t gid, size_t ngroups, const gid_t groups[]); + +extern cap_iab_t cap_iab_get_proc(void); +extern cap_iab_t cap_iab_get_pid(pid_t); +extern int cap_iab_set_proc(cap_iab_t iab); + +typedef struct cap_launch_s *cap_launch_t; + +extern cap_launch_t cap_new_launcher(const char *arg0, const char * const *argv, + const char * const *envp); +extern cap_launch_t cap_func_launcher(int (callback_fn)(void *detail)); +extern int cap_launcher_callback(cap_launch_t attr, + int (callback_fn)(void *detail)); +extern int cap_launcher_setuid(cap_launch_t attr, uid_t uid); +extern int cap_launcher_setgroups(cap_launch_t attr, gid_t gid, + int ngroups, const gid_t *groups); +extern int cap_launcher_set_mode(cap_launch_t attr, cap_mode_t flavor); +extern cap_iab_t cap_launcher_set_iab(cap_launch_t attr, cap_iab_t iab); +extern int cap_launcher_set_chroot(cap_launch_t attr, const char *chroot); +extern pid_t cap_launch(cap_launch_t attr, void *detail); + +/* + * system calls - look to libc for function to system call + * mapping. Note, libcap does not use capset directly, but permits the + * cap_set_syscall() to redirect the system call function. + */ +extern int capget(cap_user_header_t header, cap_user_data_t data); +extern int capset(cap_user_header_t header, const cap_user_data_t data); + +/* deprecated - use cap_get_pid() */ +extern int capgetp(pid_t pid, cap_t cap_d); + +/* not valid with filesystem capability support - use cap_set_proc() */ +extern int capsetp(pid_t pid, cap_t cap_d); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CAPABILITY_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/cdefs.h b/board/mentalnet/overlay/usr/include/sys/cdefs.h new file mode 100644 index 0000000..215ff93 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/cdefs.h @@ -0,0 +1,886 @@ +/* Copyright (C) 1992-2025 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + supported anymore. */ +#if defined __GNUC__ && !defined __STDC__ && !defined __cplusplus +# error "You need a ISO C or C++ conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +/* Compilers that lack __has_attribute may object to + #if defined __has_attribute && __has_attribute (...) + even though they do not need to evaluate the right-hand side of the &&. + Similarly for __has_builtin, etc. */ +#if (defined __has_attribute \ + && (!defined __clang_minor__ \ + || 3 < __clang_major__ + (5 <= __clang_minor__))) +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif +#ifdef __has_builtin +# define __glibc_has_builtin(name) __has_builtin (name) +#else +# define __glibc_has_builtin(name) 0 +#endif +#ifdef __has_extension +# define __glibc_has_extension(ext) __has_extension (ext) +#else +# define __glibc_has_extension(ext) 0 +#endif + +#if defined __GNUC__ || defined __clang__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this only works with + gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus \ + && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) +# if __cplusplus >= 201103L +# define __THROW noexcept (true) +# else +# define __THROW throw () +# endif +# define __THROWNL __THROW +# define __NTH(fct) __LEAF_ATTR fct __THROW +# define __NTHNL(fct) fct __THROW +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +# if __GNUC_PREREQ (4, 3) || __glibc_has_attribute (__cold__) +# define __COLD __attribute__ ((__cold__)) +# else +# define __COLD +# endif + +#else /* Not GCC or clang. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __COLD + +#endif /* GCC || clang. */ + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* The overloadable attribute was added on clang 2.6. */ +#if defined __clang_major__ \ + && (__clang_major__ + (__clang_minor__ >= 6) > 2) +# define __attribute_overloadable__ __attribute__((__overloadable__)) +#else +# define __attribute_overloadable__ +#endif + +/* Fortify support. */ +#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +#define __bos0(ptr) __builtin_object_size (ptr, 0) + +/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ +#if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ + || __GNUC_PREREQ (12, 0)) +# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) +# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) +#else +# define __glibc_objsize0(__o) __bos0 (__o) +# define __glibc_objsize(__o) __bos (__o) +#endif + +#if __USE_FORTIFY_LEVEL > 0 +/* Compile time conditions to choose between the regular, _chk and _chk_warn + variants. These conditions should get evaluated to constant and optimized + away. */ + +#define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) +#define __glibc_unsigned_or_positive(__l) \ + ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ + || (__builtin_constant_p (__l) && (__l) > 0)) + +/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ + condition can be folded to a constant and if it is true, or unknown (-1) */ +#define __glibc_safe_or_unknown_len(__l, __s, __osz) \ + ((__builtin_constant_p (__osz) && (__osz) == (__SIZE_TYPE__) -1) \ + || (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + (__s), (__osz))) \ + && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) + +/* Conversely, we know at compile time that the length is unsafe if the + __L * __S <= __OBJSZ condition can be folded to a constant and if it is + false. */ +#define __glibc_unsafe_len(__l, __s, __osz) \ + (__glibc_unsigned_or_positive (__l) \ + && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ + __s, __osz)) \ + && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) + +/* To correctly instrument the fortify wrapper clang requires the + pass_object_size attribute, and the attribute has the restriction that the + argument needs to be 'const'. Furthermore, to make it usable with C + interfaces, clang provides the overload attribute, which provides a C++ + like function overload support. The overloaded fortify wrapper with the + pass_object_size attribute has precedence over the default symbol. + + Also, clang does not support __va_arg_pack, so variadic functions are + expanded to issue va_arg implementations. The error function must not have + bodies (address takes are expanded to nonfortified calls), and with + __fortify_function compiler might still create a body with the C++ + mangling name (due to the overload attribute). In this case, the function + is defined with __fortify_function_error_function macro instead. + + The argument size check is also done with a clang-only attribute, + __attribute__ ((__diagnose_if__ (...))), different than gcc which calls + symbol_chk_warn alias with uses __warnattr attribute. + + The pass_object_size was added on clang 4.0, __diagnose_if__ on 5.0, + and pass_dynamic_object_size on 9.0. */ +#if defined __clang_major__ && __clang_major__ >= 5 +# define __fortify_use_clang 1 + +# define __fortify_function_error_function static __attribute__((__unused__)) + +# define __fortify_clang_pass_object_size_n(n) \ + __attribute__ ((__pass_object_size__ (n))) +# define __fortify_clang_pass_object_size0 \ + __fortify_clang_pass_object_size_n (0) +# define __fortify_clang_pass_object_size \ + __fortify_clang_pass_object_size_n (__USE_FORTIFY_LEVEL > 1) + +# if __clang_major__ >= 9 +# define __fortify_clang_pass_dynamic_object_size_n(n) \ + __attribute__ ((__pass_dynamic_object_size__ (n))) +# define __fortify_clang_pass_dynamic_object_size0 \ + __fortify_clang_pass_dynamic_object_size_n (0) +# define __fortify_clang_pass_dynamic_object_size \ + __fortify_clang_pass_dynamic_object_size_n (1) +# else +# define __fortify_clang_pass_dynamic_object_size_n(n) +# define __fortify_clang_pass_dynamic_object_size0 +# define __fortify_clang_pass_dynamic_object_size +# endif + +# define __fortify_clang_bos_static_lt_impl(bos_val, n, s) \ + ((bos_val) != -1ULL && (n) > (bos_val) / (s)) +# define __fortify_clang_bos_static_lt2(__n, __e, __s) \ + __fortify_clang_bos_static_lt_impl (__bos (__e), __n, __s) +# define __fortify_clang_bos_static_lt(__n, __e) \ + __fortify_clang_bos_static_lt2 (__n, __e, 1) +# define __fortify_clang_bos0_static_lt2(__n, __e, __s) \ + __fortify_clang_bos_static_lt_impl (__bos0 (__e), __n, __s) +# define __fortify_clang_bos0_static_lt(__n, __e) \ + __fortify_clang_bos0_static_lt2 (__n, __e, 1) + +# define __fortify_clang_bosn_args(bos_fn, n, buf, div, complaint) \ + (__fortify_clang_bos_static_lt_impl (bos_fn (buf), n, div)), (complaint), \ + "warning" + +# define __fortify_clang_warning(__c, __msg) \ + __attribute__ ((__diagnose_if__ ((__c), (__msg), "warning"))) +# define __fortify_clang_error(__c, __msg) \ + __attribute__ ((__diagnose_if__ ((__c), (__msg), "error"))) +# define __fortify_clang_warning_only_if_bos0_lt(n, buf, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos0, n, buf, 1, complaint)))) +# define __fortify_clang_warning_only_if_bos0_lt2(n, buf, div, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos0, n, buf, div, complaint)))) +# define __fortify_clang_warning_only_if_bos_lt(n, buf, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos, n, buf, 1, complaint)))) +# define __fortify_clang_warning_only_if_bos_lt2(n, buf, div, complaint) \ + __attribute__ ((__diagnose_if__ \ + (__fortify_clang_bosn_args (__bos, n, buf, div, complaint)))) + +# define __fortify_clang_prefer_this_overload \ + __attribute__ ((enable_if (1, ""))) +# define __fortify_clang_unavailable(__msg) \ + __attribute__ ((unavailable(__msg))) + +# if __USE_FORTIFY_LEVEL == 3 +# define __fortify_clang_overload_arg(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_dynamic_object_size __name +# define __fortify_clang_overload_arg0(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_dynamic_object_size0 __name +# else +# define __fortify_clang_overload_arg(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_object_size __name +# define __fortify_clang_overload_arg0(__type, __attr, __name) \ + __type __attr const __fortify_clang_pass_object_size0 __name +# endif + +# define __fortify_clang_mul_may_overflow(size, n) \ + ((size | n) >= (((size_t)1) << (8 * sizeof (size_t) / 2))) + +# define __fortify_clang_size_too_small(__bos, __dest, __len) \ + (__bos (__dest) != (size_t) -1 && __bos (__dest) < __len) +# define __fortify_clang_warn_if_src_too_large(__dest, __src) \ + __fortify_clang_warning (__fortify_clang_size_too_small (__glibc_objsize, \ + __dest, \ + __builtin_strlen (__src) + 1), \ + "destination buffer will always be overflown by source") +# define __fortify_clang_warn_if_dest_too_small(__dest, __len) \ + __fortify_clang_warning (__fortify_clang_size_too_small (__glibc_objsize, \ + __dest, \ + __len), \ + "function called with bigger length than the destination buffer") +# define __fortify_clang_warn_if_dest_too_small0(__dest, __len) \ + __fortify_clang_warning (__fortify_clang_size_too_small (__glibc_objsize0, \ + __dest, \ + __len), \ + "function called with bigger length than the destination buffer") +#else +# define __fortify_use_clang 0 +# define __fortify_clang_warning(__c, __msg) +# define __fortify_clang_warning_only_if_bos0_lt(__n, __buf, __complaint) +# define __fortify_clang_warning_only_if_bos0_lt2(__n, __buf, __div, complaint) +# define __fortify_clang_warning_only_if_bos_lt(__n, __buf, __complaint) +# define __fortify_clang_warning_only_if_bos_lt2(__n, __buf, div, __complaint) +# define __fortify_clang_overload_arg(__type, __attr, __name) \ + __type __attr __name +# define __fortify_clang_overload_arg0(__type, __attr, __name) \ + __fortify_clang_overload_arg (__type, __attr, __name) +# define __fortify_clang_warn_if_src_too_large(__dest, __src) +# define __fortify_clang_warn_if_dest_too_small(__dest, __len) +# define __fortify_clang_warn_if_dest_too_small0(__dest, __len) +#endif + + +/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be + declared. */ + +#if !__fortify_use_clang +# define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ + : __ ## f ## _chk (__VA_ARGS__, __osz))) +#else +# define __glibc_fortify(f, __l, __s, __osz, ...) \ + (__osz == (__SIZE_TYPE__) -1) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : __ ## f ## _chk (__VA_ARGS__, __osz) +#endif + +/* Fortify function f, where object size argument passed to f is the number of + elements and not total size. */ + +#if !__fortify_use_clang +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__glibc_safe_or_unknown_len (__l, __s, __osz) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : (__glibc_unsafe_len (__l, __s, __osz) \ + ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) +# else +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ + (__osz == (__SIZE_TYPE__) -1) \ + ? __ ## f ## _alias (__VA_ARGS__) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)) +#endif + +#endif /* __USE_FORTIFY_LEVEL > 0 */ + +#if __GNUC_PREREQ (4,3) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) || defined __clang__ +/* GCC 2.97 and clang support C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +#ifndef __REDIRECT_FORTIFY +#define __REDIRECT_FORTIFY __REDIRECT +#endif + +#ifndef __REDIRECT_FORTIFY_NTH +#define __REDIRECT_FORTIFY_NTH __REDIRECT_NTH +#endif + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC and clang have various useful declarations that can be made with + the '__attribute__' syntax. All of the ways we use this do fine if + they are omitted for compilers that don't understand it. */ +#if !(defined __GNUC__ || defined __clang__) +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* Tell the compiler which argument to an allocation function + indicates the alignment of the allocation. */ +#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) +# define __attribute_alloc_align__(param) \ + __attribute__ ((__alloc_align__ param)) +#else +# define __attribute_alloc_align__(param) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) +# define __attribute_maybe_unused__ __attribute__ ((__unused__)) +#else +# define __attribute_maybe_unused__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) \ + || __glibc_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. This has the name __nonnull in glibc, + and __attribute_nonnull__ in files shared with Gnulib to avoid + collision with a different __nonnull in DragonFlyBSD 5.9. */ +#ifndef __attribute_nonnull__ +# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) +# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) +# else +# define __attribute_nonnull__(params) +# endif +#endif +#ifndef __nonnull +# define __nonnull(params) __attribute_nonnull__ (params) +#endif + +/* The returns_nonnull function attribute marks the return type of the function + as always being non-null. */ +#ifndef __returns_nonnull +# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) +# define __returns_nonnull __attribute__ ((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ + or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !(__GNUC_PREREQ (2,8) || defined __clang__) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above, and in clang. + It works also in C++ mode (outside of arrays), but only when spelled + as '__restrict', not 'restrict'. */ +#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 and clang support this. + This syntax is not usable in C++ mode. */ +#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !(__GNUC_PREREQ (4,7) \ + || (3 < __clang_major__ + (5 <= __clang_minor__)))) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +/* Undefine (also defined in libc-symbols.h). */ +#undef __attribute_copy__ +#if __GNUC_PREREQ (9, 0) +/* Copies attributes from the declaration or type referenced by + the argument. */ +# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) +#else +# define __attribute_copy__(arg) +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ + || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* Gnulib avoids including these, as they don't work on non-glibc or + older glibc platforms. */ +#ifndef __GNULIB_CDEFS +# include +# include +#endif + +#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# ifdef __REDIRECT + +/* Alias name defined automatically. */ +# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); +# define __REDIRECT_LDBL(name, proto, alias) \ + name proto __asm (__ASMNAME ("__" #alias "ieee128")) + +/* Alias name defined automatically, with leading underscores. */ +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name \ + __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined manually. */ +# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); + +# define __LDBL_REDIR1_NTH(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) + +/* Unused. */ +# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth + +# else +_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); +# endif +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR2_DECL(name) \ + extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ + || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR2_DECL(name) +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#if __GNUC_PREREQ (10, 0) +/* Designates a 1-based positional argument ref-index of pointer type + that can be used to access size-index elements of the pointed-to + array according to access mode, or at least one element when + size-index is not provided: + access (access-mode, [, ]) */ +# define __attr_access(x) __attribute__ ((__access__ x)) +/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may + use the access attribute to get object sizes from function definition + arguments, so we can't use them on functions we fortify. Drop the access + attribute for such functions. */ +# if __USE_FORTIFY_LEVEL == 3 +# define __fortified_attr_access(a, o, s) +# else +# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) +# endif +# if __GNUC_PREREQ (11, 0) +# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) +# else +# define __attr_access_none(argno) +# endif +#else +# define __fortified_attr_access(a, o, s) +# define __attr_access(x) +# define __attr_access_none(argno) +#endif + +#if __GNUC_PREREQ (11, 0) +/* Designates dealloc as a function to call to deallocate objects + allocated by the declared function. */ +# define __attr_dealloc(dealloc, argno) \ + __attribute__ ((__malloc__ (dealloc, argno))) +# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) +#else +# define __attr_dealloc(dealloc, argno) +# define __attr_dealloc_free +#endif + +/* Specify that a function such as setjmp or vfork may return + twice. */ +#if __GNUC_PREREQ (4, 1) +# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) +#else +# define __attribute_returns_twice__ /* Ignore. */ +#endif + +/* Mark struct types as aliasable. Restricted to compilers that + support forward declarations of structs in the presence of the + attribute. */ +#if __GNUC_PREREQ (7, 1) || defined __clang__ +# define __attribute_struct_may_alias__ __attribute__ ((__may_alias__)) +#else +# define __attribute_struct_may_alias__ +#endif + +#endif /* sys/cdefs.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/debugreg.h b/board/mentalnet/overlay/usr/include/sys/debugreg.h new file mode 100644 index 0000000..f1b4c96 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/debugreg.h @@ -0,0 +1,88 @@ +/* Copyright (C) 2001-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_DEBUGREG_H +#define _SYS_DEBUGREG_H 1 + +/* Indicate the register numbers for a number of the specific + debug registers. Registers 0-3 contain the addresses we wish to trap on */ +#define DR_FIRSTADDR 0 /* u_debugreg[DR_FIRSTADDR] */ +#define DR_LASTADDR 3 /* u_debugreg[DR_LASTADDR] */ + +#define DR_STATUS 6 /* u_debugreg[DR_STATUS] */ +#define DR_CONTROL 7 /* u_debugreg[DR_CONTROL] */ + +/* Define a few things for the status register. We can use this to determine + which debugging register was responsible for the trap. The other bits + are either reserved or not of interest to us. */ + +#define DR_TRAP0 (0x1) /* db0 */ +#define DR_TRAP1 (0x2) /* db1 */ +#define DR_TRAP2 (0x4) /* db2 */ +#define DR_TRAP3 (0x8) /* db3 */ + +#define DR_STEP (0x4000) /* single-step */ +#define DR_SWITCH (0x8000) /* task switch */ + +/* Now define a bunch of things for manipulating the control register. + The top two bytes of the control register consist of 4 fields of 4 + bits - each field corresponds to one of the four debug registers, + and indicates what types of access we trap on, and how large the data + field is that we are looking at */ + +#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */ +#define DR_CONTROL_SIZE 4 /* 4 control bits per register */ + +#define DR_RW_EXECUTE (0x0) /* Settings for the access types to trap on */ +#define DR_RW_WRITE (0x1) +#define DR_RW_READ (0x3) + +#define DR_LEN_1 (0x0) /* Settings for data length to trap on */ +#define DR_LEN_2 (0x4) +#define DR_LEN_4 (0xC) +#ifdef __x86_64__ +# define DR_LEN_8 (0x8) +#endif + +/* The low byte to the control register determine which registers are + enabled. There are 4 fields of two bits. One bit is "local", meaning + that the processor will reset the bit after a task switch and the other + is global meaning that we have to explicitly reset the bit. With linux, + you can use either one, since we explicitly zero the register when we enter + kernel mode. */ + +#define DR_LOCAL_ENABLE_SHIFT 0 /* Extra shift to the local enable bit */ +#define DR_GLOBAL_ENABLE_SHIFT 1 /* Extra shift to the global enable bit */ +#define DR_ENABLE_SIZE 2 /* 2 enable bits per register */ + +#define DR_LOCAL_ENABLE_MASK (0x55) /* Set local bits for all 4 regs */ +#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */ + +/* The second byte to the control register has a few special + things. */ + + + +#ifdef __x86_64__ +# define DR_CONTROL_RESERVED (0xFFFFFFFF0000FC00ULL) /* Reserved */ +#else +# define DR_CONTROL_RESERVED (0x00FC00U) /* Reserved */ +#endif +#define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ +#define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ + +#endif /* sys/debugreg.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/dir.h b/board/mentalnet/overlay/usr/include/sys/dir.h new file mode 100644 index 0000000..4c4bdf7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/dir.h @@ -0,0 +1,27 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_DIR_H +#define _SYS_DIR_H 1 + +#include + +#include + +#define direct dirent + +#endif /* sys/dir.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/elf.h b/board/mentalnet/overlay/usr/include/sys/elf.h new file mode 100644 index 0000000..e8108ef --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/elf.h @@ -0,0 +1,29 @@ +/* Copyright (C) 1998-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_ELF_H +#define _SYS_ELF_H 1 + +#ifdef __x86_64__ +# error This header is unsupported on x86-64. +#else +# warning "This header is obsolete; use instead." + +# include +#endif + +#endif /* _SYS_ELF_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/epoll.h b/board/mentalnet/overlay/usr/include/sys/epoll.h new file mode 100644 index 0000000..42dbe70 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/epoll.h @@ -0,0 +1,177 @@ +/* Copyright (C) 2002-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_EPOLL_H +#define _SYS_EPOLL_H 1 + +#include +#include +#include + +#include +#include + +/* Get the platform-dependent flags. */ +#include + +#ifndef __EPOLL_PACKED +# define __EPOLL_PACKED +#endif + + +enum EPOLL_EVENTS + { + EPOLLIN = 0x001, +#define EPOLLIN EPOLLIN + EPOLLPRI = 0x002, +#define EPOLLPRI EPOLLPRI + EPOLLOUT = 0x004, +#define EPOLLOUT EPOLLOUT + EPOLLRDNORM = 0x040, +#define EPOLLRDNORM EPOLLRDNORM + EPOLLRDBAND = 0x080, +#define EPOLLRDBAND EPOLLRDBAND + EPOLLWRNORM = 0x100, +#define EPOLLWRNORM EPOLLWRNORM + EPOLLWRBAND = 0x200, +#define EPOLLWRBAND EPOLLWRBAND + EPOLLMSG = 0x400, +#define EPOLLMSG EPOLLMSG + EPOLLERR = 0x008, +#define EPOLLERR EPOLLERR + EPOLLHUP = 0x010, +#define EPOLLHUP EPOLLHUP + EPOLLRDHUP = 0x2000, +#define EPOLLRDHUP EPOLLRDHUP + EPOLLEXCLUSIVE = 1u << 28, +#define EPOLLEXCLUSIVE EPOLLEXCLUSIVE + EPOLLWAKEUP = 1u << 29, +#define EPOLLWAKEUP EPOLLWAKEUP + EPOLLONESHOT = 1u << 30, +#define EPOLLONESHOT EPOLLONESHOT + EPOLLET = 1u << 31 +#define EPOLLET EPOLLET + }; + + +/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ +#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */ +#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */ +#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */ + + +typedef union epoll_data +{ + void *ptr; + int fd; + uint32_t u32; + uint64_t u64; +} epoll_data_t; + +struct epoll_event +{ + uint32_t events; /* Epoll events */ + epoll_data_t data; /* User data variable */ +} __EPOLL_PACKED; + +struct epoll_params +{ + uint32_t busy_poll_usecs; + uint16_t busy_poll_budget; + uint8_t prefer_busy_poll; + + /* pad the struct to a multiple of 64bits */ + uint8_t __pad; +}; + +#define EPOLL_IOC_TYPE 0x8A +#define EPIOCSPARAMS _IOW(EPOLL_IOC_TYPE, 0x01, struct epoll_params) +#define EPIOCGPARAMS _IOR(EPOLL_IOC_TYPE, 0x02, struct epoll_params) + +__BEGIN_DECLS + +/* Creates an epoll instance. Returns an fd for the new instance. + The "size" parameter is a hint specifying the number of file + descriptors to be associated with the new instance. The fd + returned by epoll_create() should be closed with close(). */ +extern int epoll_create (int __size) __THROW; + +/* Same as epoll_create but with an FLAGS parameter. The unused SIZE + parameter has been dropped. */ +extern int epoll_create1 (int __flags) __THROW; + + +/* Manipulate an epoll instance "epfd". Returns 0 in case of success, + -1 in case of error ( the "errno" variable will contain the + specific error code ) The "op" parameter is one of the EPOLL_CTL_* + constants defined above. The "fd" parameter is the target of the + operation. The "event" parameter describes which events the caller + is interested in and any associated user data. */ +extern int epoll_ctl (int __epfd, int __op, int __fd, + struct epoll_event *__event) __THROW; + + +/* Wait for events on an epoll instance "epfd". Returns the number of + triggered events returned in "events" buffer. Or -1 in case of + error with the "errno" variable set to the specific error code. The + "events" parameter is a buffer that will contain triggered + events. The "maxevents" is the maximum number of events to be + returned ( usually size of "events" ). The "timeout" parameter + specifies the maximum wait time in milliseconds (-1 == infinite). + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int epoll_wait (int __epfd, struct epoll_event *__events, + int __maxevents, int __timeout) + __attr_access ((__write_only__, 2, 3)) __nonnull ((2)); + + +/* Same as epoll_wait, but the thread's signal mask is temporarily + and atomically replaced with the one provided as parameter. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int epoll_pwait (int __epfd, struct epoll_event *__events, + int __maxevents, int __timeout, + const __sigset_t *__ss) + __attr_access ((__write_only__, 2, 3)) __nonnull ((2)); + +/* Same as epoll_pwait, but the timeout as a timespec. + + This function is a cancellation point and therefore not marked with + __THROW. */ +#ifndef __USE_TIME64_REDIRECTS +extern int epoll_pwait2 (int __epfd, struct epoll_event *__events, + int __maxevents, const struct timespec *__timeout, + const __sigset_t *__ss) + __attr_access ((__write_only__, 2, 3)) __nonnull ((2)); +#else +# ifdef __REDIRECT +extern int __REDIRECT (epoll_pwait2, (int __epfd, struct epoll_event *__ev, + int __maxevs, + const struct timespec *__timeout, + const __sigset_t *__ss), + __epoll_pwait2_time64) + __attr_access ((__write_only__, 2, 3)) __nonnull ((2)); +# else +# define epoll_pwait2 __epoll_pwait2_time64 +# endif +#endif + +__END_DECLS + +#endif /* sys/epoll.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/errno.h b/board/mentalnet/overlay/usr/include/sys/errno.h new file mode 100644 index 0000000..339f4fc --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/errno.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/eventfd.h b/board/mentalnet/overlay/usr/include/sys/eventfd.h new file mode 100644 index 0000000..e236cba --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/eventfd.h @@ -0,0 +1,44 @@ +/* Copyright (C) 2007-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_EVENTFD_H +#define _SYS_EVENTFD_H 1 + +#include + +/* Get the platform-dependent flags. */ +#include + +/* Type for event counter. */ +typedef uint64_t eventfd_t; + + +__BEGIN_DECLS + +/* Return file descriptor for generic event channel. Set initial + value to COUNT. */ +extern int eventfd (unsigned int __count, int __flags) __THROW; + +/* Read event counter and possibly wait for events. */ +extern int eventfd_read (int __fd, eventfd_t *__value); + +/* Increment event counter. */ +extern int eventfd_write (int __fd, eventfd_t __value); + +__END_DECLS + +#endif /* sys/eventfd.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/fanotify.h b/board/mentalnet/overlay/usr/include/sys/fanotify.h new file mode 100644 index 0000000..d5a9afe --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/fanotify.h @@ -0,0 +1,38 @@ +/* Copyright (C) 2010-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_FANOTIFY_H +#define _SYS_FANOTIFY_H 1 + +#include +#include + + +__BEGIN_DECLS + +/* Create and initialize fanotify group. */ +extern int fanotify_init (unsigned int __flags, unsigned int __event_f_flags) + __THROW; + +/* Add, remove, or modify an fanotify mark on a filesystem object. */ +extern int fanotify_mark (int __fanotify_fd, unsigned int __flags, + uint64_t __mask, int __dfd, const char *__pathname) + __THROW; + +__END_DECLS + +#endif /* sys/fanotify.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/fcntl.h b/board/mentalnet/overlay/usr/include/sys/fcntl.h new file mode 100644 index 0000000..cd30455 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/fcntl.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/file.h b/board/mentalnet/overlay/usr/include/sys/file.h new file mode 100644 index 0000000..16cc5da --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/file.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_FILE_H +#define _SYS_FILE_H 1 + +#include + +#ifndef _FCNTL_H +# include +#endif + +__BEGIN_DECLS + + +/* Alternate names for values for the WHENCE argument to `lseek'. + These are the same as SEEK_SET, SEEK_CUR, and SEEK_END, respectively. */ +#ifndef L_SET +# define L_SET 0 /* Seek from beginning of file. */ +# define L_INCR 1 /* Seek from current position. */ +# define L_XTND 2 /* Seek from end of file. */ +#endif + + +/* Operations for the `flock' call. */ +#define LOCK_SH 1 /* Shared lock. */ +#define LOCK_EX 2 /* Exclusive lock. */ +#define LOCK_UN 8 /* Unlock. */ + +/* Can be OR'd in to one of the above. */ +#define LOCK_NB 4 /* Don't block when locking. */ + + +/* Apply or remove an advisory lock, according to OPERATION, + on the file FD refers to. */ +extern int flock (int __fd, int __operation) __THROW; + + +__END_DECLS + +#endif /* sys/file.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/fsuid.h b/board/mentalnet/overlay/usr/include/sys/fsuid.h new file mode 100644 index 0000000..3113985 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/fsuid.h @@ -0,0 +1,35 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_FSUID_H +#define _SYS_FSUID_H 1 + +#include +#include + +__BEGIN_DECLS + +/* Change uid used for file access control to UID, without affecting + other privileges (such as who can send signals at the process). */ +extern int setfsuid (__uid_t __uid) __THROW; + +/* Ditto for group id. */ +extern int setfsgid (__gid_t __gid) __THROW; + +__END_DECLS + +#endif /* fsuid.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/gmon.h b/board/mentalnet/overlay/usr/include/sys/gmon.h new file mode 100644 index 0000000..af0582a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/gmon.h @@ -0,0 +1,203 @@ +/*- + * Copyright (c) 1982, 1986, 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)gmon.h 8.2 (Berkeley) 1/4/94 + */ + +#ifndef _SYS_GMON_H +#define _SYS_GMON_H 1 + +#include + +#include + +/* + * See gmon_out.h for gmon.out format. + */ + +/* structure emitted by "gcc -a". This must match struct bb in + gcc/libgcc2.c. It is OK for gcc to declare a longer structure as + long as the members below are present. */ +struct __bb +{ + long zero_word; + const char *filename; + long *counts; + long ncounts; + struct __bb *next; + const unsigned long *addresses; +}; + +extern struct __bb *__bb_head; + +/* + * histogram counters are unsigned shorts (according to the kernel). + */ +#define HISTCOUNTER unsigned short + +/* + * fraction of text space to allocate for histogram counters here, 1/2 + */ +#define HISTFRACTION 2 + +/* + * Fraction of text space to allocate for from hash buckets. + * The value of HASHFRACTION is based on the minimum number of bytes + * of separation between two subroutine call points in the object code. + * Given MIN_SUBR_SEPARATION bytes of separation the value of + * HASHFRACTION is calculated as: + * + * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1); + * + * For example, on the VAX, the shortest two call sequence is: + * + * calls $0,(r0) + * calls $0,(r0) + * + * which is separated by only three bytes, thus HASHFRACTION is + * calculated as: + * + * HASHFRACTION = 3 / (2 * 2 - 1) = 1 + * + * Note that the division above rounds down, thus if MIN_SUBR_FRACTION + * is less than three, this algorithm will not work! + * + * In practice, however, call instructions are rarely at a minimal + * distance. Hence, we will define HASHFRACTION to be 2 across all + * architectures. This saves a reasonable amount of space for + * profiling data structures without (in practice) sacrificing + * any granularity. + */ +#define HASHFRACTION 2 + +/* + * Percent of text space to allocate for tostructs. + * This is a heuristic; we will fail with a warning when profiling programs + * with a very large number of very small functions, but that's + * normally OK. + * 2 is probably still a good value for normal programs. + * Profiling a test case with 64000 small functions will work if + * you raise this value to 3 and link statically (which bloats the + * text size, thus raising the number of arcs expected by the heuristic). + */ +#define ARCDENSITY 3 + +/* + * Always allocate at least this many tostructs. This + * hides the inadequacy of the ARCDENSITY heuristic, at least + * for small programs. + * + * Value can be overridden at runtime by glibc.gmon.minarcs tunable. + */ +#define MINARCS 50 + +/* + * The type used to represent indices into gmonparam.tos[]. + */ +#define ARCINDEX unsigned long + +/* + * Maximum number of arcs we want to allow. + * Used to be max representable value of ARCINDEX minus 2, but now + * that ARCINDEX is a long, that's too large; we don't really want + * to allow a 48 gigabyte table. + * + * Value can be overridden at runtime by glibc.gmon.maxarcs tunable. + */ +#define MAXARCS (1 << 20) + +struct tostruct { + unsigned long selfpc; + long count; + ARCINDEX link; +}; + +/* + * a raw arc, with pointers to the calling site and + * the called site and a count. + */ +struct rawarc { + unsigned long raw_frompc; + unsigned long raw_selfpc; + long raw_count; +}; + +/* + * general rounding functions. + */ +#define ROUNDDOWN(x,y) (((x)/(y))*(y)) +#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) + +/* + * The profiling data structures are housed in this structure. + */ +struct gmonparam { + long int state; + unsigned short *kcount; + unsigned long kcountsize; + ARCINDEX *froms; + unsigned long fromssize; + struct tostruct *tos; + unsigned long tossize; + long tolimit; + unsigned long lowpc; + unsigned long highpc; + unsigned long textsize; + unsigned long hashfraction; + long log_hashfraction; +}; + +/* + * Possible states of profiling. + */ +#define GMON_PROF_ON 0 +#define GMON_PROF_BUSY 1 +#define GMON_PROF_ERROR 2 +#define GMON_PROF_OFF 3 + +/* + * Sysctl definitions for extracting profiling information from the kernel. + */ +#define GPROF_STATE 0 /* int: profiling enabling variable */ +#define GPROF_COUNT 1 /* struct: profile tick count buffer */ +#define GPROF_FROMS 2 /* struct: from location hash bucket */ +#define GPROF_TOS 3 /* struct: destination/count structure */ +#define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */ + +__BEGIN_DECLS + +/* Set up data structures and start profiling. */ +extern void __monstartup (unsigned long __lowpc, unsigned long __highpc) __THROW; +extern void monstartup (unsigned long __lowpc, unsigned long __highpc) __THROW; + +/* Clean up profiling and write out gmon.out. */ +extern void _mcleanup (void) __THROW; + +__END_DECLS + +#endif /* sys/gmon.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/gmon_out.h b/board/mentalnet/overlay/usr/include/sys/gmon_out.h new file mode 100644 index 0000000..efb1b56 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/gmon_out.h @@ -0,0 +1,78 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* This file specifies the format of gmon.out files. It should have + as few external dependencies as possible as it is going to be included + in many different programs. That is, minimize the number of #include's. + + A gmon.out file consists of a header (defined by gmon_hdr) followed by + a sequence of records. Each record starts with a one-byte tag + identifying the type of records, followed by records specific data. */ + +#ifndef _SYS_GMON_OUT_H +#define _SYS_GMON_OUT_H 1 + +#include + +#define GMON_MAGIC "gmon" /* magic cookie */ +#define GMON_VERSION 1 /* version number */ + +/* For profiling shared object we need a new format. */ +#define GMON_SHOBJ_VERSION 0x1ffff + +__BEGIN_DECLS + +/* + * Raw header as it appears on file (without padding). This header + * always comes first in gmon.out and is then followed by a series + * records defined below. + */ +struct gmon_hdr + { + char cookie[4]; + char version[4]; + char spare[3 * 4]; + }; + +/* types of records in this file: */ +typedef enum + { + GMON_TAG_TIME_HIST = 0, + GMON_TAG_CG_ARC = 1, + GMON_TAG_BB_COUNT = 2 + } GMON_Record_Tag; + +struct gmon_hist_hdr + { + char low_pc[sizeof (char *)]; /* base pc address of sample buffer */ + char high_pc[sizeof (char *)]; /* max pc address of sampled buffer */ + char hist_size[4]; /* size of sample buffer */ + char prof_rate[4]; /* profiling clock rate */ + char dimen[15]; /* phys. dim., usually "seconds" */ + char dimen_abbrev; /* usually 's' for "seconds" */ + }; + +struct gmon_cg_arc_record + { + char from_pc[sizeof (char *)]; /* address within caller's body */ + char self_pc[sizeof (char *)]; /* address within callee's body */ + char count[4]; /* number of arc traversals */ + }; + +__END_DECLS + +#endif /* sys/gmon_out.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/inotify.h b/board/mentalnet/overlay/usr/include/sys/inotify.h new file mode 100644 index 0000000..8b23422 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/inotify.h @@ -0,0 +1,100 @@ +/* Copyright (C) 2005-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_INOTIFY_H +#define _SYS_INOTIFY_H 1 + +#include + +/* Get the platform-dependent flags. */ +#include + + +/* Structure describing an inotify event. */ +struct inotify_event +{ + int wd; /* Watch descriptor. */ + uint32_t mask; /* Watch mask. */ + uint32_t cookie; /* Cookie to synchronize two events. */ + uint32_t len; /* Length (including NULs) of name. */ + char name __flexarr; /* Name. */ +}; + + +/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. */ +#define IN_ACCESS 0x00000001 /* File was accessed. */ +#define IN_MODIFY 0x00000002 /* File was modified. */ +#define IN_ATTRIB 0x00000004 /* Metadata changed. */ +#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed. */ +#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed. */ +#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ +#define IN_OPEN 0x00000020 /* File was opened. */ +#define IN_MOVED_FROM 0x00000040 /* File was moved from X. */ +#define IN_MOVED_TO 0x00000080 /* File was moved to Y. */ +#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ +#define IN_CREATE 0x00000100 /* Subfile was created. */ +#define IN_DELETE 0x00000200 /* Subfile was deleted. */ +#define IN_DELETE_SELF 0x00000400 /* Self was deleted. */ +#define IN_MOVE_SELF 0x00000800 /* Self was moved. */ + +/* Events sent by the kernel. */ +#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted. */ +#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */ +#define IN_IGNORED 0x00008000 /* File was ignored. */ + +/* Helper events. */ +#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ +#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ + +/* Special flags. */ +#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a + directory. */ +#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */ +#define IN_EXCL_UNLINK 0x04000000 /* Exclude events on unlinked + objects. */ +#define IN_MASK_CREATE 0x10000000 /* Only create watches. */ +#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already + existing watch. */ +#define IN_ISDIR 0x40000000 /* Event occurred against dir. */ +#define IN_ONESHOT 0x80000000 /* Only send event once. */ + +/* All events which a program can wait on. */ +#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \ + | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \ + | IN_MOVED_TO | IN_CREATE | IN_DELETE \ + | IN_DELETE_SELF | IN_MOVE_SELF) + + +__BEGIN_DECLS + +/* Create and initialize inotify instance. */ +extern int inotify_init (void) __THROW; + +/* Create and initialize inotify instance. */ +extern int inotify_init1 (int __flags) __THROW; + +/* Add watch of object NAME to inotify instance FD. Notify about + events specified by MASK. */ +extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask) + __THROW; + +/* Remove the watch specified by WD from the inotify instance FD. */ +extern int inotify_rm_watch (int __fd, int __wd) __THROW; + +__END_DECLS + +#endif /* sys/inotify.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/io.h b/board/mentalnet/overlay/usr/include/sys/io.h new file mode 100644 index 0000000..d29f0fb --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/io.h @@ -0,0 +1,183 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_IO_H +#define _SYS_IO_H 1 + +#include + +__BEGIN_DECLS + +/* If TURN_ON is TRUE, request for permission to do direct i/o on the + port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O + permission off for that range. This call requires root privileges. + + Portability note: not all Linux platforms support this call. Most + platforms based on the PC I/O architecture probably will, however. + E.g., Linux/Alpha for Alpha PCs supports this. */ +extern int ioperm (unsigned long int __from, unsigned long int __num, + int __turn_on) __THROW; + +/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to + access any I/O port is granted. This call requires root + privileges. */ +extern int iopl (int __level) __THROW; + +#if defined __GNUC__ && __GNUC__ >= 2 + +static __inline unsigned char +inb (unsigned short int __port) +{ + unsigned char _v; + + __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (__port)); + return _v; +} + +static __inline unsigned char +inb_p (unsigned short int __port) +{ + unsigned char _v; + + __asm__ __volatile__ ("inb %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port)); + return _v; +} + +static __inline unsigned short int +inw (unsigned short int __port) +{ + unsigned short _v; + + __asm__ __volatile__ ("inw %w1,%0":"=a" (_v):"Nd" (__port)); + return _v; +} + +static __inline unsigned short int +inw_p (unsigned short int __port) +{ + unsigned short int _v; + + __asm__ __volatile__ ("inw %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port)); + return _v; +} + +static __inline unsigned int +inl (unsigned short int __port) +{ + unsigned int _v; + + __asm__ __volatile__ ("inl %w1,%0":"=a" (_v):"Nd" (__port)); + return _v; +} + +static __inline unsigned int +inl_p (unsigned short int __port) +{ + unsigned int _v; + __asm__ __volatile__ ("inl %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port)); + return _v; +} + +static __inline void +outb (unsigned char __value, unsigned short int __port) +{ + __asm__ __volatile__ ("outb %b0,%w1": :"a" (__value), "Nd" (__port)); +} + +static __inline void +outb_p (unsigned char __value, unsigned short int __port) +{ + __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80": :"a" (__value), + "Nd" (__port)); +} + +static __inline void +outw (unsigned short int __value, unsigned short int __port) +{ + __asm__ __volatile__ ("outw %w0,%w1": :"a" (__value), "Nd" (__port)); + +} + +static __inline void +outw_p (unsigned short int __value, unsigned short int __port) +{ + __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80": :"a" (__value), + "Nd" (__port)); +} + +static __inline void +outl (unsigned int __value, unsigned short int __port) +{ + __asm__ __volatile__ ("outl %0,%w1": :"a" (__value), "Nd" (__port)); +} + +static __inline void +outl_p (unsigned int __value, unsigned short int __port) +{ + __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80": :"a" (__value), + "Nd" (__port)); +} + +static __inline void +insb (unsigned short int __port, void *__addr, unsigned long int __count) +{ + __asm__ __volatile__ ("cld ; rep ; insb":"=D" (__addr), "=c" (__count) + :"d" (__port), "0" (__addr), "1" (__count)); +} + +static __inline void +insw (unsigned short int __port, void *__addr, unsigned long int __count) +{ + __asm__ __volatile__ ("cld ; rep ; insw":"=D" (__addr), "=c" (__count) + :"d" (__port), "0" (__addr), "1" (__count)); +} + +static __inline void +insl (unsigned short int __port, void *__addr, unsigned long int __count) +{ + __asm__ __volatile__ ("cld ; rep ; insl":"=D" (__addr), "=c" (__count) + :"d" (__port), "0" (__addr), "1" (__count)); +} + +static __inline void +outsb (unsigned short int __port, const void *__addr, + unsigned long int __count) +{ + __asm__ __volatile__ ("cld ; rep ; outsb":"=S" (__addr), "=c" (__count) + :"d" (__port), "0" (__addr), "1" (__count)); +} + +static __inline void +outsw (unsigned short int __port, const void *__addr, + unsigned long int __count) +{ + __asm__ __volatile__ ("cld ; rep ; outsw":"=S" (__addr), "=c" (__count) + :"d" (__port), "0" (__addr), "1" (__count)); +} + +static __inline void +outsl (unsigned short int __port, const void *__addr, + unsigned long int __count) +{ + __asm__ __volatile__ ("cld ; rep ; outsl":"=S" (__addr), "=c" (__count) + :"d" (__port), "0" (__addr), "1" (__count)); +} + +#endif /* GNU C */ + +__END_DECLS +#endif /* _SYS_IO_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/ioctl.h b/board/mentalnet/overlay/usr/include/sys/ioctl.h new file mode 100644 index 0000000..65c4cea --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/ioctl.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_IOCTL_H +#define _SYS_IOCTL_H 1 + +#include + +__BEGIN_DECLS + +/* Get the list of `ioctl' requests and related constants. */ +#include + +/* Define some types used by `ioctl' requests. */ +#include + +/* On a Unix system, the system probably defines some of + the symbols we define in (usually with the same + values). The code to generate has omitted these + symbols to avoid the conflict, but a Unix program expects + to define them, so we must include here. */ +#include + +/* Perform the I/O control operation specified by REQUEST on FD. + One argument may follow; its presence and type depend on REQUEST. + Return value depends on REQUEST. Usually -1 indicates error. */ +#ifndef __USE_TIME64_REDIRECTS +extern int ioctl (int __fd, unsigned long int __request, ...) __THROW; +#else +# ifdef __REDIRECT +extern int __REDIRECT_NTH (ioctl, (int __fd, unsigned long int __request, ...), + __ioctl_time64); +# else +extern int __ioctl_time64 (int __fd, unsigned long int __request, ...) __THROW; +# define ioctl __ioctl_time64 +# endif +#endif + +__END_DECLS + +#endif /* sys/ioctl.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/ipc.h b/board/mentalnet/overlay/usr/include/sys/ipc.h new file mode 100644 index 0000000..07f45f3 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/ipc.h @@ -0,0 +1,54 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_IPC_H +#define _SYS_IPC_H 1 + +#include + +/* Get system dependent definition of `struct ipc_perm' and more. */ +#include +#include + +#ifndef __uid_t_defined +typedef __uid_t uid_t; +# define __uid_t_defined +#endif + +#ifndef __gid_t_defined +typedef __gid_t gid_t; +# define __gid_t_defined +#endif + +#ifndef __mode_t_defined +typedef __mode_t mode_t; +# define __mode_t_defined +#endif + +#ifndef __key_t_defined +typedef __key_t key_t; +# define __key_t_defined +#endif + +__BEGIN_DECLS + +/* Generates key for System V style IPC. */ +extern key_t ftok (const char *__pathname, int __proj_id) __THROW; + +__END_DECLS + +#endif /* sys/ipc.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/kd.h b/board/mentalnet/overlay/usr/include/sys/kd.h new file mode 100644 index 0000000..675dcd7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/kd.h @@ -0,0 +1,34 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_KD_H +#define _SYS_KD_H 1 + +/* Make sure the header is not loaded. */ +#ifndef _LINUX_TYPES_H +# define _LINUX_TYPES_H 1 +# define __undef_LINUX_TYPES_H +#endif + +#include + +#ifdef __undef_LINUX_TYPES_H +# undef _LINUX_TYPES_H +# undef __undef_LINUX_TYPES_H +#endif + +#endif /* sys/kd.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/klog.h b/board/mentalnet/overlay/usr/include/sys/klog.h new file mode 100644 index 0000000..c3c62ed --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/klog.h @@ -0,0 +1,33 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_KLOG_H + +#define _SYS_KLOG_H 1 +#include + +__BEGIN_DECLS + +/* Control the kernel's logging facility. This corresponds exactly to + the kernel's syslog system call, but that name is easily confused + with the user-level syslog facility, which is something completely + different. */ +extern int klogctl (int __type, char *__bufp, int __len) __THROW; + +__END_DECLS + +#endif /* _SYS_KLOG_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/mman.h b/board/mentalnet/overlay/usr/include/sys/mman.h new file mode 100644 index 0000000..de5cb89 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/mman.h @@ -0,0 +1,156 @@ +/* Definitions for BSD-style memory management. + Copyright (C) 1994-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_MMAN_H +#define _SYS_MMAN_H 1 + +#include +#include +#define __need_size_t +#include + +#ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +#endif + +#ifndef __mode_t_defined +typedef __mode_t mode_t; +# define __mode_t_defined +#endif + +#include + +/* Return value of `mmap' in case of an error. */ +#define MAP_FAILED ((void *) -1) + +__BEGIN_DECLS +/* Map addresses starting near ADDR and extending for LEN bytes. from + OFFSET into the file FD describes according to PROT and FLAGS. If ADDR + is nonzero, it is the desired mapping address. If the MAP_FIXED bit is + set in FLAGS, the mapping will be at ADDR exactly (which must be + page-aligned); otherwise the system chooses a convenient nearby address. + The return value is the actual mapping address chosen or MAP_FAILED + for errors (in which case `errno' is set). A successful `mmap' call + deallocates any previous mapping for the affected region. */ + +#ifndef __USE_FILE_OFFSET64 +extern void *mmap (void *__addr, size_t __len, int __prot, + int __flags, int __fd, __off_t __offset) __THROW; +#else +# ifdef __REDIRECT_NTH +extern void * __REDIRECT_NTH (mmap, + (void *__addr, size_t __len, int __prot, + int __flags, int __fd, __off64_t __offset), + mmap64); +# else +# define mmap mmap64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern void *mmap64 (void *__addr, size_t __len, int __prot, + int __flags, int __fd, __off64_t __offset) __THROW; +#endif + +/* Deallocate any mapping for the region starting at ADDR and extending LEN + bytes. Returns 0 if successful, -1 for errors (and sets errno). */ +extern int munmap (void *__addr, size_t __len) __THROW; + +/* Change the memory protection of the region starting at ADDR and + extending LEN bytes to PROT. Returns 0 if successful, -1 for errors + (and sets errno). */ +extern int mprotect (void *__addr, size_t __len, int __prot) __THROW; + +/* Synchronize the region starting at ADDR and extending LEN bytes with the + file it maps. Filesystem operations on a file being mapped are + unpredictable before this is done. Flags are from the MS_* set. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int msync (void *__addr, size_t __len, int __flags); + +#ifdef __USE_MISC +/* Advise the system about particular usage patterns the program follows + for the region starting at ADDR and extending LEN bytes. */ +extern int madvise (void *__addr, size_t __len, int __advice) __THROW; +#endif +#ifdef __USE_XOPEN2K +/* This is the POSIX name for this function. */ +extern int posix_madvise (void *__addr, size_t __len, int __advice) __THROW; +#endif + +/* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to + be memory resident. */ +extern int mlock (const void *__addr, size_t __len) __THROW + __attr_access_none (1); + +/* Unlock whole pages previously mapped by the range [ADDR,ADDR+LEN). */ +extern int munlock (const void *__addr, size_t __len) __THROW + __attr_access_none (1); + +/* Cause all currently mapped pages of the process to be memory resident + until unlocked by a call to the `munlockall', until the process exits, + or until the process calls `execve'. */ +extern int mlockall (int __flags) __THROW; + +/* All currently mapped pages of the process' address space become + unlocked. */ +extern int munlockall (void) __THROW; + +#ifdef __USE_MISC +/* mincore returns the memory residency status of the pages in the + current process's address space specified by [start, start + len). + The status is returned in a vector of bytes. The least significant + bit of each byte is 1 if the referenced page is in memory, otherwise + it is zero. */ +extern int mincore (void *__start, size_t __len, unsigned char *__vec) + __THROW; +#endif + +#ifdef __USE_GNU +/* Remap pages mapped by the range [ADDR,ADDR+OLD_LEN) to new length + NEW_LEN. If MREMAP_MAYMOVE is set in FLAGS the returned address + may differ from ADDR. If MREMAP_FIXED is set in FLAGS the function + takes another parameter which is a fixed address at which the block + resides after a successful call. */ +extern void *mremap (void *__addr, size_t __old_len, size_t __new_len, + int __flags, ...) __THROW; + +/* Remap arbitrary pages of a shared backing store within an existing + VMA. */ +extern int remap_file_pages (void *__start, size_t __size, int __prot, + size_t __pgoff, int __flags) __THROW; +#endif + + +/* Open shared memory segment. */ +extern int shm_open (const char *__name, int __oflag, mode_t __mode); + +/* Remove shared memory segment. */ +extern int shm_unlink (const char *__name); + +/* System-specific extensions. */ +#include + +__END_DECLS + +#endif /* sys/mman.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/mount.h b/board/mentalnet/overlay/usr/include/sys/mount.h new file mode 100644 index 0000000..bd6a089 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/mount.h @@ -0,0 +1,331 @@ +/* Header file for mounting/unmount Linux filesystems. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* This is taken from /usr/include/linux/fs.h. */ + +#ifndef _SYS_MOUNT_H +#define _SYS_MOUNT_H 1 + +#include +#include +#include +#include + +#ifdef __has_include +# if __has_include ("linux/mount.h") +# include "linux/mount.h" +# endif +#endif + + +#define BLOCK_SIZE_BITS 10 +#define BLOCK_SIZE (1< +# define O_CLOEXEC __O_CLOEXEC +#endif +#ifndef OPEN_TREE_CLOEXEC +# define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */ +#endif + +__BEGIN_DECLS + +/* Mount a filesystem. */ +extern int mount (const char *__special_file, const char *__dir, + const char *__fstype, unsigned long int __rwflag, + const void *__data) __THROW; + +/* Unmount a filesystem. */ +extern int umount (const char *__special_file) __THROW; + +/* Unmount a filesystem. Force unmounting if FLAGS is set to MNT_FORCE. */ +extern int umount2 (const char *__special_file, int __flags) __THROW; + +/* Open the filesystem referenced by FS_NAME so it can be configured for + mouting. */ +extern int fsopen (const char *__fs_name, unsigned int __flags) __THROW; + +/* Create a mount representation for the FD created by fsopen using + FLAGS with ATTR_FLAGS describing how the mount is to be performed. */ +extern int fsmount (int __fd, unsigned int __flags, + unsigned int __ms_flags) __THROW; + +/* Add the mounted FROM_DFD referenced by FROM_PATHNAME filesystem returned + by fsmount in the hierarchy in the place TO_DFD reference by TO_PATHNAME + using FLAGS. */ +extern int move_mount (int __from_dfd, const char *__from_pathname, + int __to_dfd, const char *__to_pathname, + unsigned int flags) __THROW; + +/* Set parameters and trigger CMD action on the FD context. KEY, VALUE, + and AUX are used depending ng of the CMD. */ +extern int fsconfig (int __fd, unsigned int __cmd, const char *__key, + const void *__value, int __aux) __THROW; + +/* Equivalent of fopen for an existing mount point. */ +extern int fspick (int __dfd, const char *__path, unsigned int __flags) + __THROW; + +/* Open the mount point FILENAME in directory DFD using FLAGS. */ +extern int open_tree (int __dfd, const char *__filename, unsigned int __flags) + __THROW; + +/* Change the mount properties of the mount or an entire mount tree. If + PATH is a relative pathname, then it is interpreted relative to the + directory referred to by the file descriptor dirfd. Otherwise if DFD is + the special value AT_FDCWD then PATH is interpreted relative to the current + working directory of the calling process. */ +extern int mount_setattr (int __dfd, const char *__path, unsigned int __flags, + struct mount_attr *__uattr, size_t __usize) + __THROW; + +__END_DECLS + +#endif /* _SYS_MOUNT_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/msg.h b/board/mentalnet/overlay/usr/include/sys/msg.h new file mode 100644 index 0000000..de72396 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/msg.h @@ -0,0 +1,92 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_MSG_H +#define _SYS_MSG_H + +#include + +#define __need_size_t +#include + +/* Get common definition of System V style IPC. */ +#include + +/* Get system dependent definition of `struct msqid_ds' and more. */ +#include + +/* Define types required by the standard. */ +#include + +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +#ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +#endif + +/* The following System V style IPC functions implement a message queue + system. The definition is found in XPG2. */ + +#ifdef __USE_GNU +/* Template for struct to be used as argument for `msgsnd' and `msgrcv'. */ +struct msgbuf + { + __syscall_slong_t mtype; /* type of received/sent message */ + char mtext[1]; /* text of the message */ + }; +#endif + + +__BEGIN_DECLS + +/* Message queue control operation. */ +#ifndef __USE_TIME64_REDIRECTS +extern int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf) __THROW; +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (msgctl, + (int __msqid, int __cmd, struct msqid_ds *__buf), + __msgctl64); +# else +# define msgctl __msgctl64 +# endif +#endif + +/* Get messages queue. */ +extern int msgget (key_t __key, int __msgflg) __THROW; + +/* Receive message from message queue. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t msgrcv (int __msqid, void *__msgp, size_t __msgsz, + long int __msgtyp, int __msgflg); + +/* Send message to message queue. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int msgsnd (int __msqid, const void *__msgp, size_t __msgsz, + int __msgflg); + +__END_DECLS + +#endif /* sys/msg.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/mtio.h b/board/mentalnet/overlay/usr/include/sys/mtio.h new file mode 100644 index 0000000..fbcd288 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/mtio.h @@ -0,0 +1,275 @@ +/* Structures and definitions for magnetic tape I/O control commands. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + + +#ifndef _SYS_MTIO_H +#define _SYS_MTIO_H 1 + +/* Get necessary definitions from system and kernel headers. */ +#include +#include + + +/* Structure for MTIOCTOP - magnetic tape operation command. */ +struct mtop + { + short int mt_op; /* Operations defined below. */ + int mt_count; /* How many of them. */ + }; +#define _IOT_mtop /* Hurd ioctl type field. */ \ + _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0) + +/* Magnetic Tape operations [Not all operations supported by all drivers]. */ +#define MTRESET 0 /* +reset drive in case of problems. */ +#define MTFSF 1 /* Forward space over FileMark, + * position at first record of next file. */ +#define MTBSF 2 /* Backward space FileMark (position before FM). */ +#define MTFSR 3 /* Forward space record. */ +#define MTBSR 4 /* Backward space record. */ +#define MTWEOF 5 /* Write an end-of-file record (mark). */ +#define MTREW 6 /* Rewind. */ +#define MTOFFL 7 /* Rewind and put the drive offline (eject?). */ +#define MTNOP 8 /* No op, set status only (read with MTIOCGET). */ +#define MTRETEN 9 /* Retension tape. */ +#define MTBSFM 10 /* +backward space FileMark, position at FM. */ +#define MTFSFM 11 /* +forward space FileMark, position at FM. */ +#define MTEOM 12 /* Goto end of recorded media (for appending files). + MTEOM positions after the last FM, ready for + appending another file. */ +#define MTERASE 13 /* Erase tape -- be careful! */ + +#define MTRAS1 14 /* Run self test 1 (nondestructive). */ +#define MTRAS2 15 /* Run self test 2 (destructive). */ +#define MTRAS3 16 /* Reserved for self test 3. */ + +#define MTSETBLK 20 /* Set block length (SCSI). */ +#define MTSETDENSITY 21 /* Set tape density (SCSI). */ +#define MTSEEK 22 /* Seek to block (Tandberg, etc.). */ +#define MTTELL 23 /* Tell block (Tandberg, etc.). */ +#define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2. + Ordinary buffered operation with code 1. */ +#define MTFSS 25 /* Space forward over setmarks. */ +#define MTBSS 26 /* Space backward over setmarks. */ +#define MTWSM 27 /* Write setmarks. */ + +#define MTLOCK 28 /* Lock the drive door. */ +#define MTUNLOCK 29 /* Unlock the drive door. */ +#define MTLOAD 30 /* Execute the SCSI load command. */ +#define MTUNLOAD 31 /* Execute the SCSI unload command. */ +#define MTCOMPRESSION 32/* Control compression with SCSI mode page 15. */ +#define MTSETPART 33 /* Change the active tape partition. */ +#define MTMKPART 34 /* Format the tape with one or two partitions. */ + +/* structure for MTIOCGET - mag tape get status command */ + +struct mtget + { + long int mt_type; /* Type of magtape device. */ + long int mt_resid; /* Residual count: (not sure) + number of bytes ignored, or + number of files not skipped, or + number of records not skipped. */ + /* The following registers are device dependent. */ + long int mt_dsreg; /* Status register. */ + long int mt_gstat; /* Generic (device independent) status. */ + long int mt_erreg; /* Error register. */ + /* The next two fields are not always used. */ + __daddr_t mt_fileno; /* Number of current file on tape. */ + __daddr_t mt_blkno; /* Current block number. */ + }; +#define _IOT_mtget /* Hurd ioctl type field. */ \ + _IOT (_IOTS (long), 7, 0, 0, 0, 0) + + +/* Constants for mt_type. Not all of these are supported, and + these are not all of the ones that are supported. */ +#define MT_ISUNKNOWN 0x01 +#define MT_ISQIC02 0x02 /* Generic QIC-02 tape streamer. */ +#define MT_ISWT5150 0x03 /* Wangtek 5150EQ, QIC-150, QIC-02. */ +#define MT_ISARCHIVE_5945L2 0x04 /* Archive 5945L-2, QIC-24, QIC-02?. */ +#define MT_ISCMSJ500 0x05 /* CMS Jumbo 500 (QIC-02?). */ +#define MT_ISTDC3610 0x06 /* Tandberg 6310, QIC-24. */ +#define MT_ISARCHIVE_VP60I 0x07 /* Archive VP60i, QIC-02. */ +#define MT_ISARCHIVE_2150L 0x08 /* Archive Viper 2150L. */ +#define MT_ISARCHIVE_2060L 0x09 /* Archive Viper 2060L. */ +#define MT_ISARCHIVESC499 0x0A /* Archive SC-499 QIC-36 controller. */ +#define MT_ISQIC02_ALL_FEATURES 0x0F /* Generic QIC-02 with all features. */ +#define MT_ISWT5099EEN24 0x11 /* Wangtek 5099-een24, 60MB, QIC-24. */ +#define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive, + Teac DC-1 card (Wangtek type). */ +#define MT_ISEVEREX_FT40A 0x32 /* Everex FT40A (QIC-40). */ +#define MT_ISDDS1 0x51 /* DDS device without partitions. */ +#define MT_ISDDS2 0x52 /* DDS device with partitions. */ +#define MT_ISSCSI1 0x71 /* Generic ANSI SCSI-1 tape unit. */ +#define MT_ISSCSI2 0x72 /* Generic ANSI SCSI-2 tape unit. */ + +/* QIC-40/80/3010/3020 ftape supported drives. + 20bit vendor ID + 0x800000 (see vendors.h in ftape distribution). */ +#define MT_ISFTAPE_UNKNOWN 0x800000 /* obsolete */ +#define MT_ISFTAPE_FLAG 0x800000 + +struct mt_tape_info + { + long int t_type; /* Device type id (mt_type). */ + char *t_name; /* Descriptive name. */ + }; + +#define MT_TAPE_INFO \ + { \ + {MT_ISUNKNOWN, "Unknown type of tape device"}, \ + {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \ + {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \ + {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \ + {MT_ISCMSJ500, "CMS Jumbo 500"}, \ + {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \ + {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \ + {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \ + {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \ + {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \ + {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \ + {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \ + {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \ + {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \ + {MT_ISSCSI1, "Generic SCSI-1 tape"}, \ + {MT_ISSCSI2, "Generic SCSI-2 tape"}, \ + {0, NULL} \ + } + + +/* Structure for MTIOCPOS - mag tape get position command. */ + +struct mtpos + { + long int mt_blkno; /* Current block number. */ + }; +#define _IOT_mtpos /* Hurd ioctl type field. */ \ + _IOT_SIMPLE (long) + + +/* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended + as an interim solution for QIC-02 until DDI is fully implemented. */ +struct mtconfiginfo + { + long int mt_type; /* Drive type. */ + long int ifc_type; /* Interface card type. */ + unsigned short int irqnr; /* IRQ number to use. */ + unsigned short int dmanr; /* DMA channel to use. */ + unsigned short int port; /* IO port base address. */ + + unsigned long int debug; /* Debugging flags. */ + + unsigned have_dens:1; + unsigned have_bsf:1; + unsigned have_fsr:1; + unsigned have_bsr:1; + unsigned have_eod:1; + unsigned have_seek:1; + unsigned have_tell:1; + unsigned have_ras1:1; + unsigned have_ras2:1; + unsigned have_ras3:1; + unsigned have_qfa:1; + + unsigned pad1:5; + char reserved[10]; + }; +#define _IOT_mtconfiginfo /* Hurd ioctl type field. */ \ + _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) /* XXX wrong */ + + +/* Magnetic tape I/O control commands. */ +#define MTIOCTOP _IOW('m', 1, struct mtop) /* Do a mag tape op. */ +#define MTIOCGET _IOR('m', 2, struct mtget) /* Get tape status. */ +#define MTIOCPOS _IOR('m', 3, struct mtpos) /* Get tape position.*/ + +/* The next two are used by the QIC-02 driver for runtime reconfiguration. + See tpqic02.h for struct mtconfiginfo. */ +#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/ +#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/ + +/* Generic Mag Tape (device independent) status macros for examining + mt_gstat -- HP-UX compatible. + There is room for more generic status bits here, but I don't + know which of them are reserved. At least three or so should + be added to make this really useful. */ +#define GMT_EOF(x) ((x) & 0x80000000) +#define GMT_BOT(x) ((x) & 0x40000000) +#define GMT_EOT(x) ((x) & 0x20000000) +#define GMT_SM(x) ((x) & 0x10000000) /* DDS setmark */ +#define GMT_EOD(x) ((x) & 0x08000000) /* DDS EOD */ +#define GMT_WR_PROT(x) ((x) & 0x04000000) +/* #define GMT_ ? ((x) & 0x02000000) */ +#define GMT_ONLINE(x) ((x) & 0x01000000) +#define GMT_D_6250(x) ((x) & 0x00800000) +#define GMT_D_1600(x) ((x) & 0x00400000) +#define GMT_D_800(x) ((x) & 0x00200000) +/* #define GMT_ ? ((x) & 0x00100000) */ +/* #define GMT_ ? ((x) & 0x00080000) */ +#define GMT_DR_OPEN(x) ((x) & 0x00040000) /* Door open (no tape). */ +/* #define GMT_ ? ((x) & 0x00020000) */ +#define GMT_IM_REP_EN(x) ((x) & 0x00010000) /* Immediate report mode.*/ +/* 16 generic status bits unused. */ + + +/* SCSI-tape specific definitions. Bitfield shifts in the status */ +#define MT_ST_BLKSIZE_SHIFT 0 +#define MT_ST_BLKSIZE_MASK 0xffffff +#define MT_ST_DENSITY_SHIFT 24 +#define MT_ST_DENSITY_MASK 0xff000000 + +#define MT_ST_SOFTERR_SHIFT 0 +#define MT_ST_SOFTERR_MASK 0xffff + +/* Bitfields for the MTSETDRVBUFFER ioctl. */ +#define MT_ST_OPTIONS 0xf0000000 +#define MT_ST_BOOLEANS 0x10000000 +#define MT_ST_SETBOOLEANS 0x30000000 +#define MT_ST_CLEARBOOLEANS 0x40000000 +#define MT_ST_WRITE_THRESHOLD 0x20000000 +#define MT_ST_DEF_BLKSIZE 0x50000000 +#define MT_ST_DEF_OPTIONS 0x60000000 + +#define MT_ST_BUFFER_WRITES 0x1 +#define MT_ST_ASYNC_WRITES 0x2 +#define MT_ST_READ_AHEAD 0x4 +#define MT_ST_DEBUGGING 0x8 +#define MT_ST_TWO_FM 0x10 +#define MT_ST_FAST_MTEOM 0x20 +#define MT_ST_AUTO_LOCK 0x40 +#define MT_ST_DEF_WRITES 0x80 +#define MT_ST_CAN_BSR 0x100 +#define MT_ST_NO_BLKLIMS 0x200 +#define MT_ST_CAN_PARTITIONS 0x400 +#define MT_ST_SCSI2LOGICAL 0x800 + +/* The mode parameters to be controlled. Parameter chosen with bits 20-28. */ +#define MT_ST_CLEAR_DEFAULT 0xfffff +#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000) +#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000) +#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000) + +/* The offset for the arguments for the special HP changer load command. */ +#define MT_ST_HPLOADER_OFFSET 10000 + + +/* Specify default tape device. */ +#ifndef DEFTAPE +# define DEFTAPE "/dev/tape" +#endif + +#endif /* mtio.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/param.h b/board/mentalnet/overlay/usr/include/sys/param.h new file mode 100644 index 0000000..5e7402b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/param.h @@ -0,0 +1,106 @@ +/* Compatibility header for old-style Unix parameters and limits. + Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PARAM_H +#define _SYS_PARAM_H 1 + +#define __need_NULL +#include + +#include +#include +#include /* Define BYTE_ORDER et al. */ +#include /* Define NSIG. */ + +/* This file defines some things in system-specific ways. */ +#include + + +/* BSD names for some values. */ + +#define NBBY CHAR_BIT + +#if !defined NGROUPS && defined NGROUPS_MAX +# define NGROUPS NGROUPS_MAX +#endif +#if !defined MAXSYMLINKS && defined SYMLOOP_MAX +# define MAXSYMLINKS SYMLOOP_MAX +#endif +#if !defined CANBSIZ && defined MAX_CANON +# define CANBSIZ MAX_CANON +#endif +#if !defined MAXPATHLEN && defined PATH_MAX +# define MAXPATHLEN PATH_MAX +#endif +#if !defined NOFILE && defined OPEN_MAX +# define NOFILE OPEN_MAX +#endif +#if !defined MAXHOSTNAMELEN && defined HOST_NAME_MAX +# define MAXHOSTNAMELEN HOST_NAME_MAX +#endif +#ifndef NCARGS +# ifdef ARG_MAX +# define NCARGS ARG_MAX +# else +/* ARG_MAX is unlimited, but we define NCARGS for BSD programs that want to + compare against some fixed limit. */ +# define NCARGS INT_MAX +# endif +#endif + + +/* Magical constants. */ +#ifndef NOGROUP +# define NOGROUP 65535 /* Marker for empty group set member. */ +#endif +#ifndef NODEV +# define NODEV ((dev_t) -1) /* Non-existent device. */ +#endif + + +/* Unit of `st_blocks'. */ +#ifndef DEV_BSIZE +# define DEV_BSIZE 512 +#endif + + +/* Bit map related macros. */ +#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY)) +#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY))) +#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY))) +#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) + +/* Macros for counting and rounding. */ +#ifndef howmany +# define howmany(x, y) (((x) + ((y) - 1)) / (y)) +#endif +#ifdef __GNUC__ +# define roundup(x, y) (__builtin_constant_p (y) && powerof2 (y) \ + ? (((x) + (y) - 1) & ~((y) - 1)) \ + : ((((x) + ((y) - 1)) / (y)) * (y))) +#else +# define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) +#endif +#define powerof2(x) ((((x) - 1) & (x)) == 0) + +/* Macros for min/max. */ +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + + +#endif /* sys/param.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/pci.h b/board/mentalnet/overlay/usr/include/sys/pci.h new file mode 100644 index 0000000..400338c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/pci.h @@ -0,0 +1,24 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PCI_H +#define _SYS_PCI_H 1 + +/* We use the constants from the kernel. */ +#include + +#endif /* sys/pci.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/perm.h b/board/mentalnet/overlay/usr/include/sys/perm.h new file mode 100644 index 0000000..64c1748 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/perm.h @@ -0,0 +1,35 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PERM_H + +#define _SYS_PERM_H 1 +#include + +__BEGIN_DECLS + +/* Set port input/output permissions. */ +extern int ioperm (unsigned long int __from, unsigned long int __num, + int __turn_on) __THROW; + + +/* Change I/O privilege level. */ +extern int iopl (int __level) __THROW; + +__END_DECLS + +#endif /* _SYS_PERM_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/personality.h b/board/mentalnet/overlay/usr/include/sys/personality.h new file mode 100644 index 0000000..3f8971d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/personality.h @@ -0,0 +1,80 @@ +/* Copyright (C) 2002-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* Taken verbatim from Linux 2.6 (include/linux/personality.h). */ + +#ifndef _SYS_PERSONALITY_H +#define _SYS_PERSONALITY_H 1 + +#include + +/* Flags for bug emulation. + These occupy the top three bytes. */ +enum + { + UNAME26 = 0x0020000, + ADDR_NO_RANDOMIZE = 0x0040000, + FDPIC_FUNCPTRS = 0x0080000, + MMAP_PAGE_ZERO = 0x0100000, + ADDR_COMPAT_LAYOUT = 0x0200000, + READ_IMPLIES_EXEC = 0x0400000, + ADDR_LIMIT_32BIT = 0x0800000, + SHORT_INODE = 0x1000000, + WHOLE_SECONDS = 0x2000000, + STICKY_TIMEOUTS = 0x4000000, + ADDR_LIMIT_3GB = 0x8000000 + }; + +/* Personality types. + + These go in the low byte. Avoid using the top bit, it will + conflict with error returns. */ +enum + { + PER_LINUX = 0x0000, + PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT, + PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS, + PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, + PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE, + PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE, + PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS, + PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE, + PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS, + PER_BSD = 0x0006, + PER_SUNOS = 0x0006 | STICKY_TIMEOUTS, + PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE, + PER_LINUX32 = 0x0008, + PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB, + PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS, /* IRIX5 32-bit */ + PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS, /* IRIX6 new 32-bit */ + PER_IRIX64 = 0x000b | STICKY_TIMEOUTS, /* IRIX6 64-bit */ + PER_RISCOS = 0x000c, + PER_SOLARIS = 0x000d | STICKY_TIMEOUTS, + PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, + PER_OSF4 = 0x000f, + PER_HPUX = 0x0010, + PER_MASK = 0x00ff, + }; + +__BEGIN_DECLS + +/* Set different ABIs (personalities). */ +extern int personality (unsigned long int __persona) __THROW; + +__END_DECLS + +#endif /* sys/personality.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/pidfd.h b/board/mentalnet/overlay/usr/include/sys/pidfd.h new file mode 100644 index 0000000..e6fc024 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/pidfd.h @@ -0,0 +1,66 @@ +/* Wrapper for file descriptors that refers to a process functions. + Copyright (C) 2022-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _PIDFD_H + +#include +#include +#include + +#define PIDFD_NONBLOCK O_NONBLOCK +#define PIDFD_THREAD O_EXCL + +#define PIDFD_SIGNAL_THREAD (1UL << 0) +#define PIDFD_SIGNAL_THREAD_GROUP (1UL << 1) +#define PIDFD_SIGNAL_PROCESS_GROUP (1UL << 2) + +#define PIDFS_IOCTL_MAGIC 0xFF + +#define PIDFD_GET_CGROUP_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 1) +#define PIDFD_GET_IPC_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 2) +#define PIDFD_GET_MNT_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 3) +#define PIDFD_GET_NET_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 4) +#define PIDFD_GET_PID_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 5) +#define PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 6) +#define PIDFD_GET_TIME_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 7) +#define PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 8) +#define PIDFD_GET_USER_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 9) +#define PIDFD_GET_UTS_NAMESPACE _IO(PIDFS_IOCTL_MAGIC, 10) + +/* Returns a file descriptor that refers to the process PID. The + close-on-exec is set on the file descriptor. */ +extern int pidfd_open (__pid_t __pid, unsigned int __flags) __THROW; + +/* Duplicates an existing file descriptor TARGETFD in the process referred + by the PIDFD file descriptor PIDFD. + + The FLAGS argument is reserved for future use, it must be specified + as 0. */ +extern int pidfd_getfd (int __pidfd, int __targetfd, + unsigned int __flags) __THROW; + +/* Sends the signal SIG to the target process referred by the PIDFD. If + INFO points to a siginfo_t buffer, it will be populated. */ +extern int pidfd_send_signal (int __pidfd, int __sig, siginfo_t *__info, + unsigned int __flags) __THROW; + +/* Query the process ID (PID) from process descriptor FD. Return the PID + or -1 in case of an error. */ +extern pid_t pidfd_getpid (int __fd) __THROW; + +#endif /* _PIDFD_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/platform/x86.h b/board/mentalnet/overlay/usr/include/sys/platform/x86.h new file mode 100644 index 0000000..7f4aeac --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/platform/x86.h @@ -0,0 +1,69 @@ +/* Data structure for x86 CPU features. + This file is part of the GNU C Library. + Copyright (C) 2008-2025 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PLATFORM_X86_H +#define _SYS_PLATFORM_X86_H + +#include +#include +#include +#include + +__BEGIN_DECLS + +/* Get a pointer to the CPU feature structure. */ +extern const struct cpuid_feature *__x86_get_cpuid_feature_leaf (unsigned int) + __attribute__ ((pure)); + +static __inline__ bool +x86_cpu_present (unsigned int __index) +{ + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf + (__index / (8 * sizeof (unsigned int) * 4)); + unsigned int __reg + = __index & (8 * sizeof (unsigned int) * 4 - 1); + unsigned int __bit = __reg & (8 * sizeof (unsigned int) - 1); + __reg /= 8 * sizeof (unsigned int); + + return __ptr->cpuid_array[__reg] & (1 << __bit); +} + +static __inline__ bool +x86_cpu_active (unsigned int __index) +{ + if (__index == x86_cpu_IBT || __index == x86_cpu_SHSTK) + return x86_cpu_cet_active (__index); + + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf + (__index / (8 * sizeof (unsigned int) * 4)); + unsigned int __reg + = __index & (8 * sizeof (unsigned int) * 4 - 1); + unsigned int __bit = __reg & (8 * sizeof (unsigned int) - 1); + __reg /= 8 * sizeof (unsigned int); + + return __ptr->active_array[__reg] & (1 << __bit); +} + +/* CPU_FEATURE_PRESENT evaluates to true if CPU supports the feature. */ +#define CPU_FEATURE_PRESENT(name) x86_cpu_present (x86_cpu_##name) +/* CPU_FEATURE_ACTIVE evaluates to true if the feature is active. */ +#define CPU_FEATURE_ACTIVE(name) x86_cpu_active (x86_cpu_##name) + +__END_DECLS + +#endif /* _SYS_PLATFORM_X86_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/poll.h b/board/mentalnet/overlay/usr/include/sys/poll.h new file mode 100644 index 0000000..446ac04 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/poll.h @@ -0,0 +1,90 @@ +/* Compatibility definitions for System V `poll' interface. + Copyright (C) 1994-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_POLL_H +#define _SYS_POLL_H 1 + +#include + +/* Get the platform dependent bits of `poll'. */ +#include +#ifdef __USE_GNU +# include +# include +#endif + + +/* Type used for the number of file descriptors. */ +typedef unsigned long int nfds_t; + +/* Data structure describing a polling request. */ +struct pollfd + { + int fd; /* File descriptor to poll. */ + short int events; /* Types of events poller cares about. */ + short int revents; /* Types of events that actually occurred. */ + }; + + +__BEGIN_DECLS + +/* Poll the file descriptors described by the NFDS structures starting at + FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for + an event to occur; if TIMEOUT is -1, block until an event occurs. + Returns the number of file descriptors with events, zero if timed out, + or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout) + __fortified_attr_access (__write_only__, 1, 2); + +#ifdef __USE_GNU +/* Like poll, but before waiting the threads signal mask is replaced + with that specified in the fourth parameter. For better usability, + the timeout value is specified using a TIMESPEC object. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int ppoll (struct pollfd *__fds, nfds_t __nfds, + const struct timespec *__timeout, + const __sigset_t *__ss) + __fortified_attr_access (__write_only__, 1, 2); + +# ifdef __USE_TIME64_REDIRECTS +# ifdef __REDIRECT +extern int __REDIRECT (ppoll, (struct pollfd *__fds, nfds_t __nfds, + const struct timespec *__timeout, + const __sigset_t *__ss), + __ppoll64) + __fortified_attr_access (__write_only__, 1, 2); +# else +# define ppoll __ppoll64 +# endif +# endif +#endif + +__END_DECLS + + +/* Define some inlines helping to catch common problems. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#endif + +#endif /* sys/poll.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/prctl.h b/board/mentalnet/overlay/usr/include/sys/prctl.h new file mode 100644 index 0000000..d2cdf15 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/prctl.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PRCTL_H +#define _SYS_PRCTL_H 1 + +#include +#include /* The magic values come from here */ + +/* Recent extensions to linux which may post-date the kernel headers + we're picking up... */ + +/* Memory tagging control operations (for AArch64). */ +#ifndef PR_MTE_TCF_SHIFT +# define PR_MTE_TCF_SHIFT 1 +# define PR_MTE_TCF_NONE (0UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TCF_ASYNC (2UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TCF_MASK (3UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TAG_SHIFT 3 +# define PR_MTE_TAG_MASK (0xffffUL << PR_MTE_TAG_SHIFT) +#endif + +__BEGIN_DECLS + +/* Control process execution. */ +#ifndef __USE_TIME64_REDIRECTS +extern int prctl (int __option, ...) __THROW; +#else +# ifdef __REDIRECT +extern int __REDIRECT_NTH (prctl, (int __option, ...), __prctl_time64); +# else +extern int __prctl_time64 (int __option,d ...) __THROW; +# define ioctl __prctl_time64 +# endif +#endif + + +__END_DECLS + +#endif /* sys/prctl.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/procfs.h b/board/mentalnet/overlay/usr/include/sys/procfs.h new file mode 100644 index 0000000..5de91f6 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/procfs.h @@ -0,0 +1,126 @@ +/* Definitions for core files and libthread_db. Generic Linux version. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PROCFS_H +#define _SYS_PROCFS_H 1 + +/* This is somewhat modelled after the file of the same name on SVR4 + systems. It provides a definition of the core file format for ELF + used on Linux. It doesn't have anything to do with the /proc file + system, even though Linux has one. + + Anyway, the whole purpose of this file is for GDB and GDB only. + Don't read too much into it. Don't use it for anything other than + GDB unless you know what you are doing. */ + +#include +#include +#include +#include + +/* bits/procfs.h, provided by each architecture, must define + elf_gregset_t, elf_fpregset_t and any other architecture-specific + types needed. */ +#include + +/* bits/procfs-id.h must define __pr_uid_t and __pr_gid_t, the types + of pr_uid and pr_gid. */ +#include + +__BEGIN_DECLS + +/* Signal info. */ +struct elf_siginfo + { + int si_signo; /* Signal number. */ + int si_code; /* Extra code. */ + int si_errno; /* Errno. */ + }; + +/* Definitions to generate Intel SVR4-like core files. These mostly + have the same names as the SVR4 types with "elf_" tacked on the + front to prevent clashes with Linux definitions, and the typedef + forms have been avoided. This is mostly like the SVR4 structure, + but more Linuxy, with things that Linux does not support and which + GDB doesn't really use excluded. */ + +struct elf_prstatus + { + struct elf_siginfo pr_info; /* Info associated with signal. */ + short int pr_cursig; /* Current signal. */ + unsigned long int pr_sigpend; /* Set of pending signals. */ + unsigned long int pr_sighold; /* Set of held signals. */ + __pid_t pr_pid; + __pid_t pr_ppid; + __pid_t pr_pgrp; + __pid_t pr_sid; + struct timeval pr_utime; /* User time. */ + struct timeval pr_stime; /* System time. */ + struct timeval pr_cutime; /* Cumulative user time. */ + struct timeval pr_cstime; /* Cumulative system time. */ + elf_gregset_t pr_reg; /* GP registers. */ + int pr_fpvalid; /* True if math copro being used. */ + }; + + +#define ELF_PRARGSZ (80) /* Number of chars for args. */ + +struct elf_prpsinfo + { + char pr_state; /* Numeric process state. */ + char pr_sname; /* Char for pr_state. */ + char pr_zomb; /* Zombie. */ + char pr_nice; /* Nice val. */ + unsigned long int pr_flag; /* Flags. */ + __pr_uid_t pr_uid; + __pr_gid_t pr_gid; + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + /* Lots missing */ + char pr_fname[16]; /* Filename of executable. */ + char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ + }; + +/* The rest of this file provides the types for emulation of the + Solaris interfaces that should be implemented by + users of libthread_db. */ + +/* Addresses. */ +typedef void *psaddr_t; + +#include + +/* Register sets. Linux has different names. */ +typedef __prgregset_t prgregset_t; +typedef __prfpregset_t prfpregset_t; + +/* We don't have any differences between processes and threads, + therefore have only one PID type. */ +typedef __pid_t lwpid_t; + +/* Process status and info. In the end we do provide typedefs for them. */ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + +__END_DECLS + +/* On some architectures, provide other-ABI variants of the above + types. */ +#include + +#endif /* sys/procfs.h. */ diff --git a/board/mentalnet/overlay/usr/include/sys/profil.h b/board/mentalnet/overlay/usr/include/sys/profil.h new file mode 100644 index 0000000..ee9de5d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/profil.h @@ -0,0 +1,60 @@ +/* Copyright (C) 2001-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _PROFIL_H +#define _PROFIL_H 1 + +#include + +#include +#include + +/* This interface is intended to follow the sprofil() system calls as + described by the sprofil(2) man page of Irix v6.5, except that: + + - there is no a priori limit on number of text sections + - pr_scale is declared as unsigned long (instead of "unsigned int") + - pr_size is declared as size_t (instead of "unsigned int") + - pr_off is declared as void * (instead of "__psunsigned_t") + - the overflow bin (pr_base==0, pr_scale==2) can appear anywhere + in the profp array + - PROF_FAST has no effect */ + +struct prof + { + void *pr_base; /* buffer base */ + size_t pr_size; /* buffer size */ + size_t pr_off; /* pc offset */ + unsigned long int pr_scale; /* pc scaling (fixed-point number) */ + }; + +enum + { + PROF_USHORT = 0, /* use 16-bit counters (default) */ + PROF_UINT = 1 << 0, /* use 32-bit counters */ + PROF_FAST = 1 << 1 /* profile faster than usual */ + }; + + +__BEGIN_DECLS + +extern int sprofil (struct prof *__profp, int __profcnt, + struct timeval *__tvp, unsigned int __flags) __THROW; + +__END_DECLS + +#endif /* profil.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/psx_syscall.h b/board/mentalnet/overlay/usr/include/sys/psx_syscall.h new file mode 100644 index 0000000..6104717 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/psx_syscall.h @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2019,24 Andrew G. Morgan + * + * This header, and the -lpsx library, provide a number of things to + * support POSIX semantics for syscalls associated with the pthread + * library. For any code that references the psx_syscall{3,6} + * functions, linking this code is as follows: + * + * ld ... -lpsx -lpthread + * or, + * gcc ... -lpsx -lpthread + * + * NOTE: linking with -lcap to make it silently aware of the psx + * mechanism is tricky. You have to envelope the -lpsx part with + * the following linker flags: + * + * ld ... --no-as-needed --whole-archive -lpsx --no-whole-archive --as-needed -lpthread + * or, + * gcc ... -Wl,--no-as-needed -Wl,--whole-archive -lpsx -Wl,--no-whole-archive -Wl,--as-needed -lpthread + * + * These options are provided in the + * https://en.wikipedia.org/wiki/Pkg-config libpsx.pc file + * distributed with the library. + * + * FYI Earlier versions of libpsx relied on gcc + * ... -Wl,--wrap=pthread_create linkage in all cases, but since + * libpsx-2.72 the library can work with non pthread threads (LWP) + * under Linux and such wrapping is no longer needed. That being + * said, for compatibility reasons such linking is still supported. + * + * glibc provides a subset of this functionality natively through the + * nptl:setxid mechanism and could implement psx_syscall() directly + * using that style of functionality but, as of 2019-11-30, the setxid + * mechanism is limited to 9 specific set*() syscalls that do not + * support the syscall6 API (needed for prctl functions and the ambient + * capabilities set for example). + */ + +#ifndef _SYS_PSX_SYSCALL_H +#define _SYS_PSX_SYSCALL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* + * Programmatic way to recognize feature set. + */ +#define LIBPSX_MAJOR 2 +#define LIBPSX_MINOR 73 + +/* + * psx_syscall performs the specified syscall on all psx registered + * threads. The mechanism by which this occurs is much less efficient + * than a standard system call on Linux, so it should only be used + * when POSIX semantics are required to change process relevant + * security state. + * + * Glibc has native support for POSIX semantics on setgroups() and the + * 8 set*[gu]id() functions. So, there is no need to use psx_syscall() + * for these calls. This call exists for all the other system calls + * that need to maintain parity on all pthreads of a program. + * + * Some macrology is used to allow the caller to provide only as many + * arguments as needed, thus psx_syscall() cannot be used as a + * function pointer. For those situations, we define psx_syscall3() + * and psx_syscall6(). + */ +#define psx_syscall(syscall_nr, ...) \ + __psx_syscall(syscall_nr, __VA_ARGS__, (long int) 6, (long int) 5, \ + (long int) 4, (long int) 3, (long int) 2, \ + (long int) 1, (long int) 0) +long int __psx_syscall(long int syscall_nr, ...); +long int psx_syscall3(long int syscall_nr, + long int arg1, long int arg2, long int arg3); +long int psx_syscall6(long int syscall_nr, + long int arg1, long int arg2, long int arg3, + long int arg4, long int arg5, long int arg6); + +/* + * This function should be used by systems to obtain pointers to the + * two syscall functions provided by the PSX library. A linkage trick + * is to define this function as weak in a library that can optionally + * use libpsx and then, should the caller link -lpsx, that library can + * implicitly use these POSIX semantics syscalls. See libcap for an + * example of this usage. + */ +void psx_load_syscalls(long int (**syscall_fn)(long int, + long int, long int, long int), + long int (**syscall6_fn)(long int, + long int, long int, long int, + long int, long int, long int)); + +/* + * psx_sensitivity_t holds the level of paranoia for non-POSIX syscall + * behavior. The default is PSX_IGNORE: which is best effort - no + * enforcement; PSX_WARNING will dump to stderr a warning when a + * syscall's results differ; PSX_ERROR will dump info as per + * PSX_WARNING and generate a SIGSYS. The current mode can be set with + * psx_set_sensitivity(). + */ +typedef enum { + PSX_IGNORE = 0, + PSX_WARNING = 1, + PSX_ERROR = 2, +} psx_sensitivity_t; + +/* + * psx_set_sensitivity sets the current sensitivity of the PSX + * mechanism. The function returns 0 on success and -1 if the + * requested level is invalid. + */ +int psx_set_sensitivity(psx_sensitivity_t level); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_PSX_SYSCALL_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/ptrace.h b/board/mentalnet/overlay/usr/include/sys/ptrace.h new file mode 100644 index 0000000..9dea188 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/ptrace.h @@ -0,0 +1,216 @@ +/* `ptrace' debugger support interface. Linux/x86 version. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PTRACE_H +#define _SYS_PTRACE_H 1 + +#include +#include + +__BEGIN_DECLS + +/* Type of the REQUEST argument to `ptrace.' */ +enum __ptrace_request +{ + /* Indicate that the process making this request should be traced. + All signals received by this process can be intercepted by its + parent, and its parent can use the other `ptrace' requests. */ + PTRACE_TRACEME = 0, +#define PT_TRACE_ME PTRACE_TRACEME + + /* Return the word in the process's text space at address ADDR. */ + PTRACE_PEEKTEXT = 1, +#define PT_READ_I PTRACE_PEEKTEXT + + /* Return the word in the process's data space at address ADDR. */ + PTRACE_PEEKDATA = 2, +#define PT_READ_D PTRACE_PEEKDATA + + /* Return the word in the process's user area at offset ADDR. */ + PTRACE_PEEKUSER = 3, +#define PT_READ_U PTRACE_PEEKUSER + + /* Write the word DATA into the process's text space at address ADDR. */ + PTRACE_POKETEXT = 4, +#define PT_WRITE_I PTRACE_POKETEXT + + /* Write the word DATA into the process's data space at address ADDR. */ + PTRACE_POKEDATA = 5, +#define PT_WRITE_D PTRACE_POKEDATA + + /* Write the word DATA into the process's user area at offset ADDR. */ + PTRACE_POKEUSER = 6, +#define PT_WRITE_U PTRACE_POKEUSER + + /* Continue the process. */ + PTRACE_CONT = 7, +#define PT_CONTINUE PTRACE_CONT + + /* Kill the process. */ + PTRACE_KILL = 8, +#define PT_KILL PTRACE_KILL + + /* Single step the process. */ + PTRACE_SINGLESTEP = 9, +#define PT_STEP PTRACE_SINGLESTEP + + /* Get all general purpose registers used by a processes. */ + PTRACE_GETREGS = 12, +#define PT_GETREGS PTRACE_GETREGS + + /* Set all general purpose registers used by a processes. */ + PTRACE_SETREGS = 13, +#define PT_SETREGS PTRACE_SETREGS + + /* Get all floating point registers used by a processes. */ + PTRACE_GETFPREGS = 14, +#define PT_GETFPREGS PTRACE_GETFPREGS + + /* Set all floating point registers used by a processes. */ + PTRACE_SETFPREGS = 15, +#define PT_SETFPREGS PTRACE_SETFPREGS + + /* Attach to a process that is already running. */ + PTRACE_ATTACH = 16, +#define PT_ATTACH PTRACE_ATTACH + + /* Detach from a process attached to with PTRACE_ATTACH. */ + PTRACE_DETACH = 17, +#define PT_DETACH PTRACE_DETACH + + /* Get all extended floating point registers used by a processes. */ + PTRACE_GETFPXREGS = 18, +#define PT_GETFPXREGS PTRACE_GETFPXREGS + + /* Set all extended floating point registers used by a processes. */ + PTRACE_SETFPXREGS = 19, +#define PT_SETFPXREGS PTRACE_SETFPXREGS + + /* Continue and stop at the next entry to or return from syscall. */ + PTRACE_SYSCALL = 24, +#define PT_SYSCALL PTRACE_SYSCALL + + /* Get a TLS entry in the GDT. */ + PTRACE_GET_THREAD_AREA = 25, +#define PT_GET_THREAD_AREA PTRACE_GET_THREAD_AREA + + /* Change a TLS entry in the GDT. */ + PTRACE_SET_THREAD_AREA = 26, +#define PT_SET_THREAD_AREA PTRACE_SET_THREAD_AREA + +#ifdef __x86_64__ + /* Access TLS data. */ + PTRACE_ARCH_PRCTL = 30, +# define PT_ARCH_PRCTL PTRACE_ARCH_PRCTL +#endif + + /* Continue and stop at the next syscall, it will not be executed. */ + PTRACE_SYSEMU = 31, +#define PT_SYSEMU PTRACE_SYSEMU + + /* Single step the process, the next syscall will not be executed. */ + PTRACE_SYSEMU_SINGLESTEP = 32, +#define PT_SYSEMU_SINGLESTEP PTRACE_SYSEMU_SINGLESTEP + + /* Execute process until next taken branch. */ + PTRACE_SINGLEBLOCK = 33, +#define PT_STEPBLOCK PTRACE_SINGLEBLOCK + + /* Set ptrace filter options. */ + PTRACE_SETOPTIONS = 0x4200, +#define PT_SETOPTIONS PTRACE_SETOPTIONS + + /* Get last ptrace message. */ + PTRACE_GETEVENTMSG = 0x4201, +#define PT_GETEVENTMSG PTRACE_GETEVENTMSG + + /* Get siginfo for process. */ + PTRACE_GETSIGINFO = 0x4202, +#define PT_GETSIGINFO PTRACE_GETSIGINFO + + /* Set new siginfo for process. */ + PTRACE_SETSIGINFO = 0x4203, +#define PT_SETSIGINFO PTRACE_SETSIGINFO + + /* Get register content. */ + PTRACE_GETREGSET = 0x4204, +#define PTRACE_GETREGSET PTRACE_GETREGSET + + /* Set register content. */ + PTRACE_SETREGSET = 0x4205, +#define PTRACE_SETREGSET PTRACE_SETREGSET + + /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect + signal or group stop state. */ + PTRACE_SEIZE = 0x4206, +#define PTRACE_SEIZE PTRACE_SEIZE + + /* Trap seized tracee. */ + PTRACE_INTERRUPT = 0x4207, +#define PTRACE_INTERRUPT PTRACE_INTERRUPT + + /* Wait for next group event. */ + PTRACE_LISTEN = 0x4208, +#define PTRACE_LISTEN PTRACE_LISTEN + + /* Retrieve siginfo_t structures without removing signals from a queue. */ + PTRACE_PEEKSIGINFO = 0x4209, +#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO + + /* Get the mask of blocked signals. */ + PTRACE_GETSIGMASK = 0x420a, +#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK + + /* Change the mask of blocked signals. */ + PTRACE_SETSIGMASK = 0x420b, +#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK + + /* Get seccomp BPF filters. */ + PTRACE_SECCOMP_GET_FILTER = 0x420c, +#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER + + /* Get seccomp BPF filter metadata. */ + PTRACE_SECCOMP_GET_METADATA = 0x420d, +#define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e, +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO + + /* Get rseq configuration information. */ + PTRACE_GET_RSEQ_CONFIGURATION = 0x420f, +#define PTRACE_GET_RSEQ_CONFIGURATION PTRACE_GET_RSEQ_CONFIGURATION + + /* Set configuration for syscall user dispatch. */ + PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210, +#define PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG \ + PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG + + /* Get configuration for syscall user dispatch. */ + PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG = 0x4211 +#define PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG \ + PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG +}; + + +#include + +__END_DECLS + +#endif /* _SYS_PTRACE_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/queue.h b/board/mentalnet/overlay/usr/include/sys/queue.h new file mode 100644 index 0000000..daf4553 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/queue.h @@ -0,0 +1,574 @@ +/* + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + */ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +/* + * This file defines five types of data structures: singly-linked lists, + * lists, simple queues, tail queues, and circular queues. + * + * A singly-linked list is headed by a single forward pointer. The + * elements are singly linked for minimum space and pointer manipulation + * overhead at the expense of O(n) removal for arbitrary elements. New + * elements can be added to the list after an existing element or at the + * head of the list. Elements being removed from the head of the list + * should use the explicit macro for this purpose for optimum + * efficiency. A singly-linked list may only be traversed in the forward + * direction. Singly-linked lists are ideal for applications with large + * datasets and few or no removals or for implementing a LIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A simple queue is headed by a pair of pointers, one the head of the + * list and the other to the tail of the list. The elements are singly + * linked to save space, so elements can only be removed from the + * head of the list. New elements can be added to the list after + * an existing element, at the head of the list, or at the end of the + * list. A simple queue may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * A circle queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the list. + * A circle queue may be traversed in either direction, but has a more + * complex end of list detection. + * + * For details on the use of these macros, see the queue(3) manual page. + */ + +/* + * List definitions. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List functions. + */ +#define LIST_INIT(head) do { \ + (head)->lh_first = NULL; \ +} while (/*CONSTCOND*/0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ + (listelm)->field.le_next->field.le_prev = \ + &(elm)->field.le_next; \ + (listelm)->field.le_next = (elm); \ + (elm)->field.le_prev = &(listelm)->field.le_next; \ +} while (/*CONSTCOND*/0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + (elm)->field.le_next = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &(elm)->field.le_next; \ +} while (/*CONSTCOND*/0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ + (head)->lh_first = (elm); \ + (elm)->field.le_prev = &(head)->lh_first; \ +} while (/*CONSTCOND*/0) + +#define LIST_REMOVE(elm, field) do { \ + if ((elm)->field.le_next != NULL) \ + (elm)->field.le_next->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = (elm)->field.le_next; \ +} while (/*CONSTCOND*/0) + +#define LIST_FOREACH(var, head, field) \ + for ((var) = ((head)->lh_first); \ + (var); \ + (var) = ((var)->field.le_next)) + +/* + * List access methods. + */ +#define LIST_EMPTY(head) ((head)->lh_first == NULL) +#define LIST_FIRST(head) ((head)->lh_first) +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + + +/* + * Singly-linked List definitions. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List functions. + */ +#define SLIST_INIT(head) do { \ + (head)->slh_first = NULL; \ +} while (/*CONSTCOND*/0) + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + (elm)->field.sle_next = (slistelm)->field.sle_next; \ + (slistelm)->field.sle_next = (elm); \ +} while (/*CONSTCOND*/0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.sle_next = (head)->slh_first; \ + (head)->slh_first = (elm); \ +} while (/*CONSTCOND*/0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + (head)->slh_first = (head)->slh_first->field.sle_next; \ +} while (/*CONSTCOND*/0) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + if ((head)->slh_first == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = (head)->slh_first; \ + while(curelm->field.sle_next != (elm)) \ + curelm = curelm->field.sle_next; \ + curelm->field.sle_next = \ + curelm->field.sle_next->field.sle_next; \ + } \ +} while (/*CONSTCOND*/0) + +#define SLIST_FOREACH(var, head, field) \ + for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next) + +/* + * Singly-linked List access methods. + */ +#define SLIST_EMPTY(head) ((head)->slh_first == NULL) +#define SLIST_FIRST(head) ((head)->slh_first) +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + + +/* + * Singly-linked Tail queue declarations. + */ +#define STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first; /* first element */ \ + struct type **stqh_last; /* addr of last next element */ \ +} + +#define STAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).stqh_first } + +#define STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + +/* + * Singly-linked Tail queue functions. + */ +#define STAILQ_INIT(head) do { \ + (head)->stqh_first = NULL; \ + (head)->stqh_last = &(head)->stqh_first; \ +} while (/*CONSTCOND*/0) + +#define STAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ + (head)->stqh_last = &(elm)->field.stqe_next; \ + (head)->stqh_first = (elm); \ +} while (/*CONSTCOND*/0) + +#define STAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.stqe_next = NULL; \ + *(head)->stqh_last = (elm); \ + (head)->stqh_last = &(elm)->field.stqe_next; \ +} while (/*CONSTCOND*/0) + +#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\ + (head)->stqh_last = &(elm)->field.stqe_next; \ + (listelm)->field.stqe_next = (elm); \ +} while (/*CONSTCOND*/0) + +#define STAILQ_REMOVE_HEAD(head, field) do { \ + if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == NULL) \ + (head)->stqh_last = &(head)->stqh_first; \ +} while (/*CONSTCOND*/0) + +#define STAILQ_REMOVE(head, elm, type, field) do { \ + if ((head)->stqh_first == (elm)) { \ + STAILQ_REMOVE_HEAD((head), field); \ + } else { \ + struct type *curelm = (head)->stqh_first; \ + while (curelm->field.stqe_next != (elm)) \ + curelm = curelm->field.stqe_next; \ + if ((curelm->field.stqe_next = \ + curelm->field.stqe_next->field.stqe_next) == NULL) \ + (head)->stqh_last = &(curelm)->field.stqe_next; \ + } \ +} while (/*CONSTCOND*/0) + +#define STAILQ_FOREACH(var, head, field) \ + for ((var) = ((head)->stqh_first); \ + (var); \ + (var) = ((var)->field.stqe_next)) + +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ + } \ +} while (/*CONSTCOND*/0) + +/* + * Singly-linked Tail queue access methods. + */ +#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) +#define STAILQ_FIRST(head) ((head)->stqh_first) +#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) + + +/* + * Simple queue definitions. + */ +#define SIMPLEQ_HEAD(name, type) \ +struct name { \ + struct type *sqh_first; /* first element */ \ + struct type **sqh_last; /* addr of last next element */ \ +} + +#define SIMPLEQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).sqh_first } + +#define SIMPLEQ_ENTRY(type) \ +struct { \ + struct type *sqe_next; /* next element */ \ +} + +/* + * Simple queue functions. + */ +#define SIMPLEQ_INIT(head) do { \ + (head)->sqh_first = NULL; \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (/*CONSTCOND*/0) + +#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (head)->sqh_first = (elm); \ +} while (/*CONSTCOND*/0) + +#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.sqe_next = NULL; \ + *(head)->sqh_last = (elm); \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (/*CONSTCOND*/0) + +#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (listelm)->field.sqe_next = (elm); \ +} while (/*CONSTCOND*/0) + +#define SIMPLEQ_REMOVE_HEAD(head, field) do { \ + if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (/*CONSTCOND*/0) + +#define SIMPLEQ_REMOVE(head, elm, type, field) do { \ + if ((head)->sqh_first == (elm)) { \ + SIMPLEQ_REMOVE_HEAD((head), field); \ + } else { \ + struct type *curelm = (head)->sqh_first; \ + while (curelm->field.sqe_next != (elm)) \ + curelm = curelm->field.sqe_next; \ + if ((curelm->field.sqe_next = \ + curelm->field.sqe_next->field.sqe_next) == NULL) \ + (head)->sqh_last = &(curelm)->field.sqe_next; \ + } \ +} while (/*CONSTCOND*/0) + +#define SIMPLEQ_FOREACH(var, head, field) \ + for ((var) = ((head)->sqh_first); \ + (var); \ + (var) = ((var)->field.sqe_next)) + +/* + * Simple queue access methods. + */ +#define SIMPLEQ_EMPTY(head) ((head)->sqh_first == NULL) +#define SIMPLEQ_FIRST(head) ((head)->sqh_first) +#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) + + +/* + * Tail queue definitions. + */ +#define _TAILQ_HEAD(name, type, qual) \ +struct name { \ + qual type *tqh_first; /* first element */ \ + qual type *qual *tqh_last; /* addr of last next element */ \ +} +#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,) + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define _TAILQ_ENTRY(type, qual) \ +struct { \ + qual type *tqe_next; /* next element */ \ + qual type *qual *tqe_prev; /* address of previous next element */\ +} +#define TAILQ_ENTRY(type) _TAILQ_ENTRY(struct type,) + +/* + * Tail queue functions. + */ +#define TAILQ_INIT(head) do { \ + (head)->tqh_first = NULL; \ + (head)->tqh_last = &(head)->tqh_first; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ + (head)->tqh_first->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (head)->tqh_first = (elm); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ + (elm)->field.tqe_next->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (listelm)->field.tqe_next = (elm); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) \ + (elm)->field.tqe_next->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_FOREACH(var, head, field) \ + for ((var) = ((head)->tqh_first); \ + (var); \ + (var) = ((var)->field.tqe_next)) + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \ + (var); \ + (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last))) + +#define TAILQ_CONCAT(head1, head2, field) do { \ + if (!TAILQ_EMPTY(head2)) { \ + *(head1)->tqh_last = (head2)->tqh_first; \ + (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ + (head1)->tqh_last = (head2)->tqh_last; \ + TAILQ_INIT((head2)); \ + } \ +} while (/*CONSTCOND*/0) + +/* + * Tail queue access methods. + */ +#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) +#define TAILQ_FIRST(head) ((head)->tqh_first) +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) + +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) + + +/* + * Circular queue definitions. + */ +#define CIRCLEQ_HEAD(name, type) \ +struct name { \ + struct type *cqh_first; /* first element */ \ + struct type *cqh_last; /* last element */ \ +} + +#define CIRCLEQ_HEAD_INITIALIZER(head) \ + { (void *)&head, (void *)&head } + +#define CIRCLEQ_ENTRY(type) \ +struct { \ + struct type *cqe_next; /* next element */ \ + struct type *cqe_prev; /* previous element */ \ +} + +/* + * Circular queue functions. + */ +#define CIRCLEQ_INIT(head) do { \ + (head)->cqh_first = (void *)(head); \ + (head)->cqh_last = (void *)(head); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm)->field.cqe_next; \ + (elm)->field.cqe_prev = (listelm); \ + if ((listelm)->field.cqe_next == (void *)(head)) \ + (head)->cqh_last = (elm); \ + else \ + (listelm)->field.cqe_next->field.cqe_prev = (elm); \ + (listelm)->field.cqe_next = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm); \ + (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ + if ((listelm)->field.cqe_prev == (void *)(head)) \ + (head)->cqh_first = (elm); \ + else \ + (listelm)->field.cqe_prev->field.cqe_next = (elm); \ + (listelm)->field.cqe_prev = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.cqe_next = (head)->cqh_first; \ + (elm)->field.cqe_prev = (void *)(head); \ + if ((head)->cqh_last == (void *)(head)) \ + (head)->cqh_last = (elm); \ + else \ + (head)->cqh_first->field.cqe_prev = (elm); \ + (head)->cqh_first = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.cqe_next = (void *)(head); \ + (elm)->field.cqe_prev = (head)->cqh_last; \ + if ((head)->cqh_first == (void *)(head)) \ + (head)->cqh_first = (elm); \ + else \ + (head)->cqh_last->field.cqe_next = (elm); \ + (head)->cqh_last = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_REMOVE(head, elm, field) do { \ + if ((elm)->field.cqe_next == (void *)(head)) \ + (head)->cqh_last = (elm)->field.cqe_prev; \ + else \ + (elm)->field.cqe_next->field.cqe_prev = \ + (elm)->field.cqe_prev; \ + if ((elm)->field.cqe_prev == (void *)(head)) \ + (head)->cqh_first = (elm)->field.cqe_next; \ + else \ + (elm)->field.cqe_prev->field.cqe_next = \ + (elm)->field.cqe_next; \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_FOREACH(var, head, field) \ + for ((var) = ((head)->cqh_first); \ + (var) != (const void *)(head); \ + (var) = ((var)->field.cqe_next)) + +#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ + for ((var) = ((head)->cqh_last); \ + (var) != (const void *)(head); \ + (var) = ((var)->field.cqe_prev)) + +/* + * Circular queue access methods. + */ +#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) +#define CIRCLEQ_FIRST(head) ((head)->cqh_first) +#define CIRCLEQ_LAST(head) ((head)->cqh_last) +#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) +#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) + +#define CIRCLEQ_LOOP_NEXT(head, elm, field) \ + (((elm)->field.cqe_next == (void *)(head)) \ + ? ((head)->cqh_first) \ + : (elm->field.cqe_next)) +#define CIRCLEQ_LOOP_PREV(head, elm, field) \ + (((elm)->field.cqe_prev == (void *)(head)) \ + ? ((head)->cqh_last) \ + : (elm->field.cqe_prev)) + +#endif /* sys/queue.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/quota.h b/board/mentalnet/overlay/usr/include/sys/quota.h new file mode 100644 index 0000000..83a8653 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/quota.h @@ -0,0 +1,135 @@ +/* This just represents the non-kernel parts of . + Copyright (C) 1998-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * Copyright (c) 1982, 1986 Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Robert Elz at The University of Melbourne. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _SYS_QUOTA_H +#define _SYS_QUOTA_H 1 + +#include +#include + +#include + +/* + * Convert diskblocks to blocks and the other way around. + * currently only to fool the BSD source. :-) + */ +#define dbtob(num) ((num) << 10) +#define btodb(num) ((num) >> 10) + +/* + * Convert count of filesystem blocks to diskquota blocks, meant for + * filesystems where i_blksize != 1024. + */ +#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / 1024) + +/* + * Definitions for disk quotas imposed on the average user + * (big brother finally hits Linux). + * + * The following constants define the amount of time given a user + * before the soft limits are treated as hard limits (usually resulting + * in an allocation failure). The timer is started when the user crosses + * their soft limit, it is reset when they go below their soft limit. + */ +#define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */ +#define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */ + +#define QUOTAFILENAME "quota" +#define QUOTAGROUP "staff" + +#define NR_DQHASH 43 /* Just an arbitrary number any suggestions ? */ +#define NR_DQUOTS 256 /* Number of quotas active at one time */ + +/* Old name for struct if_dqblk. */ +struct dqblk + { + __uint64_t dqb_bhardlimit; /* absolute limit on disk quota blocks alloc */ + __uint64_t dqb_bsoftlimit; /* preferred limit on disk quota blocks */ + __uint64_t dqb_curspace; /* current quota block count */ + __uint64_t dqb_ihardlimit; /* maximum # allocated inodes */ + __uint64_t dqb_isoftlimit; /* preferred inode limit */ + __uint64_t dqb_curinodes; /* current # allocated inodes */ + __uint64_t dqb_btime; /* time limit for excessive disk use */ + __uint64_t dqb_itime; /* time limit for excessive files */ + __uint32_t dqb_valid; /* bitmask of QIF_* constants */ + }; + +/* + * Shorthand notation. + */ +#define dq_bhardlimit dq_dqb.dqb_bhardlimit +#define dq_bsoftlimit dq_dqb.dqb_bsoftlimit +#define dq_curspace dq_dqb.dqb_curspace +#define dq_valid dq_dqb.dqb_valid +#define dq_ihardlimit dq_dqb.dqb_ihardlimit +#define dq_isoftlimit dq_dqb.dqb_isoftlimit +#define dq_curinodes dq_dqb.dqb_curinodes +#define dq_btime dq_dqb.dqb_btime +#define dq_itime dq_dqb.dqb_itime + +#define dqoff(UID) ((__loff_t)((UID) * sizeof (struct dqblk))) + +/* Old name for struct if_dqinfo. */ +struct dqinfo + { + __uint64_t dqi_bgrace; + __uint64_t dqi_igrace; + __uint32_t dqi_flags; + __uint32_t dqi_valid; + }; + +__BEGIN_DECLS + +extern int quotactl (int __cmd, const char *__special, int __id, + __caddr_t __addr) __THROW; + +__END_DECLS + +#endif /* sys/quota.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/random.h b/board/mentalnet/overlay/usr/include/sys/random.h new file mode 100644 index 0000000..e4be2df --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/random.h @@ -0,0 +1,45 @@ +/* Interfaces for obtaining random bytes. + Copyright (C) 2016-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_RANDOM_H +#define _SYS_RANDOM_H 1 + +#include +#include + +/* Flags for use with getrandom. */ +#define GRND_NONBLOCK 0x01 +#define GRND_RANDOM 0x02 +#define GRND_INSECURE 0x04 + +__BEGIN_DECLS + +/* Write LENGTH bytes of randomness starting at BUFFER. Return the + number of bytes written, or -1 on error. */ +ssize_t getrandom (void *__buffer, size_t __length, + unsigned int __flags) __wur + __attr_access ((__write_only__, 1, 2)); + +/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on + success or -1 on error. */ +int getentropy (void *__buffer, size_t __length) __wur + __attr_access ((__write_only__, 1, 2)); + +__END_DECLS + +#endif /* _SYS_RANDOM_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/raw.h b/board/mentalnet/overlay/usr/include/sys/raw.h new file mode 100644 index 0000000..5dfa9bd --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/raw.h @@ -0,0 +1,38 @@ +/* Copyright (C) 1999-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_RAW_H +#define _SYS_RAW_H 1 + +#include +#include + +/* The major device number for raw devices. */ +#define RAW_MAJOR 162 + +/* `ioctl' commands for raw devices. */ +#define RAW_SETBIND _IO(0xac, 0) +#define RAW_GETBIND _IO(0xac, 1) + +struct raw_config_request +{ + int raw_minor; + uint64_t block_major; + uint64_t block_minor; +}; + +#endif /* sys/raw.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/reboot.h b/board/mentalnet/overlay/usr/include/sys/reboot.h new file mode 100644 index 0000000..dc46766 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/reboot.h @@ -0,0 +1,54 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* This file should define RB_* macros to be used as flag + bits in the argument to the `reboot' system call. */ + +#ifndef _SYS_REBOOT_H +#define _SYS_REBOOT_H 1 + +#include + +/* Perform a hard reset now. */ +#define RB_AUTOBOOT 0x01234567 + +/* Halt the system. */ +#define RB_HALT_SYSTEM 0xcdef0123 + +/* Enable reboot using Ctrl-Alt-Delete keystroke. */ +#define RB_ENABLE_CAD 0x89abcdef + +/* Disable reboot using Ctrl-Alt-Delete keystroke. */ +#define RB_DISABLE_CAD 0 + +/* Stop system and switch power off if possible. */ +#define RB_POWER_OFF 0x4321fedc + +/* Suspend system using software suspend. */ +#define RB_SW_SUSPEND 0xd000fce2 + +/* Reboot system into new kernel. */ +#define RB_KEXEC 0x45584543 + +__BEGIN_DECLS + +/* Reboot or halt the system. */ +extern int reboot (int __howto) __THROW; + +__END_DECLS + +#endif /* _SYS_REBOOT_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/reg.h b/board/mentalnet/overlay/usr/include/sys/reg.h new file mode 100644 index 0000000..2b28b91 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/reg.h @@ -0,0 +1,77 @@ +/* Copyright (C) 2001-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_REG_H +#define _SYS_REG_H 1 + + +#ifdef __x86_64__ +/* Index into an array of 8 byte longs returned from ptrace for + location of the users' stored general purpose registers. */ + +# define R15 0 +# define R14 1 +# define R13 2 +# define R12 3 +# define RBP 4 +# define RBX 5 +# define R11 6 +# define R10 7 +# define R9 8 +# define R8 9 +# define RAX 10 +# define RCX 11 +# define RDX 12 +# define RSI 13 +# define RDI 14 +# define ORIG_RAX 15 +# define RIP 16 +# define CS 17 +# define EFLAGS 18 +# define RSP 19 +# define SS 20 +# define FS_BASE 21 +# define GS_BASE 22 +# define DS 23 +# define ES 24 +# define FS 25 +# define GS 26 +#else + +/* Index into an array of 4 byte integers returned from ptrace for + * location of the users' stored general purpose registers. */ + +# define EBX 0 +# define ECX 1 +# define EDX 2 +# define ESI 3 +# define EDI 4 +# define EBP 5 +# define EAX 6 +# define DS 7 +# define ES 8 +# define FS 9 +# define GS 10 +# define ORIG_EAX 11 +# define EIP 12 +# define CS 13 +# define EFL 14 +# define UESP 15 +# define SS 16 +#endif + +#endif diff --git a/board/mentalnet/overlay/usr/include/sys/resource.h b/board/mentalnet/overlay/usr/include/sys/resource.h new file mode 100644 index 0000000..92f9644 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/resource.h @@ -0,0 +1,114 @@ +/* Copyright (C) 1992-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_RESOURCE_H +#define _SYS_RESOURCE_H 1 + +#include + +/* Get the system-dependent definitions of structures and bit values. */ +#include + +#ifndef __id_t_defined +typedef __id_t id_t; +# define __id_t_defined +#endif + +__BEGIN_DECLS + +/* The X/Open standard defines that all the functions below must use + `int' as the type for the first argument. When we are compiling with + GNU extensions we change this slightly to provide better error + checking. */ +#if defined __USE_GNU && !defined __cplusplus +typedef enum __rlimit_resource __rlimit_resource_t; +typedef enum __rusage_who __rusage_who_t; +typedef enum __priority_which __priority_which_t; +#else +typedef int __rlimit_resource_t; +typedef int __rusage_who_t; +typedef int __priority_which_t; +#endif + +/* Put the soft and hard limits for RESOURCE in *RLIMITS. + Returns 0 if successful, -1 if not (and sets errno). */ +#ifndef __USE_FILE_OFFSET64 +extern int getrlimit (__rlimit_resource_t __resource, + struct rlimit *__rlimits) __THROW __nonnull ((2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (getrlimit, (__rlimit_resource_t __resource, + struct rlimit *__rlimits), getrlimit64) + __nonnull ((2)); +# else +# define getrlimit getrlimit64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern int getrlimit64 (__rlimit_resource_t __resource, + struct rlimit64 *__rlimits) __THROW __nonnull ((2)); +#endif + +/* Set the soft and hard limits for RESOURCE to *RLIMITS. + Only the super-user can increase hard limits. + Return 0 if successful, -1 if not (and sets errno). */ +#ifndef __USE_FILE_OFFSET64 +extern int setrlimit (__rlimit_resource_t __resource, + const struct rlimit *__rlimits) __THROW __nonnull ((2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (setrlimit, (__rlimit_resource_t __resource, + const struct rlimit *__rlimits), + setrlimit64) __nonnull ((2)); +# else +# define setrlimit setrlimit64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern int setrlimit64 (__rlimit_resource_t __resource, + const struct rlimit64 *__rlimits) __THROW + __nonnull ((2)); +#endif + +/* Return resource usage information on process indicated by WHO + and put it in *USAGE. Returns 0 for success, -1 for failure. */ +extern int getrusage (__rusage_who_t __who, struct rusage *__usage) __THROW; + +#ifdef __USE_TIME64_REDIRECTS +# if defined(__REDIRECT_NTH) +extern int __REDIRECT_NTH (getrusage, (__rusage_who_t __who, + struct rusage *__usage), + __getrusage64); +# else +# define getrusage __getrusage64 +# endif +#endif + +/* Return the highest priority of any process specified by WHICH and WHO + (see above); if WHO is zero, the current process, process group, or user + (as specified by WHO) is used. A lower priority number means higher + priority. Priorities range from PRIO_MIN to PRIO_MAX (above). */ +extern int getpriority (__priority_which_t __which, id_t __who) __THROW; + +/* Set the priority of all processes specified by WHICH and WHO (see above) + to PRIO. Returns 0 on success, -1 on errors. */ +extern int setpriority (__priority_which_t __which, id_t __who, int __prio) + __THROW; + +__END_DECLS + +#endif /* sys/resource.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/rseq.h b/board/mentalnet/overlay/usr/include/sys/rseq.h new file mode 100644 index 0000000..38fdb27 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/rseq.h @@ -0,0 +1,180 @@ +/* Restartable Sequences exported symbols. Linux header. + Copyright (C) 2021-2025 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_RSEQ_H +#define _SYS_RSEQ_H 1 + +/* Architecture-specific rseq signature. */ +#include + +#include +#include +#include + +#ifdef __has_include +# if __has_include ("linux/rseq.h") +# define __GLIBC_HAVE_KERNEL_RSEQ +# endif +#else +# include +# if LINUX_VERSION_CODE >= KERNEL_VERSION (4, 18, 0) +# define __GLIBC_HAVE_KERNEL_RSEQ +# endif +#endif + +#ifdef __GLIBC_HAVE_KERNEL_RSEQ +/* We use the structures declarations from the kernel headers. */ +# include +#else /* __GLIBC_HAVE_KERNEL_RSEQ */ +/* We use a copy of the include/uapi/linux/rseq.h kernel header. */ + +enum rseq_cpu_id_state + { + RSEQ_CPU_ID_UNINITIALIZED = -1, + RSEQ_CPU_ID_REGISTRATION_FAILED = -2, + }; + +enum rseq_flags + { + RSEQ_FLAG_UNREGISTER = (1 << 0), + }; + +enum rseq_cs_flags_bit + { + RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0, + RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1, + RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2, + }; + +enum rseq_cs_flags + { + RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = + (1U << RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT), + RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = + (1U << RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT), + RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = + (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT), + }; + +/* struct rseq_cs is aligned on 32 bytes to ensure it is always + contained within a single cache-line. It is usually declared as + link-time constant data. */ +struct rseq_cs + { + /* Version of this structure. */ + uint32_t version; + /* enum rseq_cs_flags. */ + uint32_t flags; + uint64_t start_ip; + /* Offset from start_ip. */ + uint64_t post_commit_offset; + uint64_t abort_ip; + } __attribute__ ((__aligned__ (32))); + +/* struct rseq is aligned on 32 bytes to ensure it is always + contained within a single cache-line. + + A single struct rseq per thread is allowed. */ +struct rseq + { + /* Restartable sequences cpu_id_start field. Updated by the + kernel. Read by user-space with single-copy atomicity + semantics. This field should only be read by the thread which + registered this data structure. Aligned on 32-bit. Always + contains a value in the range of possible CPUs, although the + value may not be the actual current CPU (e.g. if rseq is not + initialized). This CPU number value should always be compared + against the value of the cpu_id field before performing a rseq + commit or returning a value read from a data structure indexed + using the cpu_id_start value. */ + uint32_t cpu_id_start; + /* Restartable sequences cpu_id field. Updated by the kernel. + Read by user-space with single-copy atomicity semantics. This + field should only be read by the thread which registered this + data structure. Aligned on 32-bit. Values + RSEQ_CPU_ID_UNINITIALIZED and RSEQ_CPU_ID_REGISTRATION_FAILED + have a special semantic: the former means "rseq uninitialized", + and latter means "rseq initialization failed". This value is + meant to be read within rseq critical sections and compared + with the cpu_id_start value previously read, before performing + the commit instruction, or read and compared with the + cpu_id_start value before returning a value loaded from a data + structure indexed using the cpu_id_start value. */ + uint32_t cpu_id; + /* Restartable sequences rseq_cs field. + + Contains NULL when no critical section is active for the current + thread, or holds a pointer to the currently active struct rseq_cs. + + Updated by user-space, which sets the address of the currently + active rseq_cs at the beginning of assembly instruction sequence + block, and set to NULL by the kernel when it restarts an assembly + instruction sequence block, as well as when the kernel detects that + it is preempting or delivering a signal outside of the range + targeted by the rseq_cs. Also needs to be set to NULL by user-space + before reclaiming memory that contains the targeted struct rseq_cs. + + Read and set by the kernel. Set by user-space with single-copy + atomicity semantics. This field should only be updated by the + thread which registered this data structure. Aligned on 64-bit. + + 32-bit architectures should update the low order bits of the + rseq_cs field, leaving the high order bits initialized to 0. */ + uint64_t rseq_cs; + /* Restartable sequences flags field. + + This field should only be updated by the thread which + registered this data structure. Read by the kernel. + Mainly used for single-stepping through rseq critical sections + with debuggers. + + - RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT + Inhibit instruction sequence block restart on preemption + for this thread. + - RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL + Inhibit instruction sequence block restart on signal + delivery for this thread. + - RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE + Inhibit instruction sequence block restart on migration for + this thread. */ + uint32_t flags; + /* Restartable sequences node_id field. Updated by the kernel. Read by + user-space with single-copy atomicity semantics. This field should only + be read by the thread which registered this data structure. Aligned on + 32-bit. Contains the current NUMA node ID. */ + uint32_t node_id; + /* Restartable sequences mm_cid field. Updated by the kernel. Read by + user-space with single-copy atomicity semantics. This field should only + be read by the thread which registered this data structure. Aligned on + 32-bit. Contains the current thread's concurrency ID (allocated + uniquely within a memory map). */ + uint32_t mm_cid; + } __attribute__ ((__aligned__ (32))); + +#endif /* __GLIBC_HAVE_KERNEL_RSEQ */ + +/* Offset from the thread pointer to the rseq area. */ +extern const ptrdiff_t __rseq_offset; + +/* Size of the registered rseq area. 0 if the registration was + unsuccessful. */ +extern const unsigned int __rseq_size; + +/* Flags used during rseq registration. */ +extern const unsigned int __rseq_flags; + +#endif /* sys/rseq.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/select.h b/board/mentalnet/overlay/usr/include/sys/select.h new file mode 100644 index 0000000..d2cdc0f --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/select.h @@ -0,0 +1,155 @@ +/* `fd_set' type and related macros, and `select'/`pselect' declarations. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* POSIX 1003.1g: 6.2 Select from File Descriptor Sets */ + +#ifndef _SYS_SELECT_H +#define _SYS_SELECT_H 1 + +#include + +/* Get definition of needed basic types. */ +#include + +/* Get __FD_* definitions. */ +#include + +/* Get sigset_t. */ +#include + +/* Get definition of timer specification structures. */ +#include +#include +#ifdef __USE_XOPEN2K +# include +#endif + +#ifndef __suseconds_t_defined +typedef __suseconds_t suseconds_t; +# define __suseconds_t_defined +#endif + + +/* The fd_set member is required to be an array of longs. */ +typedef long int __fd_mask; + +/* Some versions of define this macros. */ +#undef __NFDBITS +/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */ +#define __NFDBITS (8 * (int) sizeof (__fd_mask)) +#define __FD_ELT(d) ((d) / __NFDBITS) +#define __FD_MASK(d) ((__fd_mask) (1UL << ((d) % __NFDBITS))) + +/* fd_set for select and pselect. */ +typedef struct + { + /* XPG4.2 requires this member name. Otherwise avoid the name + from the global namespace. */ +#ifdef __USE_XOPEN + __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS]; +# define __FDS_BITS(set) ((set)->fds_bits) +#else + __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS]; +# define __FDS_BITS(set) ((set)->__fds_bits) +#endif + } fd_set; + +/* Maximum number of file descriptors in `fd_set'. */ +#define FD_SETSIZE __FD_SETSIZE + +#ifdef __USE_MISC +/* Sometimes the fd_set member is assumed to have this type. */ +typedef __fd_mask fd_mask; + +/* Number of bits per word of `fd_set' (some code assumes this is 32). */ +# define NFDBITS __NFDBITS +#endif + + +/* Access macros for `fd_set'. */ +#define FD_SET(fd, fdsetp) __FD_SET (fd, fdsetp) +#define FD_CLR(fd, fdsetp) __FD_CLR (fd, fdsetp) +#define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp) +#define FD_ZERO(fdsetp) __FD_ZERO (fdsetp) + + +__BEGIN_DECLS + +/* Check the first NFDS descriptors each in READFDS (if not NULL) for read + readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS + (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out + after waiting the interval specified therein. Returns the number of ready + descriptors, or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +#ifndef __USE_TIME64_REDIRECTS +extern int select (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + struct timeval *__restrict __timeout); +#else +# ifdef __REDIRECT +extern int __REDIRECT (select, + (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + struct timeval *__restrict __timeout), + __select64); +# else +# define select __select64 +# endif +#endif + +#ifdef __USE_XOPEN2K +/* Same as above only that the TIMEOUT value is given with higher + resolution and a sigmask which is been set temporarily. This version + should be used. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int pselect (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + const struct timespec *__restrict __timeout, + const __sigset_t *__restrict __sigmask); +# else +# ifdef __REDIRECT +extern int __REDIRECT (pselect, + (int __nfds, fd_set *__restrict __readfds, + fd_set *__restrict __writefds, + fd_set *__restrict __exceptfds, + const struct timespec *__restrict __timeout, + const __sigset_t *__restrict __sigmask), + __pselect64); +# else +# define pselect __pselect64 +# endif +# endif +#endif + + +/* Define some inlines helping to catch common problems. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __GNUC__ +# include +#endif + +__END_DECLS + +#endif /* sys/select.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/sem.h b/board/mentalnet/overlay/usr/include/sys/sem.h new file mode 100644 index 0000000..7203e26 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/sem.h @@ -0,0 +1,88 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SEM_H +#define _SYS_SEM_H 1 + +#include + +#define __need_size_t +#include + +/* Get common definition of System V style IPC. */ +#include + +/* Get system dependent definition of `struct semid_ds' and more. */ +#include + +#ifdef __USE_GNU +# include +#endif + +/* The following System V style IPC functions implement a semaphore + handling. The definition is found in XPG2. */ + +/* Structure used for argument to `semop' to describe operations. */ +struct sembuf +{ + unsigned short int sem_num; /* semaphore number */ + short int sem_op; /* semaphore operation */ + short int sem_flg; /* operation flag */ +}; + + +__BEGIN_DECLS + +/* Semaphore control operation. */ +#ifndef __USE_TIME64_REDIRECTS +extern int semctl (int __semid, int __semnum, int __cmd, ...) __THROW; +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (semctl, + (int __semid, int __semnum, int __cmd, ...), + __semctl64); +# else +# define semctl __semctl64 +# endif +#endif + +/* Get semaphore. */ +extern int semget (key_t __key, int __nsems, int __semflg) __THROW; + +/* Operate on semaphore. */ +extern int semop (int __semid, struct sembuf *__sops, size_t __nsops) __THROW; + +#ifdef __USE_GNU +/* Operate on semaphore with timeout. */ +# ifndef __USE_TIME64_REDIRECTS +extern int semtimedop (int __semid, struct sembuf *__sops, size_t __nsops, + const struct timespec *__timeout) __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (semtimedop, (int __semid, struct sembuf *__sops, + size_t __nsops, + const struct timespec *__timeout), + __semtimedop64); +# else +# define semtimedop __semtimedop64 +# endif +# endif +#endif + +__END_DECLS + +#endif /* sys/sem.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/sendfile.h b/board/mentalnet/overlay/usr/include/sys/sendfile.h new file mode 100644 index 0000000..7d0893d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/sendfile.h @@ -0,0 +1,51 @@ +/* sendfile -- copy data directly from one file descriptor to another + Copyright (C) 1998-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SENDFILE_H +#define _SYS_SENDFILE_H 1 + +#include +#include + +__BEGIN_DECLS + +/* Send up to COUNT bytes from file associated with IN_FD starting at + *OFFSET to descriptor OUT_FD. Set *OFFSET to the IN_FD's file position + following the read bytes. If OFFSET is a null pointer, use the normal + file position instead. Return the number of written bytes, or -1 in + case of error. */ +#ifndef __USE_FILE_OFFSET64 +extern ssize_t sendfile (int __out_fd, int __in_fd, off_t *__offset, + size_t __count) __THROW; +#else +# ifdef __REDIRECT_NTH +extern ssize_t __REDIRECT_NTH (sendfile, + (int __out_fd, int __in_fd, __off64_t *__offset, + size_t __count), sendfile64); +# else +# define sendfile sendfile64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern ssize_t sendfile64 (int __out_fd, int __in_fd, __off64_t *__offset, + size_t __count) __THROW; +#endif + +__END_DECLS + +#endif /* sys/sendfile.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/shm.h b/board/mentalnet/overlay/usr/include/sys/shm.h new file mode 100644 index 0000000..ade5c6e --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/shm.h @@ -0,0 +1,73 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SHM_H +#define _SYS_SHM_H 1 + +#include + +#define __need_size_t +#include + +/* Get common definition of System V style IPC. */ +#include + +/* Get system dependent definition of `struct shmid_ds' and more. */ +#include + +/* Define types required by the standard. */ +#include + +#ifdef __USE_XOPEN +# ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +# endif +#endif /* X/Open */ + + +__BEGIN_DECLS + +/* The following System V style IPC functions implement a shared memory + facility. The definition is found in XPG4.2. */ + +/* Shared memory control operation. */ +#ifndef __USE_TIME64_REDIRECTS +extern int shmctl (int __shmid, int __cmd, struct shmid_ds *__buf) __THROW; +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (shmctl, + (int __shmid, int __cmd, struct shmid_ds *__buf), + __shmctl64); +# else +# define shmctl __shmctl64 +# endif +#endif + +/* Get shared memory segment. */ +extern int shmget (key_t __key, size_t __size, int __shmflg) __THROW; + +/* Attach shared memory segment. */ +extern void *shmat (int __shmid, const void *__shmaddr, int __shmflg) + __THROW; + +/* Detach shared memory segment. */ +extern int shmdt (const void *__shmaddr) __THROW; + +__END_DECLS + +#endif /* sys/shm.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/signal.h b/board/mentalnet/overlay/usr/include/sys/signal.h new file mode 100644 index 0000000..2e602da --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/signal.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/signalfd.h b/board/mentalnet/overlay/usr/include/sys/signalfd.h new file mode 100644 index 0000000..736bbe0 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/signalfd.h @@ -0,0 +1,62 @@ +/* Copyright (C) 2007-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SIGNALFD_H +#define _SYS_SIGNALFD_H 1 + +#include +#include + +/* Get the platform-dependent flags. */ +#include + +struct signalfd_siginfo +{ + uint32_t ssi_signo; + int32_t ssi_errno; + int32_t ssi_code; + uint32_t ssi_pid; + uint32_t ssi_uid; + int32_t ssi_fd; + uint32_t ssi_tid; + uint32_t ssi_band; + uint32_t ssi_overrun; + uint32_t ssi_trapno; + int32_t ssi_status; + int32_t ssi_int; + uint64_t ssi_ptr; + uint64_t ssi_utime; + uint64_t ssi_stime; + uint64_t ssi_addr; + uint16_t ssi_addr_lsb; + uint16_t __pad2; + int32_t ssi_syscall; + uint64_t ssi_call_addr; + uint32_t ssi_arch; + uint8_t __pad[28]; +}; + +__BEGIN_DECLS + +/* Request notification for delivery of signals in MASK to be + performed using descriptor FD.*/ +extern int signalfd (int __fd, const sigset_t *__mask, int __flags) + __THROW __nonnull ((2)); + +__END_DECLS + +#endif /* sys/signalfd.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/single_threaded.h b/board/mentalnet/overlay/usr/include/sys/single_threaded.h new file mode 100644 index 0000000..593291b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/single_threaded.h @@ -0,0 +1,33 @@ +/* Support for single-thread optimizations. + Copyright (C) 2020-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SINGLE_THREADED_H +#define _SYS_SINGLE_THREADED_H + +#include + +__BEGIN_DECLS + +/* If this variable is non-zero, then the current thread is the only + thread in the process image. If it is zero, the process might be + multi-threaded. */ +extern char __libc_single_threaded; + +__END_DECLS + +#endif /* _SYS_SINGLE_THREADED_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/socket.h b/board/mentalnet/overlay/usr/include/sys/socket.h new file mode 100644 index 0000000..e72f5e7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/socket.h @@ -0,0 +1,348 @@ +/* Declarations of socket constants, types, and functions. + Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SOCKET_H +#define _SYS_SOCKET_H 1 + +#include + +__BEGIN_DECLS + +#include +#define __need_size_t +#include + +/* This operating system-specific header file defines the SOCK_*, PF_*, + AF_*, MSG_*, SOL_*, and SO_* constants, and the `struct sockaddr', + `struct msghdr', and `struct linger' types. */ +#include + +#ifdef __USE_MISC +# include +#endif + +/* The following constants should be used for the second parameter of + `shutdown'. */ +enum +{ + SHUT_RD = 0, /* No more receptions. */ +#define SHUT_RD SHUT_RD + SHUT_WR, /* No more transmissions. */ +#define SHUT_WR SHUT_WR + SHUT_RDWR /* No more receptions or transmissions. */ +#define SHUT_RDWR SHUT_RDWR +}; + +/* This is the type we use for generic socket address arguments. + + With GCC 2.7 and later, the funky union causes redeclarations or + uses with any of the listed types to be allowed without complaint. + G++ 2.7 does not support transparent unions so there we want the + old-style declaration, too. */ +#if defined __cplusplus || !__GNUC_PREREQ (2, 7) || !defined __USE_GNU +# define __SOCKADDR_ARG struct sockaddr *__restrict +# define __CONST_SOCKADDR_ARG const struct sockaddr * +#else +/* Add more `struct sockaddr_AF' types here as necessary. + These are all the ones I found on NetBSD and Linux. */ +# define __SOCKADDR_ALLTYPES \ + __SOCKADDR_ONETYPE (sockaddr) \ + __SOCKADDR_ONETYPE (sockaddr_at) \ + __SOCKADDR_ONETYPE (sockaddr_ax25) \ + __SOCKADDR_ONETYPE (sockaddr_dl) \ + __SOCKADDR_ONETYPE (sockaddr_eon) \ + __SOCKADDR_ONETYPE (sockaddr_in) \ + __SOCKADDR_ONETYPE (sockaddr_in6) \ + __SOCKADDR_ONETYPE (sockaddr_inarp) \ + __SOCKADDR_ONETYPE (sockaddr_ipx) \ + __SOCKADDR_ONETYPE (sockaddr_iso) \ + __SOCKADDR_ONETYPE (sockaddr_ns) \ + __SOCKADDR_ONETYPE (sockaddr_un) \ + __SOCKADDR_ONETYPE (sockaddr_x25) + +# define __SOCKADDR_ONETYPE(type) struct type *__restrict __##type##__; +typedef union { __SOCKADDR_ALLTYPES + } __SOCKADDR_ARG __attribute__ ((__transparent_union__)); +# undef __SOCKADDR_ONETYPE +# define __SOCKADDR_ONETYPE(type) const struct type *__restrict __##type##__; +typedef union { __SOCKADDR_ALLTYPES + } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__)); +# undef __SOCKADDR_ONETYPE +#endif + +#ifdef __USE_GNU +/* For `recvmmsg' and `sendmmsg'. */ +struct mmsghdr + { + struct msghdr msg_hdr; /* Actual message header. */ + unsigned int msg_len; /* Number of received or sent bytes for the + entry. */ + }; +#endif + + +/* Create a new socket of type TYPE in domain DOMAIN, using + protocol PROTOCOL. If PROTOCOL is zero, one is chosen automatically. + Returns a file descriptor for the new socket, or -1 for errors. */ +extern int socket (int __domain, int __type, int __protocol) __THROW; + +/* Create two new sockets, of type TYPE in domain DOMAIN and using + protocol PROTOCOL, which are connected to each other, and put file + descriptors for them in FDS[0] and FDS[1]. If PROTOCOL is zero, + one will be chosen automatically. Returns 0 on success, -1 for errors. */ +extern int socketpair (int __domain, int __type, int __protocol, + int __fds[2]) __THROW; + +/* Give the socket FD the local address ADDR (which is LEN bytes long). */ +extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) + __THROW; + +/* Put the local address of FD into *ADDR and its length in *LEN. */ +extern int getsockname (int __fd, __SOCKADDR_ARG __addr, + socklen_t *__restrict __len) __THROW; + +/* Open a connection on socket FD to peer at ADDR (which LEN bytes long). + For connectionless socket types, just set the default address to send to + and the only address from which to accept transmissions. + Return 0 on success, -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len); + +/* Put the address of the peer connected to socket FD into *ADDR + (which is *LEN bytes long), and its actual length into *LEN. */ +extern int getpeername (int __fd, __SOCKADDR_ARG __addr, + socklen_t *__restrict __len) __THROW; + + +/* Send N bytes of BUF to socket FD. Returns the number sent or -1. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags); + +/* Read N bytes into BUF from socket FD. + Returns the number read or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags); + +/* Send N bytes of BUF on socket FD to peer at address ADDR (which is + ADDR_LEN bytes long). Returns the number sent, or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t sendto (int __fd, const void *__buf, size_t __n, + int __flags, __CONST_SOCKADDR_ARG __addr, + socklen_t __addr_len); + +/* Read N bytes into BUF through socket FD. + If ADDR is not NULL, fill in *ADDR_LEN bytes of it with the address of + the sender, and store the actual size of the address in *ADDR_LEN. + Returns the number of bytes read or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, + int __flags, __SOCKADDR_ARG __addr, + socklen_t *__restrict __addr_len); + + +/* Send a message described MESSAGE on socket FD. + Returns the number of bytes sent, or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +#ifndef __USE_TIME64_REDIRECTS +extern ssize_t sendmsg (int __fd, const struct msghdr *__message, + int __flags); +#else +# ifdef __REDIRECT +extern ssize_t __REDIRECT (sendmsg, (int __fd, const struct msghdr *__message, + int __flags), + __sendmsg64); +# else +extern ssize_t __sendmsg64 (int __fd, const struct msghdr *__message, + int __flags); +# define sendmsg __sendmsg64 +# endif +#endif + +#ifdef __USE_GNU +/* Send a VLEN messages as described by VMESSAGES to socket FD. + Returns the number of datagrams successfully written or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int sendmmsg (int __fd, struct mmsghdr *__vmessages, + unsigned int __vlen, int __flags); +# else +# ifdef __REDIRECT +extern int __REDIRECT (sendmmsg, (int __fd, struct mmsghdr *__vmessages, + unsigned int __vlen, int __flags), + __sendmmsg64); +# else +extern int __sendmmsg64 (int __fd, struct mmsghdr *__vmessages, + unsigned int __vlen, int __flags); +# define sendmmsg __sendmmsg64 +# endif +# endif /* __USE_TIME64_REDIRECTS */ +#endif /* __USE_GNU */ + +/* Receive a message as described by MESSAGE from socket FD. + Returns the number of bytes read or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +#ifndef __USE_TIME64_REDIRECTS +extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags); +#else +# ifdef __REDIRECT +extern ssize_t __REDIRECT (recvmsg, + (int __fd, struct msghdr *__message, int __flags), + __recvmsg64); +# else +extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message, int __flags); +# define recvmsg __recvmsg64 +# endif +#endif + +#ifdef __USE_GNU +/* Receive up to VLEN messages as described by VMESSAGES from socket FD. + Returns the number of messages received or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int recvmmsg (int __fd, struct mmsghdr *__vmessages, + unsigned int __vlen, int __flags, + struct timespec *__tmo); +# else +# ifdef __REDIRECT +extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages, + unsigned int __vlen, int __flags, + struct timespec *__tmo), + __recvmmsg64); +# else +# define recvmmsg __recvmmsg64 +# endif +# endif +#endif + + +/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL + into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's + actual length. Returns 0 on success, -1 for errors. */ +#ifndef __USE_TIME64_REDIRECTS +extern int getsockopt (int __fd, int __level, int __optname, + void *__restrict __optval, + socklen_t *__restrict __optlen) __THROW; +#else +# ifdef __REDIRECT +extern int __REDIRECT_NTH (getsockopt, + (int __fd, int __level, int __optname, + void *__restrict __optval, + socklen_t *__restrict __optlen), + __getsockopt64); +# else +extern int __getsockopt64 (int __fd, int __level, int __optname, + void *__restrict __optval, + socklen_t *__restrict __optlen) __THROW; +# define getsockopt __getsockopt64 +# endif +#endif + +/* Set socket FD's option OPTNAME at protocol level LEVEL + to *OPTVAL (which is OPTLEN bytes long). + Returns 0 on success, -1 for errors. */ +#ifndef __USE_TIME64_REDIRECTS +extern int setsockopt (int __fd, int __level, int __optname, + const void *__optval, socklen_t __optlen) __THROW; +#else +# ifdef __REDIRECT +extern int __REDIRECT_NTH (setsockopt, + (int __fd, int __level, int __optname, + const void *__optval, socklen_t __optlen), + __setsockopt64); +# else +extern int __setsockopt64 (int __fd, int __level, int __optname, + const void *__optval, socklen_t __optlen) __THROW; +# define setsockopt __setsockopt64 +# endif +#endif + + +/* Prepare to accept connections on socket FD. + N connection requests will be queued before further requests are refused. + Returns 0 on success, -1 for errors. */ +extern int listen (int __fd, int __n) __THROW; + +/* Await a connection on socket FD. + When a connection arrives, open a new socket to communicate with it, + set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting + peer and *ADDR_LEN to the address's actual length, and return the + new socket's descriptor, or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int accept (int __fd, __SOCKADDR_ARG __addr, + socklen_t *__restrict __addr_len); + +#ifdef __USE_GNU +/* Similar to 'accept' but takes an additional parameter to specify flags. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int accept4 (int __fd, __SOCKADDR_ARG __addr, + socklen_t *__restrict __addr_len, int __flags); +#endif + +/* Shut down all or part of the connection open on socket FD. + HOW determines what to shut down: + SHUT_RD = No more receptions; + SHUT_WR = No more transmissions; + SHUT_RDWR = No more receptions or transmissions. + Returns 0 on success, -1 for errors. */ +extern int shutdown (int __fd, int __how) __THROW; + + +#ifdef __USE_XOPEN2K +/* Determine whether socket is at a out-of-band mark. */ +extern int sockatmark (int __fd) __THROW; +#endif + + +#ifdef __USE_MISC +/* FDTYPE is S_IFSOCK or another S_IF* macro defined in ; + returns 1 if FD is open on an object of the indicated type, 0 if not, + or -1 for errors (setting errno). */ +extern int isfdtype (int __fd, int __fdtype) __THROW; +#endif + + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#endif + +__END_DECLS + +#endif /* sys/socket.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/socketvar.h b/board/mentalnet/overlay/usr/include/sys/socketvar.h new file mode 100644 index 0000000..b177158 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/socketvar.h @@ -0,0 +1,3 @@ +/* This header is used on many systems but for GNU we have everything + already defined in the standard header. */ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/soundcard.h b/board/mentalnet/overlay/usr/include/sys/soundcard.h new file mode 100644 index 0000000..fade986 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/soundcard.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/stat.h b/board/mentalnet/overlay/usr/include/sys/stat.h new file mode 100644 index 0000000..4bea9e9 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/stat.h @@ -0,0 +1,471 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 5.6 File Characteristics + */ + +#ifndef _SYS_STAT_H +#define _SYS_STAT_H 1 + +#include + +#include /* For __mode_t and __dev_t. */ + +#if defined(__USE_ATFILE) || defined(__USE_XOPEN2K8) +# include +#endif + +#if defined __USE_XOPEN || defined __USE_XOPEN2K +/* The Single Unix specification says that some more types are + available here. */ + +# include + +# ifndef __dev_t_defined +typedef __dev_t dev_t; +# define __dev_t_defined +# endif + +# ifndef __gid_t_defined +typedef __gid_t gid_t; +# define __gid_t_defined +# endif + +# ifndef __ino_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __ino_t ino_t; +# else +typedef __ino64_t ino_t; +# endif +# define __ino_t_defined +# endif + +# ifndef __mode_t_defined +typedef __mode_t mode_t; +# define __mode_t_defined +# endif + +# ifndef __nlink_t_defined +typedef __nlink_t nlink_t; +# define __nlink_t_defined +# endif + +# ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +# endif + +# ifndef __uid_t_defined +typedef __uid_t uid_t; +# define __uid_t_defined +# endif +#endif /* X/Open */ + +#ifdef __USE_UNIX98 +# ifndef __blkcnt_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __blkcnt_t blkcnt_t; +# else +typedef __blkcnt64_t blkcnt_t; +# endif +# define __blkcnt_t_defined +# endif + +# ifndef __blksize_t_defined +typedef __blksize_t blksize_t; +# define __blksize_t_defined +# endif +#endif /* Unix98 */ + +__BEGIN_DECLS + +#include + +#if defined __USE_MISC || defined __USE_XOPEN +# define S_IFMT __S_IFMT +# define S_IFDIR __S_IFDIR +# define S_IFCHR __S_IFCHR +# define S_IFBLK __S_IFBLK +# define S_IFREG __S_IFREG +# ifdef __S_IFIFO +# define S_IFIFO __S_IFIFO +# endif +# ifdef __S_IFLNK +# define S_IFLNK __S_IFLNK +# endif +# if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) \ + && defined __S_IFSOCK +# define S_IFSOCK __S_IFSOCK +# endif +#endif + +/* Test macros for file types. */ + +#define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask)) + +#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) +#define S_ISCHR(mode) __S_ISTYPE((mode), __S_IFCHR) +#define S_ISBLK(mode) __S_ISTYPE((mode), __S_IFBLK) +#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) +#ifdef __S_IFIFO +# define S_ISFIFO(mode) __S_ISTYPE((mode), __S_IFIFO) +#endif +#ifdef __S_IFLNK +# define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK) +#endif + +#if defined __USE_MISC && !defined __S_IFLNK +# define S_ISLNK(mode) 0 +#endif + +#if (defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K) \ + && defined __S_IFSOCK +# define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK) +#elif defined __USE_XOPEN2K +# define S_ISSOCK(mode) 0 +#endif + +/* These are from POSIX.1b. If the objects are not implemented using separate + distinct file types, the macros always will evaluate to zero. Unlike the + other S_* macros the following three take a pointer to a `struct stat' + object as the argument. */ +#ifdef __USE_POSIX199309 +# define S_TYPEISMQ(buf) __S_TYPEISMQ(buf) +# define S_TYPEISSEM(buf) __S_TYPEISSEM(buf) +# define S_TYPEISSHM(buf) __S_TYPEISSHM(buf) +#endif + + +/* Protection bits. */ + +#define S_ISUID __S_ISUID /* Set user ID on execution. */ +#define S_ISGID __S_ISGID /* Set group ID on execution. */ + +#if defined __USE_MISC || defined __USE_XOPEN +/* Save swapped text after use (sticky bit). This is pretty well obsolete. */ +# define S_ISVTX __S_ISVTX +#endif + +#define S_IRUSR __S_IREAD /* Read by owner. */ +#define S_IWUSR __S_IWRITE /* Write by owner. */ +#define S_IXUSR __S_IEXEC /* Execute by owner. */ +/* Read, write, and execute by owner. */ +#define S_IRWXU (__S_IREAD|__S_IWRITE|__S_IEXEC) + +#ifdef __USE_MISC +# define S_IREAD S_IRUSR +# define S_IWRITE S_IWUSR +# define S_IEXEC S_IXUSR +#endif + +#define S_IRGRP (S_IRUSR >> 3) /* Read by group. */ +#define S_IWGRP (S_IWUSR >> 3) /* Write by group. */ +#define S_IXGRP (S_IXUSR >> 3) /* Execute by group. */ +/* Read, write, and execute by group. */ +#define S_IRWXG (S_IRWXU >> 3) + +#define S_IROTH (S_IRGRP >> 3) /* Read by others. */ +#define S_IWOTH (S_IWGRP >> 3) /* Write by others. */ +#define S_IXOTH (S_IXGRP >> 3) /* Execute by others. */ +/* Read, write, and execute by others. */ +#define S_IRWXO (S_IRWXG >> 3) + + +#ifdef __USE_MISC +/* Macros for common mode bit masks. */ +# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ +# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */ +# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/ + +# define S_BLKSIZE 512 /* Block size for `st_blocks'. */ +#endif + + +#ifndef __USE_FILE_OFFSET64 +/* Get file attributes for FILE and put them in BUF. */ +extern int stat (const char *__restrict __file, + struct stat *__restrict __buf) __THROW __nonnull ((1, 2)); + +/* Get file attributes for the file, device, pipe, or socket + that file descriptor FD is open on and put them in BUF. */ +extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2)); +#else +# ifdef __USE_TIME64_REDIRECTS +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (stat, (const char *__restrict __file, + struct stat *__restrict __buf), + __stat64_time64) + __nonnull ((1, 2)); +extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), + __fstat64_time64) + __nonnull ((2)); +# else +# define stat __stat64_time64 +# define fstat __fstat64_time64 +# endif +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (stat, (const char *__restrict __file, + struct stat *__restrict __buf), stat64) + __nonnull ((1, 2)); +extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64) + __nonnull ((2)); +# else +# define stat stat64 +# define fstat fstat64 +# endif +# endif +#endif +#ifdef __USE_LARGEFILE64 +# ifndef __USE_TIME64_REDIRECTS +extern int stat64 (const char *__restrict __file, + struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2)); +extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2)); +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (stat64, (const char *__restrict __file, + struct stat64 *__restrict __buf), + __stat64_time64) + __nonnull ((1, 2)); +extern int __REDIRECT_NTH (fstat64, (int __fd, struct stat64 *__buf), + __fstat64_time64) + __nonnull ((2)); +# else +# define stat64 __stat64_time64 +# define fstat64 __fstat64_time64 +# endif +# endif +#endif + +#ifdef __USE_ATFILE +/* Similar to stat, get the attributes for FILE and put them in BUF. + Relative path names are interpreted relative to FD unless FD is + AT_FDCWD. */ +# ifndef __USE_FILE_OFFSET64 +extern int fstatat (int __fd, const char *__restrict __file, + struct stat *__restrict __buf, int __flag) + __THROW __nonnull ((3)); +# else +# ifdef __USE_TIME64_REDIRECTS +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file, + struct stat *__restrict __buf, + int __flag), + __fstatat64_time64) __nonnull ((3)); +# else +# define fstatat __fstatat64_time64 +# endif +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file, + struct stat *__restrict __buf, + int __flag), + fstatat64) __nonnull ((3)); +# else +# define fstatat fstatat64 +# endif +# endif +# endif + +# ifdef __USE_LARGEFILE64 +# ifndef __USE_TIME64_REDIRECTS +extern int fstatat64 (int __fd, const char *__restrict __file, + struct stat64 *__restrict __buf, int __flag) + __THROW __nonnull ((3)); +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (fstatat64, (int __fd, + const char *__restrict __file, + struct stat64 *__restrict __buf, + int __flag), + __fstatat64_time64) + __nonnull ((3)); +# else +# define fstatat64 __fstatat64_time64 +# endif +# endif +# endif +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K +# ifndef __USE_FILE_OFFSET64 +/* Get file attributes about FILE and put them in BUF. + If FILE is a symbolic link, do not follow it. */ +extern int lstat (const char *__restrict __file, + struct stat *__restrict __buf) __THROW __nonnull ((1, 2)); +# else +# ifdef __USE_TIME64_REDIRECTS +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (lstat, + (const char *__restrict __file, + struct stat *__restrict __buf), __lstat64_time64) + __nonnull ((1, 2)); +# else +# define lstat __lstat64_time64 +# endif +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (lstat, + (const char *__restrict __file, + struct stat *__restrict __buf), lstat64) + __nonnull ((1, 2)); +# else +# define lstat lstat64 +# endif +# endif +# endif +# ifdef __USE_LARGEFILE64 +# ifndef __USE_TIME64_REDIRECTS +extern int lstat64 (const char *__restrict __file, + struct stat64 *__restrict __buf) + __THROW __nonnull ((1, 2)); +# else +extern int __REDIRECT_NTH (lstat64, (const char *__restrict __file, + struct stat64 *__restrict __buf), + __lstat64_time64) + __nonnull ((1, 2)); +# endif +# endif +#endif + +/* Set file access permissions for FILE to MODE. + If FILE is a symbolic link, this affects its target instead. */ +extern int chmod (const char *__file, __mode_t __mode) + __THROW __nonnull ((1)); + +#ifdef __USE_MISC +/* Set file access permissions for FILE to MODE. + If FILE is a symbolic link, this affects the link itself + rather than its target. */ +extern int lchmod (const char *__file, __mode_t __mode) + __THROW __nonnull ((1)); +#endif + +/* Set file access permissions of the file FD is open on to MODE. */ +#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED +extern int fchmod (int __fd, __mode_t __mode) __THROW; +#endif + +#ifdef __USE_ATFILE +/* Set file access permissions of FILE relative to + the directory FD is open on. */ +extern int fchmodat (int __fd, const char *__file, __mode_t __mode, + int __flag) + __THROW __nonnull ((2)) __wur; +#endif /* Use ATFILE. */ + + + +/* Set the file creation mask of the current process to MASK, + and return the old creation mask. */ +extern __mode_t umask (__mode_t __mask) __THROW; + +#ifdef __USE_GNU +/* Get the current `umask' value without changing it. + This function is only available under the GNU Hurd. */ +extern __mode_t getumask (void) __THROW; +#endif + +/* Create a new directory named PATH, with permission bits MODE. */ +extern int mkdir (const char *__path, __mode_t __mode) + __THROW __nonnull ((1)); + +#ifdef __USE_ATFILE +/* Like mkdir, create a new directory with permission bits MODE. But + interpret relative PATH names relative to the directory associated + with FD. */ +extern int mkdirat (int __fd, const char *__path, __mode_t __mode) + __THROW __nonnull ((2)); +#endif + +/* Create a device file named PATH, with permission and special bits MODE + and device number DEV (which can be constructed from major and minor + device numbers with the `makedev' macro above). */ +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev) + __THROW __nonnull ((1)); + +# ifdef __USE_ATFILE +/* Like mknod, create a new device file with permission bits MODE and + device number DEV. But interpret relative PATH names relative to + the directory associated with FD. */ +extern int mknodat (int __fd, const char *__path, __mode_t __mode, + __dev_t __dev) __THROW __nonnull ((2)); +# endif +#endif + + +/* Create a new FIFO named PATH, with permission bits MODE. */ +extern int mkfifo (const char *__path, __mode_t __mode) + __THROW __nonnull ((1)); + +#ifdef __USE_ATFILE +/* Like mkfifo, create a new FIFO with permission bits MODE. But + interpret relative PATH names relative to the directory associated + with FD. */ +extern int mkfifoat (int __fd, const char *__path, __mode_t __mode) + __THROW __nonnull ((2)); +#endif + +#ifdef __USE_ATFILE +# ifndef __USE_TIME64_REDIRECTS +/* Set file access and modification times relative to directory file + descriptor. */ +extern int utimensat (int __fd, const char *__path, + const struct timespec __times[2], + int __flags) + __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (utimensat, (int fd, const char *__path, + const struct timespec __times[2], + int flags), + __utimensat64); +# else +# define utimensat __utimensat64 +# endif +# endif +#endif + +#ifdef __USE_XOPEN2K8 +# ifndef __USE_TIME64_REDIRECTS +/* Set file access and modification times of the file associated with FD. */ +extern int futimens (int __fd, const struct timespec __times[2]) __THROW; + +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (futimens, (int fd, const struct timespec __times[2]), + __futimens64); +# else +# define futimens __futimens64 +# endif +# endif +#endif + +#ifdef __USE_GNU +# include +#endif + +__END_DECLS + + +#endif /* sys/stat.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/statfs.h b/board/mentalnet/overlay/usr/include/sys/statfs.h new file mode 100644 index 0000000..20ee273 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/statfs.h @@ -0,0 +1,67 @@ +/* Definitions for getting information about a filesystem. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_STATFS_H +#define _SYS_STATFS_H 1 + +#include + +/* Get the system-specific definition of `struct statfs'. */ +#include + +__BEGIN_DECLS + +/* Return information about the filesystem on which FILE resides. */ +#ifndef __USE_FILE_OFFSET64 +extern int statfs (const char *__file, struct statfs *__buf) + __THROW __nonnull ((1, 2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (statfs, + (const char *__file, struct statfs *__buf), + statfs64) __nonnull ((1, 2)); +# else +# define statfs statfs64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern int statfs64 (const char *__file, struct statfs64 *__buf) + __THROW __nonnull ((1, 2)); +#endif + +/* Return information about the filesystem containing the file FILDES + refers to. */ +#ifndef __USE_FILE_OFFSET64 +extern int fstatfs (int __fildes, struct statfs *__buf) + __THROW __nonnull ((2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (fstatfs, (int __fildes, struct statfs *__buf), + fstatfs64) __nonnull ((2)); +# else +# define fstatfs fstatfs64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern int fstatfs64 (int __fildes, struct statfs64 *__buf) + __THROW __nonnull ((2)); +#endif + +__END_DECLS + +#endif /* sys/statfs.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/statvfs.h b/board/mentalnet/overlay/usr/include/sys/statvfs.h new file mode 100644 index 0000000..138bc88 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/statvfs.h @@ -0,0 +1,90 @@ +/* Definitions for getting information about a filesystem. + Copyright (C) 1998-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_STATVFS_H +#define _SYS_STATVFS_H 1 + +#include + +/* Get the system-specific definition of `struct statvfs'. */ +#include + +#ifndef __USE_FILE_OFFSET64 +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#else +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#endif + +__BEGIN_DECLS + +/* Return information about the filesystem on which FILE resides. */ +#ifndef __USE_FILE_OFFSET64 +extern int statvfs (const char *__restrict __file, + struct statvfs *__restrict __buf) + __THROW __nonnull ((1, 2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (statvfs, + (const char *__restrict __file, + struct statvfs *__restrict __buf), statvfs64) + __nonnull ((1, 2)); +# else +# define statvfs statvfs64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern int statvfs64 (const char *__restrict __file, + struct statvfs64 *__restrict __buf) + __THROW __nonnull ((1, 2)); +#endif + +/* Return information about the filesystem containing the file FILDES + refers to. */ +#ifndef __USE_FILE_OFFSET64 +extern int fstatvfs (int __fildes, struct statvfs *__buf) + __THROW __nonnull ((2)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (fstatvfs, (int __fildes, struct statvfs *__buf), + fstatvfs64) __nonnull ((2)); +# else +# define fstatvfs fstatvfs64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern int fstatvfs64 (int __fildes, struct statvfs64 *__buf) + __THROW __nonnull ((2)); +#endif + +__END_DECLS + +#endif /* sys/statvfs.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/swap.h b/board/mentalnet/overlay/usr/include/sys/swap.h new file mode 100644 index 0000000..6e53956 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/swap.h @@ -0,0 +1,43 @@ +/* Calls to enable and disable swapping on specified locations. Linux version. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SWAP_H + +#define _SYS_SWAP_H 1 +#include + +/* The swap priority is encoded as: + (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK +*/ +#define SWAP_FLAG_PREFER 0x8000 /* Set if swap priority is specified. */ +#define SWAP_FLAG_PRIO_MASK 0x7fff +#define SWAP_FLAG_PRIO_SHIFT 0 +#define SWAP_FLAG_DISCARD 0x10000 /* Discard swap cluster after use. */ + +__BEGIN_DECLS + +/* Make the block special device PATH available to the system for swapping. + This call is restricted to the super-user. */ +extern int swapon (const char *__path, int __flags) __THROW; + +/* Stop using block special device PATH for swapping. */ +extern int swapoff (const char *__path) __THROW; + +__END_DECLS + +#endif /* _SYS_SWAP_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/syscall.h b/board/mentalnet/overlay/usr/include/sys/syscall.h new file mode 100644 index 0000000..781f178 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/syscall.h @@ -0,0 +1,31 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYSCALL_H +#define _SYSCALL_H 1 + +/* This file should list the numbers of the system calls the system knows. + But instead of duplicating this we use the information available + from the kernel sources. */ +#include + +/* The Linux kernel header file defines macros __NR_*, but some + programs expect the traditional form SYS_*. + defines SYS_* macros for __NR_* macros of known names. */ +#include + +#endif diff --git a/board/mentalnet/overlay/usr/include/sys/sysinfo.h b/board/mentalnet/overlay/usr/include/sys/sysinfo.h new file mode 100644 index 0000000..e32d2de --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/sysinfo.h @@ -0,0 +1,47 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SYSINFO_H +#define _SYS_SYSINFO_H 1 + +#include + +/* Get sysinfo structure from kernel header. */ +#include + +__BEGIN_DECLS + +/* Returns information on overall system statistics. */ +extern int sysinfo (struct sysinfo *__info) __THROW; + + +/* Return number of configured processors. */ +extern int get_nprocs_conf (void) __THROW; + +/* Return number of available processors. */ +extern int get_nprocs (void) __THROW; + + +/* Return number of physical pages of memory in the system. */ +extern long int get_phys_pages (void) __THROW; + +/* Return number of available physical pages of memory in the system. */ +extern long int get_avphys_pages (void) __THROW; + +__END_DECLS + +#endif /* sys/sysinfo.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/syslog.h b/board/mentalnet/overlay/usr/include/sys/syslog.h new file mode 100644 index 0000000..3888153 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/syslog.h @@ -0,0 +1,217 @@ +/* + * Copyright (c) 1982, 1986, 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)syslog.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _SYS_SYSLOG_H +#define _SYS_SYSLOG_H 1 + +#include +#define __need___va_list +#include + +/* This file defines _PATH_LOG. */ +#include + +/* + * priorities/facilities are encoded into a single 32-bit quantity, where the + * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility + * (0-big number). Both the priorities and the facilities map roughly + * one-to-one to strings in the syslogd(8) source code. This mapping is + * included in this file. + * + * priorities (these are ordered) + */ +#define LOG_EMERG 0 /* system is unusable */ +#define LOG_ALERT 1 /* action must be taken immediately */ +#define LOG_CRIT 2 /* critical conditions */ +#define LOG_ERR 3 /* error conditions */ +#define LOG_WARNING 4 /* warning conditions */ +#define LOG_NOTICE 5 /* normal but significant condition */ +#define LOG_INFO 6 /* informational */ +#define LOG_DEBUG 7 /* debug-level messages */ + +#define LOG_PRIMASK 0x07 /* mask to extract priority part (internal) */ + /* extract priority */ +#define LOG_PRI(p) ((p) & LOG_PRIMASK) +#define LOG_MAKEPRI(fac, pri) ((fac) | (pri)) + +#if defined SYSLOG_NAMES && defined __USE_MISC +#define INTERNAL_NOPRI 0x10 /* the "no priority" priority */ + /* mark "facility" */ +#define INTERNAL_MARK LOG_MAKEPRI(LOG_NFACILITIES << 3, 0) +typedef struct _code { + char *c_name; + int c_val; +} CODE; + +CODE prioritynames[] = + { + { "alert", LOG_ALERT }, + { "crit", LOG_CRIT }, + { "debug", LOG_DEBUG }, + { "emerg", LOG_EMERG }, + { "err", LOG_ERR }, + { "error", LOG_ERR }, /* DEPRECATED */ + { "info", LOG_INFO }, + { "none", INTERNAL_NOPRI }, /* INTERNAL */ + { "notice", LOG_NOTICE }, + { "panic", LOG_EMERG }, /* DEPRECATED */ + { "warn", LOG_WARNING }, /* DEPRECATED */ + { "warning", LOG_WARNING }, + { NULL, -1 } + }; +#endif + +/* facility codes */ +#define LOG_KERN (0<<3) /* kernel messages */ +#define LOG_USER (1<<3) /* random user-level messages */ +#define LOG_MAIL (2<<3) /* mail system */ +#define LOG_DAEMON (3<<3) /* system daemons */ +#define LOG_AUTH (4<<3) /* security/authorization messages */ +#define LOG_SYSLOG (5<<3) /* messages generated internally by syslogd */ +#define LOG_LPR (6<<3) /* line printer subsystem */ +#define LOG_NEWS (7<<3) /* network news subsystem */ +#define LOG_UUCP (8<<3) /* UUCP subsystem */ +#define LOG_CRON (9<<3) /* clock daemon */ +#define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */ +#define LOG_FTP (11<<3) /* ftp daemon */ + + /* other codes through 15 reserved for system use */ +#define LOG_LOCAL0 (16<<3) /* reserved for local use */ +#define LOG_LOCAL1 (17<<3) /* reserved for local use */ +#define LOG_LOCAL2 (18<<3) /* reserved for local use */ +#define LOG_LOCAL3 (19<<3) /* reserved for local use */ +#define LOG_LOCAL4 (20<<3) /* reserved for local use */ +#define LOG_LOCAL5 (21<<3) /* reserved for local use */ +#define LOG_LOCAL6 (22<<3) /* reserved for local use */ +#define LOG_LOCAL7 (23<<3) /* reserved for local use */ + +#define LOG_NFACILITIES 24 /* current number of facilities */ +#define LOG_FACMASK 0x03f8 /* mask to extract facility part */ + /* facility of pri */ +#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3) + +#if defined SYSLOG_NAMES && defined __USE_MISC +CODE facilitynames[] = + { + { "auth", LOG_AUTH }, + { "authpriv", LOG_AUTHPRIV }, + { "cron", LOG_CRON }, + { "daemon", LOG_DAEMON }, + { "ftp", LOG_FTP }, + { "kern", LOG_KERN }, + { "lpr", LOG_LPR }, + { "mail", LOG_MAIL }, + { "mark", INTERNAL_MARK }, /* INTERNAL */ + { "news", LOG_NEWS }, + { "security", LOG_AUTH }, /* DEPRECATED */ + { "syslog", LOG_SYSLOG }, + { "user", LOG_USER }, + { "uucp", LOG_UUCP }, + { "local0", LOG_LOCAL0 }, + { "local1", LOG_LOCAL1 }, + { "local2", LOG_LOCAL2 }, + { "local3", LOG_LOCAL3 }, + { "local4", LOG_LOCAL4 }, + { "local5", LOG_LOCAL5 }, + { "local6", LOG_LOCAL6 }, + { "local7", LOG_LOCAL7 }, + { NULL, -1 } + }; +#endif + +/* + * arguments to setlogmask. + */ +#define LOG_MASK(pri) (1 << (pri)) /* mask for one priority */ +#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1) /* all priorities through pri */ + +/* + * Option flags for openlog. + * + * LOG_ODELAY no longer does anything. + * LOG_NDELAY is the inverse of what it used to be. + */ +#define LOG_PID 0x01 /* log the pid with each message */ +#define LOG_CONS 0x02 /* log on the console if errors in sending */ +#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */ +#define LOG_NDELAY 0x08 /* don't delay open */ +#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */ +#define LOG_PERROR 0x20 /* log to stderr as well */ + +__BEGIN_DECLS + +/* Close descriptor used to write to system logger. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void closelog (void); + +/* Open connection to system logger. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void openlog (const char *__ident, int __option, int __facility); + +/* Set the log mask level. */ +extern int setlogmask (int __mask) __THROW; + +/* Generate a log message using FMT string and option arguments. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void syslog (int __pri, const char *__fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + +#ifdef __USE_MISC +/* Generate a log message using FMT and using arguments pointed to by AP. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void vsyslog (int __pri, const char *__fmt, __gnuc_va_list __ap) + __attribute__ ((__format__ (__printf__, 2, 0))); +#endif + + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#else +# include +# if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +# endif +#endif + +__END_DECLS + +#endif /* sys/syslog.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/sysmacros.h b/board/mentalnet/overlay/usr/include/sys/sysmacros.h new file mode 100644 index 0000000..fd31bb3 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/sysmacros.h @@ -0,0 +1,64 @@ +/* Definitions of macros to access `dev_t' values. + Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_SYSMACROS_H +#define _SYS_SYSMACROS_H 1 + +#include +#include +#include + +#define __SYSMACROS_DECL_TEMPL(rtype, name, proto) \ + extern rtype gnu_dev_##name proto __THROW __attribute_const__; + +#define __SYSMACROS_IMPL_TEMPL(rtype, name, proto) \ + __extension__ __extern_inline __attribute_const__ rtype \ + __NTH (gnu_dev_##name proto) + +__BEGIN_DECLS + +__SYSMACROS_DECLARE_MAJOR (__SYSMACROS_DECL_TEMPL) +__SYSMACROS_DECLARE_MINOR (__SYSMACROS_DECL_TEMPL) +__SYSMACROS_DECLARE_MAKEDEV (__SYSMACROS_DECL_TEMPL) + +#ifdef __USE_EXTERN_INLINES + +__SYSMACROS_DEFINE_MAJOR (__SYSMACROS_IMPL_TEMPL) +__SYSMACROS_DEFINE_MINOR (__SYSMACROS_IMPL_TEMPL) +__SYSMACROS_DEFINE_MAKEDEV (__SYSMACROS_IMPL_TEMPL) + +#endif + +__END_DECLS + +#ifndef __SYSMACROS_NEED_IMPLEMENTATION +# undef __SYSMACROS_DECL_TEMPL +# undef __SYSMACROS_IMPL_TEMPL +# undef __SYSMACROS_DECLARE_MAJOR +# undef __SYSMACROS_DECLARE_MINOR +# undef __SYSMACROS_DECLARE_MAKEDEV +# undef __SYSMACROS_DEFINE_MAJOR +# undef __SYSMACROS_DEFINE_MINOR +# undef __SYSMACROS_DEFINE_MAKEDEV +#endif + +#define major(dev) gnu_dev_major (dev) +#define minor(dev) gnu_dev_minor (dev) +#define makedev(maj, min) gnu_dev_makedev (maj, min) + +#endif /* sys/sysmacros.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/termios.h b/board/mentalnet/overlay/usr/include/sys/termios.h new file mode 100644 index 0000000..3e18805 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/termios.h @@ -0,0 +1,4 @@ +#ifndef _SYS_TERMIOS_H +#define _SYS_TERMIOS_H +#include +#endif diff --git a/board/mentalnet/overlay/usr/include/sys/time.h b/board/mentalnet/overlay/usr/include/sys/time.h new file mode 100644 index 0000000..34ccee0 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/time.h @@ -0,0 +1,260 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_TIME_H +#define _SYS_TIME_H 1 + +#include + +#include +#include +#include + +#ifndef __suseconds_t_defined +typedef __suseconds_t suseconds_t; +# define __suseconds_t_defined +#endif + +#include + +__BEGIN_DECLS + +#ifdef __USE_GNU +/* Macros for converting between `struct timeval' and `struct timespec'. */ +# define TIMEVAL_TO_TIMESPEC(tv, ts) { \ + (ts)->tv_sec = (tv)->tv_sec; \ + (ts)->tv_nsec = (tv)->tv_usec * 1000; \ +} +# define TIMESPEC_TO_TIMEVAL(tv, ts) { \ + (tv)->tv_sec = (ts)->tv_sec; \ + (tv)->tv_usec = (ts)->tv_nsec / 1000; \ +} +#endif + + +#ifdef __USE_MISC +/* Structure crudely representing a timezone. + This is obsolete and should never be used. */ +struct timezone + { + int tz_minuteswest; /* Minutes west of GMT. */ + int tz_dsttime; /* Nonzero if DST is ever in effect. */ + }; +#endif + +/* Get the current time of day, putting it into *TV. + If TZ is not null, *TZ must be a struct timezone, and both fields + will be set to zero. + Calling this function with a non-null TZ is obsolete; + use localtime etc. instead. + This function itself is semi-obsolete; + most callers should use time or clock_gettime instead. */ +#ifndef __USE_TIME64_REDIRECTS +extern int gettimeofday (struct timeval *__restrict __tv, + void *__restrict __tz) __THROW __nonnull ((1)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (gettimeofday, (struct timeval *__restrict __tv, + void *__restrict __tz), + __gettimeofday64) __nonnull ((1)); +# else +# define gettimeofday __gettimeofday64 +# endif +#endif + +#ifdef __USE_MISC +# ifndef __USE_TIME64_REDIRECTS +/* Set the current time of day and timezone information. + This call is restricted to the super-user. + Setting the timezone in this way is obsolete, but we don't yet + warn about it because it still has some uses for which there is + no alternative. */ +extern int settimeofday (const struct timeval *__tv, + const struct timezone *__tz) + __THROW; + +/* Adjust the current time of day by the amount in DELTA. + If OLDDELTA is not NULL, it is filled in with the amount + of time adjustment remaining to be done from the last `adjtime' call. + This call is restricted to the super-user. */ +extern int adjtime (const struct timeval *__delta, + struct timeval *__olddelta) __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (settimeofday, (const struct timeval *__tv, + const struct timezone *__tz), + __settimeofday64); + +extern int __REDIRECT_NTH (adjtime, (const struct timeval *__delta, + struct timeval *__olddelta), + __adjtime64); +# else +# define settimeofday __settimeofday64 +# define adjtime __adjtime64 +# endif +# endif +#endif + + +/* Values for the first argument to `getitimer' and `setitimer'. */ +enum __itimer_which + { + /* Timers run in real time. */ + ITIMER_REAL = 0, +#define ITIMER_REAL ITIMER_REAL + /* Timers run only when the process is executing. */ + ITIMER_VIRTUAL = 1, +#define ITIMER_VIRTUAL ITIMER_VIRTUAL + /* Timers run when the process is executing and when + the system is executing on behalf of the process. */ + ITIMER_PROF = 2 +#define ITIMER_PROF ITIMER_PROF + }; + +/* Type of the second argument to `getitimer' and + the second and third arguments `setitimer'. */ +struct itimerval + { + /* Value to put into `it_value' when the timer expires. */ + struct timeval it_interval; + /* Time to the next timer expiration. */ + struct timeval it_value; + }; + +#if defined __USE_GNU && !defined __cplusplus +/* Use the nicer parameter type only in GNU mode and not for C++ since the + strict C++ rules prevent the automatic promotion. */ +typedef enum __itimer_which __itimer_which_t; +#else +typedef int __itimer_which_t; +#endif + +#ifndef __USE_TIME64_REDIRECTS +/* Set *VALUE to the current setting of timer WHICH. + Return 0 on success, -1 on errors. */ +extern int getitimer (__itimer_which_t __which, + struct itimerval *__value) __THROW; + +/* Set the timer WHICH to *NEW. If OLD is not NULL, + set *OLD to the old value of timer WHICH. + Returns 0 on success, -1 on errors. */ +extern int setitimer (__itimer_which_t __which, + const struct itimerval *__restrict __new, + struct itimerval *__restrict __old) __THROW; + +/* Change the access time of FILE to TVP[0] and the modification time of + FILE to TVP[1]. If TVP is a null pointer, use the current time instead. + Returns 0 on success, -1 on errors. */ +extern int utimes (const char *__file, const struct timeval __tvp[2]) + __THROW __nonnull ((1)); + +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (getitimer, (__itimer_which_t __which, + struct itimerval *__value), + __getitimer64); + +extern int __REDIRECT_NTH (setitimer, (__itimer_which_t __which, + const struct itimerval *__restrict __new, + struct itimerval *__restrict __old), + __setitimer64); + +extern int __REDIRECT_NTH (utimes, (const char *__file, + const struct timeval __tvp[2]), + __utimes64) __nonnull ((1)); +# else +# define getitimer __getitimer64 +# define setitimer __setitimer64 +# define utimes __utimes64 +# endif +#endif + +#ifdef __USE_MISC +# ifndef __USE_TIME64_REDIRECTS +/* Same as `utimes', but does not follow symbolic links. */ +extern int lutimes (const char *__file, const struct timeval __tvp[2]) + __THROW __nonnull ((1)); + +/* Same as `utimes', but takes an open file descriptor instead of a name. */ +extern int futimes (int __fd, const struct timeval __tvp[2]) __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (lutimes, (const char *__file, + const struct timeval __tvp[2]), + __lutimes64) __nonnull ((1)); + +extern int __REDIRECT_NTH (futimes, (int __fd, const struct timeval __tvp[2]), + __futimes64); +# else +# define lutimes __lutimes64 +# define futimes __futimes64 +# endif +# endif +#endif + +#ifdef __USE_GNU +# ifndef __USE_TIME64_REDIRECTS +/* Change the access time of FILE relative to FD to TVP[0] and the + modification time of FILE to TVP[1]. If TVP is a null pointer, use + the current time instead. Returns 0 on success, -1 on errors. */ +extern int futimesat (int __fd, const char *__file, + const struct timeval __tvp[2]) __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (futimesat, (int __fd, const char *__file, + const struct timeval __tvp[2]), + __futimesat64); +# else +# define futimesat __futimesat64 +# endif +# endif +#endif + + +#ifdef __USE_MISC +/* Convenience macros for operations on timevals. + NOTE: `timercmp' does not work for >= or <=. */ +# define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +# define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) +# define timercmp(a, b, CMP) \ + (((a)->tv_sec == (b)->tv_sec) \ + ? ((a)->tv_usec CMP (b)->tv_usec) \ + : ((a)->tv_sec CMP (b)->tv_sec)) +# define timeradd(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \ + if ((result)->tv_usec >= 1000000) \ + { \ + ++(result)->tv_sec; \ + (result)->tv_usec -= 1000000; \ + } \ + } while (0) +# define timersub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ + if ((result)->tv_usec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_usec += 1000000; \ + } \ + } while (0) +#endif /* Misc. */ + +__END_DECLS + +#endif /* sys/time.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/timeb.h b/board/mentalnet/overlay/usr/include/sys/timeb.h new file mode 100644 index 0000000..38e8074 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/timeb.h @@ -0,0 +1,35 @@ +/* Copyright (C) 1994-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_TIMEB_H +#define _SYS_TIMEB_H 1 + +#include + +__BEGIN_DECLS + +# include + +/* Fill in TIMEBUF with information about the current time. */ + +extern int ftime (struct timeb *__timebuf) + __nonnull ((1)) + __attribute_deprecated_msg__ ("Use gettimeofday or clock_gettime instead"); + +__END_DECLS + +#endif /* sys/timeb.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/timerfd.h b/board/mentalnet/overlay/usr/include/sys/timerfd.h new file mode 100644 index 0000000..3c181a7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/timerfd.h @@ -0,0 +1,77 @@ +/* Copyright (C) 2008-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_TIMERFD_H +#define _SYS_TIMERFD_H 1 + +#include +#include + +/* Get the platform-dependent flags. */ +#include + + +/* Bits to be set in the FLAGS parameter of `timerfd_settime'. */ +enum + { + TFD_TIMER_ABSTIME = 1 << 0, +#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME + TFD_TIMER_CANCEL_ON_SET = 1 << 1 +#define TFD_TIMER_CANCEL_ON_SET TFD_TIMER_CANCEL_ON_SET + }; + + +__BEGIN_DECLS + +/* Return file descriptor for new interval timer source. */ +extern int timerfd_create (__clockid_t __clock_id, int __flags) __THROW; + +/* Set next expiration time of interval timer source UFD to UTMR. If + FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is + absolute. Optionally return the old expiration time in OTMR. */ +extern int timerfd_settime (int __ufd, int __flags, + const struct itimerspec *__utmr, + struct itimerspec *__otmr) __THROW; + +#ifdef __USE_TIME64_REDIRECTS +# if defined(__REDIRECT_NTH) +extern int __REDIRECT_NTH (timerfd_settime, + (int __ufd, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue), + __timerfd_settime64); +# else +# define timerfd_settime __timerfd_settime64 +# endif +#endif + +/* Return the next expiration time of UFD. */ +extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW; + +#ifdef __USE_TIME64_REDIRECTS +# if defined(__REDIRECT_NTH) +extern int __REDIRECT_NTH (timerfd_gettime, (int __ufd, + struct itimerspec *__otmr), + __timerfd_gettime64); +# else +# define timerfd_gettime __timerfd_gettime64 +# endif +#endif + +__END_DECLS + +#endif /* sys/timerfd.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/times.h b/board/mentalnet/overlay/usr/include/sys/times.h new file mode 100644 index 0000000..e39aa76 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/times.h @@ -0,0 +1,50 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 4.5.2 Process Times + */ + +#ifndef _SYS_TIMES_H +#define _SYS_TIMES_H 1 + +#include + +#include + +__BEGIN_DECLS + +/* Structure describing CPU time used by a process and its children. */ +struct tms + { + clock_t tms_utime; /* User CPU time. */ + clock_t tms_stime; /* System CPU time. */ + + clock_t tms_cutime; /* User CPU time of dead children. */ + clock_t tms_cstime; /* System CPU time of dead children. */ + }; + + +/* Store the CPU time used by this process and all its + dead children (and their dead children) in BUFFER. + Return the elapsed real time, or (clock_t) -1 for errors. + All times are in CLK_TCKths of a second. */ +extern clock_t times (struct tms *__buffer) __THROW; + +__END_DECLS + +#endif /* sys/times.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/timex.h b/board/mentalnet/overlay/usr/include/sys/timex.h new file mode 100644 index 0000000..db67ca2 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/timex.h @@ -0,0 +1,88 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_TIMEX_H +#define _SYS_TIMEX_H 1 + +#include +#include + +/* These definitions from linux/timex.h as of 2.6.30. */ + +#include + +#define NTP_API 4 /* NTP API version */ + +struct ntptimeval +{ + struct timeval time; /* current time (ro) */ + long int maxerror; /* maximum error (us) (ro) */ + long int esterror; /* estimated error (us) (ro) */ + long int tai; /* TAI offset (ro) */ + + long int __glibc_reserved1; + long int __glibc_reserved2; + long int __glibc_reserved3; + long int __glibc_reserved4; +}; + +/* Clock states (time_state) */ +#define TIME_OK 0 /* clock synchronized, no leap second */ +#define TIME_INS 1 /* insert leap second */ +#define TIME_DEL 2 /* delete leap second */ +#define TIME_OOP 3 /* leap second in progress */ +#define TIME_WAIT 4 /* leap second has occurred */ +#define TIME_ERROR 5 /* clock not synchronized */ +#define TIME_BAD TIME_ERROR /* bw compat */ + +/* Maximum time constant of the PLL. */ +#define MAXTC 6 + +__BEGIN_DECLS + +#ifndef __USE_TIME64_REDIRECTS +extern int adjtimex (struct timex *__ntx) __THROW __nonnull ((1)); +extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW __nonnull ((1)); + +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv), + ntp_gettimex) __nonnull ((1)); +# else +# define ntp_gettime ntp_gettimex +# endif +extern int ntp_adjtime (struct timex *__tntx) __THROW __nonnull ((1)); +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (adjtimex, (struct timex *__ntx), + ___adjtimex64) __nonnull ((1)); +extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv), + __ntp_gettime64) __nonnull ((1)); +extern int __REDIRECT_NTH (ntp_gettimex, (struct ntptimeval *__ntv), + __ntp_gettimex64) __nonnull ((1)); +extern int __REDIRECT_NTH (ntp_adjtime, (struct timex *__ntx), + ___adjtimex64) __nonnull ((1)); +# else +# define adjtimex ___adjtimex64 +# define ntp_adjtime ___adjtimex64 +# define ntp_gettime __ntp_gettime64 +# define ntp_gettimex __ntp_gettimex64 +# endif +#endif + +__END_DECLS + +#endif /* sys/timex.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/ttychars.h b/board/mentalnet/overlay/usr/include/sys/ttychars.h new file mode 100644 index 0000000..7043f60 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/ttychars.h @@ -0,0 +1,61 @@ +/*- + * Copyright (c) 1982, 1986, 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ttychars.h 8.2 (Berkeley) 1/4/94 + */ + +/* + * 4.3 COMPATIBILITY FILE + * + * User visible structures and constants related to terminal handling. + */ +#ifndef _SYS_TTYCHARS_H +#define _SYS_TTYCHARS_H 1 + +struct ttychars { + char tc_erase; /* erase last character */ + char tc_kill; /* erase entire line */ + char tc_intrc; /* interrupt */ + char tc_quitc; /* quit */ + char tc_startc; /* start output */ + char tc_stopc; /* stop output */ + char tc_eofc; /* end-of-file */ + char tc_brkc; /* input delimiter (like nl) */ + char tc_suspc; /* stop process signal */ + char tc_dsuspc; /* delayed stop process signal */ + char tc_rprntc; /* reprint line */ + char tc_flushc; /* flush output (toggles) */ + char tc_werasc; /* word erase */ + char tc_lnextc; /* literal next character */ +}; + +#ifdef __USE_OLD_TTY +#include /* to pick up character defaults */ +#endif + +#endif /* sys/ttychars.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/ttydefaults.h b/board/mentalnet/overlay/usr/include/sys/ttydefaults.h new file mode 100644 index 0000000..9be168b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/ttydefaults.h @@ -0,0 +1,100 @@ +/*- + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ttydefaults.h 8.4 (Berkeley) 1/21/94 + */ + +/* + * System wide defaults for terminal state. Linux version. + */ +#ifndef _SYS_TTYDEFAULTS_H_ +#define _SYS_TTYDEFAULTS_H_ + +/* + * Defaults on "first" open. + */ +#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) +#define TTYDEF_OFLAG (OPOST | ONLCR | XTABS) +#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) +#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) +#define TTYDEF_SPEED (B9600) + +/* + * Control Character Defaults + */ +#define CTRL(x) (x&037) +#define CEOF CTRL('d') +#ifdef _POSIX_VDISABLE +# define CEOL _POSIX_VDISABLE +#else +# define CEOL '\0' /* XXX avoid _POSIX_VDISABLE */ +#endif +#define CERASE 0177 +#define CINTR CTRL('c') +#ifdef _POSIX_VDISABLE +# define CSTATUS _POSIX_VDISABLE +#else +# define CSTATUS '\0' /* XXX avoid _POSIX_VDISABLE */ +#endif +#define CKILL CTRL('u') +#define CMIN 1 +#define CQUIT 034 /* FS, ^\ */ +#define CSUSP CTRL('z') +#define CTIME 0 +#define CDSUSP CTRL('y') +#define CSTART CTRL('q') +#define CSTOP CTRL('s') +#define CLNEXT CTRL('v') +#define CDISCARD CTRL('o') +#define CWERASE CTRL('w') +#define CREPRINT CTRL('r') +#define CEOT CEOF +/* compat */ +#define CBRK CEOL +#define CRPRNT CREPRINT +#define CFLUSH CDISCARD + +/* PROTECTED INCLUSION ENDS HERE */ +#endif /* !_SYS_TTYDEFAULTS_H_ */ + +/* + * #define TTYDEFCHARS to include an array of default control characters. + */ +#ifdef TTYDEFCHARS +cc_t ttydefchars[NCCS] = { + CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT, + _POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT, + CDISCARD, CMIN, CTIME, CSTATUS, _POSIX_VDISABLE +}; +#undef TTYDEFCHARS +#endif diff --git a/board/mentalnet/overlay/usr/include/sys/types.h b/board/mentalnet/overlay/usr/include/sys/types.h new file mode 100644 index 0000000..ab3037a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/types.h @@ -0,0 +1,232 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 2.6 Primitive System Data Types + */ + +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H 1 + +#include + +__BEGIN_DECLS + +#include + +#ifdef __USE_MISC +# ifndef __u_char_defined +typedef __u_char u_char; +typedef __u_short u_short; +typedef __u_int u_int; +typedef __u_long u_long; +typedef __quad_t quad_t; +typedef __u_quad_t u_quad_t; +typedef __fsid_t fsid_t; +# define __u_char_defined +# endif +typedef __loff_t loff_t; +#endif + +#ifndef __ino_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __ino_t ino_t; +# else +typedef __ino64_t ino_t; +# endif +# define __ino_t_defined +#endif +#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined +typedef __ino64_t ino64_t; +# define __ino64_t_defined +#endif + +#ifndef __dev_t_defined +typedef __dev_t dev_t; +# define __dev_t_defined +#endif + +#ifndef __gid_t_defined +typedef __gid_t gid_t; +# define __gid_t_defined +#endif + +#ifndef __mode_t_defined +typedef __mode_t mode_t; +# define __mode_t_defined +#endif + +#ifndef __nlink_t_defined +typedef __nlink_t nlink_t; +# define __nlink_t_defined +#endif + +#ifndef __uid_t_defined +typedef __uid_t uid_t; +# define __uid_t_defined +#endif + +#ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +#endif +#if defined __USE_LARGEFILE64 && !defined __off64_t_defined +typedef __off64_t off64_t; +# define __off64_t_defined +#endif + +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \ + && !defined __id_t_defined +typedef __id_t id_t; +# define __id_t_defined +#endif + +#ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +#endif + +#ifdef __USE_MISC +# ifndef __daddr_t_defined +typedef __daddr_t daddr_t; +typedef __caddr_t caddr_t; +# define __daddr_t_defined +# endif +#endif + +#if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined +typedef __key_t key_t; +# define __key_t_defined +#endif + +#if defined __USE_XOPEN || defined __USE_XOPEN2K8 +# include +#endif +#include +#include +#include + +#ifdef __USE_XOPEN +# ifndef __useconds_t_defined +typedef __useconds_t useconds_t; +# define __useconds_t_defined +# endif +# ifndef __suseconds_t_defined +typedef __suseconds_t suseconds_t; +# define __suseconds_t_defined +# endif +#endif + +#define __need_size_t +#include + +#ifdef __USE_MISC +/* Old compatibility names for C types. */ +typedef unsigned long int ulong; +typedef unsigned short int ushort; +typedef unsigned int uint; +#endif + +/* These size-specific names are used by some of the inet code. */ + +#include + +/* These were defined by ISO C without the first `_'. */ +typedef __uint8_t u_int8_t; +typedef __uint16_t u_int16_t; +typedef __uint32_t u_int32_t; +typedef __uint64_t u_int64_t; + +#if __GNUC_PREREQ (2, 7) +typedef int register_t __attribute__ ((__mode__ (__word__))); +#else +typedef int register_t; +#endif + +/* Some code from BIND tests this macro to see if the types above are + defined. */ +#define __BIT_TYPES_DEFINED__ 1 + + +#ifdef __USE_MISC +/* In BSD is expected to define BYTE_ORDER. */ +# include + +/* It also defines `fd_set' and the FD_* macros for `select'. */ +# include +#endif /* Use misc. */ + + +#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \ + && !defined __blksize_t_defined +typedef __blksize_t blksize_t; +# define __blksize_t_defined +#endif + +/* Types from the Large File Support interface. */ +#ifndef __USE_FILE_OFFSET64 +# ifndef __blkcnt_t_defined +typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */ +# define __blkcnt_t_defined +# endif +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#else +# ifndef __blkcnt_t_defined +typedef __blkcnt64_t blkcnt_t; /* Type to count number of disk blocks. */ +# define __blkcnt_t_defined +# endif +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#endif + +#ifdef __USE_LARGEFILE64 +typedef __blkcnt64_t blkcnt64_t; /* Type to count number of disk blocks. */ +typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks. */ +typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes. */ +#endif + + +/* Now add the thread types. */ +#if defined __USE_POSIX199506 || defined __USE_UNIX98 +# include +#endif + +__END_DECLS + +#endif /* sys/types.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/ucontext.h b/board/mentalnet/overlay/usr/include/sys/ucontext.h new file mode 100644 index 0000000..1ef74a7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/ucontext.h @@ -0,0 +1,262 @@ +/* Copyright (C) 2001-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include + +#include +#include +#include + + +#ifdef __USE_MISC +# define __ctx(fld) fld +#else +# define __ctx(fld) __ ## fld +#endif + +#ifdef __x86_64__ + +/* Type for general register. */ +__extension__ typedef long long int greg_t; + +/* Number of general registers. */ +#define __NGREG 23 +#ifdef __USE_MISC +# define NGREG __NGREG +#endif + +/* Container for all general registers. */ +typedef greg_t gregset_t[__NGREG]; + +#ifdef __USE_GNU +/* Number of each register in the `gregset_t' array. */ +enum +{ + REG_R8 = 0, +# define REG_R8 REG_R8 + REG_R9, +# define REG_R9 REG_R9 + REG_R10, +# define REG_R10 REG_R10 + REG_R11, +# define REG_R11 REG_R11 + REG_R12, +# define REG_R12 REG_R12 + REG_R13, +# define REG_R13 REG_R13 + REG_R14, +# define REG_R14 REG_R14 + REG_R15, +# define REG_R15 REG_R15 + REG_RDI, +# define REG_RDI REG_RDI + REG_RSI, +# define REG_RSI REG_RSI + REG_RBP, +# define REG_RBP REG_RBP + REG_RBX, +# define REG_RBX REG_RBX + REG_RDX, +# define REG_RDX REG_RDX + REG_RAX, +# define REG_RAX REG_RAX + REG_RCX, +# define REG_RCX REG_RCX + REG_RSP, +# define REG_RSP REG_RSP + REG_RIP, +# define REG_RIP REG_RIP + REG_EFL, +# define REG_EFL REG_EFL + REG_CSGSFS, /* Actually short cs, gs, fs, __pad0. */ +# define REG_CSGSFS REG_CSGSFS + REG_ERR, +# define REG_ERR REG_ERR + REG_TRAPNO, +# define REG_TRAPNO REG_TRAPNO + REG_OLDMASK, +# define REG_OLDMASK REG_OLDMASK + REG_CR2 +# define REG_CR2 REG_CR2 +}; +#endif + +struct _libc_fpxreg +{ + unsigned short int __ctx(significand)[4]; + unsigned short int __ctx(exponent); + unsigned short int __glibc_reserved1[3]; +}; + +struct _libc_xmmreg +{ + __uint32_t __ctx(element)[4]; +}; + +struct _libc_fpstate +{ + /* 64-bit FXSAVE format. */ + __uint16_t __ctx(cwd); + __uint16_t __ctx(swd); + __uint16_t __ctx(ftw); + __uint16_t __ctx(fop); + __uint64_t __ctx(rip); + __uint64_t __ctx(rdp); + __uint32_t __ctx(mxcsr); + __uint32_t __ctx(mxcr_mask); + struct _libc_fpxreg _st[8]; + struct _libc_xmmreg _xmm[16]; + __uint32_t __glibc_reserved1[24]; +}; + +/* Structure to describe FPU registers. */ +typedef struct _libc_fpstate *fpregset_t; + +/* Context to describe whole processor state. */ +typedef struct + { + gregset_t __ctx(gregs); + /* Note that fpregs is a pointer. */ + fpregset_t __ctx(fpregs); + __extension__ unsigned long long __reserved1 [8]; +} mcontext_t; + +/* Userlevel context. */ +typedef struct ucontext_t + { + unsigned long int __ctx(uc_flags); + struct ucontext_t *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + struct _libc_fpstate __fpregs_mem; + __extension__ unsigned long long int __ssp[4]; + } ucontext_t; + +#else /* !__x86_64__ */ + +/* Type for general register. */ +typedef int greg_t; + +/* Number of general registers. */ +#define __NGREG 19 +#ifdef __USE_MISC +# define NGREG __NGREG +#endif + +/* Container for all general registers. */ +typedef greg_t gregset_t[__NGREG]; + +#ifdef __USE_GNU +/* Number of each register is the `gregset_t' array. */ +enum +{ + REG_GS = 0, +# define REG_GS REG_GS + REG_FS, +# define REG_FS REG_FS + REG_ES, +# define REG_ES REG_ES + REG_DS, +# define REG_DS REG_DS + REG_EDI, +# define REG_EDI REG_EDI + REG_ESI, +# define REG_ESI REG_ESI + REG_EBP, +# define REG_EBP REG_EBP + REG_ESP, +# define REG_ESP REG_ESP + REG_EBX, +# define REG_EBX REG_EBX + REG_EDX, +# define REG_EDX REG_EDX + REG_ECX, +# define REG_ECX REG_ECX + REG_EAX, +# define REG_EAX REG_EAX + REG_TRAPNO, +# define REG_TRAPNO REG_TRAPNO + REG_ERR, +# define REG_ERR REG_ERR + REG_EIP, +# define REG_EIP REG_EIP + REG_CS, +# define REG_CS REG_CS + REG_EFL, +# define REG_EFL REG_EFL + REG_UESP, +# define REG_UESP REG_UESP + REG_SS +# define REG_SS REG_SS +}; +#endif + +/* Definitions taken from the kernel headers. */ +struct _libc_fpreg +{ + unsigned short int __ctx(significand)[4]; + unsigned short int __ctx(exponent); +}; + +struct _libc_fpstate +{ + unsigned long int __ctx(cw); + unsigned long int __ctx(sw); + unsigned long int __ctx(tag); + unsigned long int __ctx(ipoff); + unsigned long int __ctx(cssel); + unsigned long int __ctx(dataoff); + unsigned long int __ctx(datasel); + struct _libc_fpreg _st[8]; + unsigned long int __ctx(status); +}; + +/* Structure to describe FPU registers. */ +typedef struct _libc_fpstate *fpregset_t; + +/* Context to describe whole processor state. */ +typedef struct + { + gregset_t __ctx(gregs); + /* Due to Linux's history we have to use a pointer here. The SysV/i386 + ABI requires a struct with the values. */ + fpregset_t __ctx(fpregs); + unsigned long int __ctx(oldmask); + unsigned long int __ctx(cr2); + } mcontext_t; + +/* Userlevel context. */ +typedef struct ucontext_t + { + unsigned long int __ctx(uc_flags); + struct ucontext_t *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + struct _libc_fpstate __fpregs_mem; + unsigned long int __ssp[4]; + } ucontext_t; + +#endif /* !__x86_64__ */ + +#undef __ctx + +#endif /* sys/ucontext.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/uio.h b/board/mentalnet/overlay/usr/include/sys/uio.h new file mode 100644 index 0000000..2dc7461 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/uio.h @@ -0,0 +1,182 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_UIO_H +#define _SYS_UIO_H 1 + +#include +#include +#include +#include +#ifdef __IOV_MAX +# define UIO_MAXIOV __IOV_MAX +#else +# undef UIO_MAXIOV +#endif + +__BEGIN_DECLS + +/* Read data from file descriptor FD, and put the result in the + buffers described by IOVEC, which is a vector of COUNT 'struct iovec's. + The buffers are filled in the order specified. + Operates just like 'read' (see ) except that data are + put in IOVEC instead of a contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count) + __wur __attr_access ((__read_only__, 2, 3)); + +/* Write data pointed by the buffers described by IOVEC, which + is a vector of COUNT 'struct iovec's, to file descriptor FD. + The data is written in the order specified. + Operates just like 'write' (see ) except that the data + are taken from IOVEC instead of a contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count) + __wur __attr_access ((__read_only__, 2, 3)); + + +#ifdef __USE_MISC +# ifndef __USE_FILE_OFFSET64 +/* Read data from file descriptor FD at the given position OFFSET + without change the file pointer, and put the result in the buffers + described by IOVEC, which is a vector of COUNT 'struct iovec's. + The buffers are filled in the order specified. Operates just like + 'pread' (see ) except that data are put in IOVEC instead + of a contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count, + __off_t __offset) + __wur __attr_access ((__read_only__, 2, 3)); + +/* Write data pointed by the buffers described by IOVEC, which is a + vector of COUNT 'struct iovec's, to file descriptor FD at the given + position OFFSET without change the file pointer. The data is + written in the order specified. Operates just like 'pwrite' (see + ) except that the data are taken from IOVEC instead of a + contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count, + __off_t __offset) + __wur __attr_access ((__read_only__, 2, 3)); + +# else +# ifdef __REDIRECT +extern ssize_t __REDIRECT (preadv, (int __fd, const struct iovec *__iovec, + int __count, __off64_t __offset), + preadv64) + __wur __attr_access ((__read_only__, 2, 3)); +extern ssize_t __REDIRECT (pwritev, (int __fd, const struct iovec *__iovec, + int __count, __off64_t __offset), + pwritev64) + __wur __attr_access ((__read_only__, 2, 3)); +# else +# define preadv preadv64 +# define pwritev pwritev64 +# endif +# endif + +# ifdef __USE_LARGEFILE64 +/* Read data from file descriptor FD at the given position OFFSET + without change the file pointer, and put the result in the buffers + described by IOVEC, which is a vector of COUNT 'struct iovec's. + The buffers are filled in the order specified. Operates just like + 'pread' (see ) except that data are put in IOVEC instead + of a contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count, + __off64_t __offset) + __wur __attr_access ((__read_only__, 2, 3)); + +/* Write data pointed by the buffers described by IOVEC, which is a + vector of COUNT 'struct iovec's, to file descriptor FD at the given + position OFFSET without change the file pointer. The data is + written in the order specified. Operates just like 'pwrite' (see + ) except that the data are taken from IOVEC instead of a + contiguous buffer. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count, + __off64_t __offset) + __wur __attr_access ((__read_only__, 2, 3)); +# endif +#endif /* Use misc. */ + + +#ifdef __USE_GNU +# ifndef __USE_FILE_OFFSET64 +/* Same as preadv but with an additional flag argumenti defined at uio.h. */ +extern ssize_t preadv2 (int __fp, const struct iovec *__iovec, int __count, + __off_t __offset, int ___flags) + __wur __attr_access ((__read_only__, 2, 3)); + +/* Same as preadv but with an additional flag argument defined at uio.h. */ +extern ssize_t pwritev2 (int __fd, const struct iovec *__iodev, int __count, + __off_t __offset, int __flags) __wur; + +# else +# ifdef __REDIRECT +extern ssize_t __REDIRECT (pwritev2, (int __fd, const struct iovec *__iovec, + int __count, __off64_t __offset, + int __flags), + pwritev64v2) + __wur __attr_access ((__read_only__, 2, 3)); +extern ssize_t __REDIRECT (preadv2, (int __fd, const struct iovec *__iovec, + int __count, __off64_t __offset, + int __flags), + preadv64v2) + __wur __attr_access ((__read_only__, 2, 3)); +# else +# define preadv2 preadv64v2 +# define pwritev2 pwritev64v2 +# endif +# endif + +# ifdef __USE_LARGEFILE64 +/* Same as preadv but with an additional flag argumenti defined at uio.h. */ +extern ssize_t preadv64v2 (int __fp, const struct iovec *__iovec, + int __count, __off64_t __offset, + int ___flags) + __wur __attr_access ((__read_only__, 2, 3)); + +/* Same as preadv but with an additional flag argument defined at uio.h. */ +extern ssize_t pwritev64v2 (int __fd, const struct iovec *__iodev, + int __count, __off64_t __offset, + int __flags) + __wur __attr_access ((__read_only__, 2, 3)); +# endif +#endif /* Use GNU. */ + +__END_DECLS + +/* Some operating systems provide system-specific extensions to this + header. */ +#ifdef __USE_GNU +# include +#endif + +#endif /* sys/uio.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/un.h b/board/mentalnet/overlay/usr/include/sys/un.h new file mode 100644 index 0000000..85a97a8 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/un.h @@ -0,0 +1,47 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_UN_H +#define _SYS_UN_H 1 + +#include + +/* Get the definition of the macro to define the common sockaddr members. */ +#include + +__BEGIN_DECLS + +/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket. */ +struct __attribute_struct_may_alias__ sockaddr_un + { + __SOCKADDR_COMMON (sun_); + char sun_path[108]; /* Path name. */ + }; + + +#ifdef __USE_MISC +# include +# include /* For prototype of `strlen'. */ + +/* Evaluate to actual length of the `sockaddr_un' structure. */ +# define SUN_LEN(ptr) (offsetof (struct sockaddr_un, sun_path) \ + + strlen ((ptr)->sun_path)) +#endif + +__END_DECLS + +#endif /* sys/un.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/unistd.h b/board/mentalnet/overlay/usr/include/sys/unistd.h new file mode 100644 index 0000000..1e823fb --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/unistd.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/user.h b/board/mentalnet/overlay/usr/include/sys/user.h new file mode 100644 index 0000000..780ab1c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/user.h @@ -0,0 +1,180 @@ +/* Copyright (C) 2001-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_USER_H +#define _SYS_USER_H 1 + +/* The whole purpose of this file is for GDB and GDB only. Don't read + too much into it. Don't use it for anything other than GDB unless + you know what you are doing. */ + +#ifdef __x86_64__ + +struct user_fpregs_struct +{ + unsigned short int cwd; + unsigned short int swd; + unsigned short int ftw; + unsigned short int fop; + __extension__ unsigned long long int rip; + __extension__ unsigned long long int rdp; + unsigned int mxcsr; + unsigned int mxcr_mask; + unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ + unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */ + unsigned int padding[24]; +}; + +struct user_regs_struct +{ + __extension__ unsigned long long int r15; + __extension__ unsigned long long int r14; + __extension__ unsigned long long int r13; + __extension__ unsigned long long int r12; + __extension__ unsigned long long int rbp; + __extension__ unsigned long long int rbx; + __extension__ unsigned long long int r11; + __extension__ unsigned long long int r10; + __extension__ unsigned long long int r9; + __extension__ unsigned long long int r8; + __extension__ unsigned long long int rax; + __extension__ unsigned long long int rcx; + __extension__ unsigned long long int rdx; + __extension__ unsigned long long int rsi; + __extension__ unsigned long long int rdi; + __extension__ unsigned long long int orig_rax; + __extension__ unsigned long long int rip; + __extension__ unsigned long long int cs; + __extension__ unsigned long long int eflags; + __extension__ unsigned long long int rsp; + __extension__ unsigned long long int ss; + __extension__ unsigned long long int fs_base; + __extension__ unsigned long long int gs_base; + __extension__ unsigned long long int ds; + __extension__ unsigned long long int es; + __extension__ unsigned long long int fs; + __extension__ unsigned long long int gs; +}; + +struct user +{ + struct user_regs_struct regs; + int u_fpvalid; + struct user_fpregs_struct i387; + __extension__ unsigned long long int u_tsize; + __extension__ unsigned long long int u_dsize; + __extension__ unsigned long long int u_ssize; + __extension__ unsigned long long int start_code; + __extension__ unsigned long long int start_stack; + __extension__ long long int signal; + int reserved; + __extension__ union + { + struct user_regs_struct* u_ar0; + __extension__ unsigned long long int __u_ar0_word; + }; + __extension__ union + { + struct user_fpregs_struct* u_fpstate; + __extension__ unsigned long long int __u_fpstate_word; + }; + __extension__ unsigned long long int magic; + char u_comm [32]; + __extension__ unsigned long long int u_debugreg [8]; +}; + +#else +/* These are the 32-bit x86 structures. */ +struct user_fpregs_struct +{ + long int cwd; + long int swd; + long int twd; + long int fip; + long int fcs; + long int foo; + long int fos; + long int st_space [20]; +}; + +struct user_fpxregs_struct +{ + unsigned short int cwd; + unsigned short int swd; + unsigned short int twd; + unsigned short int fop; + long int fip; + long int fcs; + long int foo; + long int fos; + long int mxcsr; + long int reserved; + long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ + long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ + long int padding[56]; +}; + +struct user_regs_struct +{ + long int ebx; + long int ecx; + long int edx; + long int esi; + long int edi; + long int ebp; + long int eax; + long int xds; + long int xes; + long int xfs; + long int xgs; + long int orig_eax; + long int eip; + long int xcs; + long int eflags; + long int esp; + long int xss; +}; + +struct user +{ + struct user_regs_struct regs; + int u_fpvalid; + struct user_fpregs_struct i387; + unsigned long int u_tsize; + unsigned long int u_dsize; + unsigned long int u_ssize; + unsigned long int start_code; + unsigned long int start_stack; + long int signal; + int reserved; + struct user_regs_struct* u_ar0; + struct user_fpregs_struct* u_fpstate; + unsigned long int magic; + char u_comm [32]; + int u_debugreg [8]; +}; +#endif /* __x86_64__ */ + +#define PAGE_SHIFT 12 +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) +#define NBPG PAGE_SIZE +#define UPAGES 1 +#define HOST_TEXT_START_ADDR (u.start_code) +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) + +#endif /* _SYS_USER_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/utsname.h b/board/mentalnet/overlay/usr/include/sys/utsname.h new file mode 100644 index 0000000..b7b7e68 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/utsname.h @@ -0,0 +1,86 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 4.4 System Identification + */ + +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H 1 + +#include + +__BEGIN_DECLS + +#include + +#ifndef _UTSNAME_SYSNAME_LENGTH +# define _UTSNAME_SYSNAME_LENGTH _UTSNAME_LENGTH +#endif +#ifndef _UTSNAME_NODENAME_LENGTH +# define _UTSNAME_NODENAME_LENGTH _UTSNAME_LENGTH +#endif +#ifndef _UTSNAME_RELEASE_LENGTH +# define _UTSNAME_RELEASE_LENGTH _UTSNAME_LENGTH +#endif +#ifndef _UTSNAME_VERSION_LENGTH +# define _UTSNAME_VERSION_LENGTH _UTSNAME_LENGTH +#endif +#ifndef _UTSNAME_MACHINE_LENGTH +# define _UTSNAME_MACHINE_LENGTH _UTSNAME_LENGTH +#endif + +/* Structure describing the system and machine. */ +struct utsname + { + /* Name of the implementation of the operating system. */ + char sysname[_UTSNAME_SYSNAME_LENGTH]; + + /* Name of this node on the network. */ + char nodename[_UTSNAME_NODENAME_LENGTH]; + + /* Current release level of this implementation. */ + char release[_UTSNAME_RELEASE_LENGTH]; + /* Current version level of this release. */ + char version[_UTSNAME_VERSION_LENGTH]; + + /* Name of the hardware type the system is running on. */ + char machine[_UTSNAME_MACHINE_LENGTH]; + +#if _UTSNAME_DOMAIN_LENGTH - 0 + /* Name of the domain of this node on the network. */ +# ifdef __USE_GNU + char domainname[_UTSNAME_DOMAIN_LENGTH]; +# else + char __domainname[_UTSNAME_DOMAIN_LENGTH]; +# endif +#endif + }; + +#ifdef __USE_MISC +/* Note that SVID assumes all members have the same size. */ +# define SYS_NMLN _UTSNAME_LENGTH +#endif + + +/* Put information about the system in NAME. */ +extern int uname (struct utsname *__name) __THROW; + + +__END_DECLS + +#endif /* sys/utsname.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/vfs.h b/board/mentalnet/overlay/usr/include/sys/vfs.h new file mode 100644 index 0000000..fa22d31 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/vfs.h @@ -0,0 +1,4 @@ +/* Other systems declare `struct statfs' et al in , + so we have this file to be compatible with programs expecting it. */ + +#include diff --git a/board/mentalnet/overlay/usr/include/sys/vlimit.h b/board/mentalnet/overlay/usr/include/sys/vlimit.h new file mode 100644 index 0000000..e131795 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/vlimit.h @@ -0,0 +1,67 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_VLIMIT_H +#define _SYS_VLIMIT_H 1 + +#include + +__BEGIN_DECLS + +/* This interface is obsolete, and is superseded by . */ + +/* Kinds of resource limit. */ +enum __vlimit_resource +{ + /* Setting this non-zero makes it impossible to raise limits. + Only the super-use can set it to zero. + + This is not implemented in recent versions of BSD, nor by + the GNU C library. */ + LIM_NORAISE, + + /* CPU time available for each process (seconds). */ + LIM_CPU, + + /* Largest file which can be created (bytes). */ + LIM_FSIZE, + + /* Maximum size of the data segment (bytes). */ + LIM_DATA, + + /* Maximum size of the stack segment (bytes). */ + LIM_STACK, + + /* Largest core file that will be created (bytes). */ + LIM_CORE, + + /* Resident set size (bytes). */ + LIM_MAXRSS +}; + +/* This means no limit. */ +#define INFINITY 0x7fffffff + + +/* Set the soft limit for RESOURCE to be VALUE. + Returns 0 for success, -1 for failure. */ +extern int vlimit (enum __vlimit_resource __resource, int __value) __THROW; + + +__END_DECLS + +#endif /* sys/vlimit.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/vm86.h b/board/mentalnet/overlay/usr/include/sys/vm86.h new file mode 100644 index 0000000..e5be645 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/vm86.h @@ -0,0 +1,38 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_VM86_H + +#define _SYS_VM86_H 1 +#include + +#ifdef __x86_64__ +# error This header is unsupported on x86-64. +#else +/* Get constants and data types from kernel header file. */ +# include + +__BEGIN_DECLS + +/* Enter virtual 8086 mode. */ +extern int vm86 (unsigned long int __subfunction, + struct vm86plus_struct *__info) __THROW; + +__END_DECLS +# endif + +#endif /* _SYS_VM86_H */ diff --git a/board/mentalnet/overlay/usr/include/sys/vt.h b/board/mentalnet/overlay/usr/include/sys/vt.h new file mode 100644 index 0000000..834abfb --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/vt.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sys/wait.h b/board/mentalnet/overlay/usr/include/sys/wait.h new file mode 100644 index 0000000..b2b153c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/wait.h @@ -0,0 +1,175 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 3.2.1 Wait for Process Termination + */ + +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H 1 + +#include + +__BEGIN_DECLS + +#include +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +# include +#endif + +#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8 +/* Some older standards require the contents of struct rusage to be + defined here. */ +# include +#endif + +/* These macros could also be defined in . */ +#if !defined _STDLIB_H || (!defined __USE_XOPEN && !defined __USE_XOPEN2K8) +/* This will define the `W*' macros for the flag + bits to `waitpid', `wait3', and `wait4'. */ +# include + +/* This will define all the `__W*' macros. */ +# include + +# define WEXITSTATUS(status) __WEXITSTATUS (status) +# define WTERMSIG(status) __WTERMSIG (status) +# define WSTOPSIG(status) __WSTOPSIG (status) +# define WIFEXITED(status) __WIFEXITED (status) +# define WIFSIGNALED(status) __WIFSIGNALED (status) +# define WIFSTOPPED(status) __WIFSTOPPED (status) +# ifdef __WIFCONTINUED +# define WIFCONTINUED(status) __WIFCONTINUED (status) +# endif +#endif /* not included. */ + +#ifdef __USE_MISC +# define WCOREFLAG __WCOREFLAG +# define WCOREDUMP(status) __WCOREDUMP (status) +# define W_EXITCODE(ret, sig) __W_EXITCODE (ret, sig) +# define W_STOPCODE(sig) __W_STOPCODE (sig) +#endif + +/* The following values are used by the `waitid' function. */ +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +# include +#endif + + +/* Wait for a child to die. When one does, put its status in *STAT_LOC + and return its process ID. For errors, return (pid_t) -1. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern __pid_t wait (int *__stat_loc); + +#ifdef __USE_MISC +/* Special values for the PID argument to `waitpid' and `wait4'. */ +# define WAIT_ANY (-1) /* Any process. */ +# define WAIT_MYPGRP 0 /* Any process in my process group. */ +#endif + +/* Wait for a child matching PID to die. + If PID is greater than 0, match any process whose process ID is PID. + If PID is (pid_t) -1, match any process. + If PID is (pid_t) 0, match any process with the + same process group as the current process. + If PID is less than -1, match any process whose + process group is the absolute value of PID. + If the WNOHANG bit is set in OPTIONS, and that child + is not already dead, return (pid_t) 0. If successful, + return PID and store the dead child's status in STAT_LOC. + Return (pid_t) -1 for errors. If the WUNTRACED bit is + set in OPTIONS, return status for stopped children; otherwise don't. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options); + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +# ifndef __id_t_defined +typedef __id_t id_t; +# define __id_t_defined +# endif + +# include + +/* Wait for a childing matching IDTYPE and ID to change the status and + place appropriate information in *INFOP. + If IDTYPE is P_PID, match any process whose process ID is ID. + If IDTYPE is P_PGID, match any process whose process group is ID. + If IDTYPE is P_ALL, match any process. + If the WNOHANG bit is set in OPTIONS, and that child + is not already dead, clear *INFOP and return 0. If successful, store + exit code and status in *INFOP. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int waitid (idtype_t __idtype, __id_t __id, siginfo_t *__infop, + int __options); +#endif + +#if defined __USE_MISC \ + || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) +/* This being here makes the prototypes valid whether or not + we have already included to define `struct rusage'. */ +struct rusage; + +/* Wait for a child to exit. When one does, put its status in *STAT_LOC and + return its process ID. For errors return (pid_t) -1. If USAGE is not + nil, store information about the child's resource usage there. If the + WUNTRACED bit is set in OPTIONS, return status for stopped children; + otherwise don't. */ +# ifndef __USE_TIME64_REDIRECTS +extern __pid_t wait3 (int *__stat_loc, int __options, + struct rusage * __usage) __THROWNL; +# else +# ifdef __REDIRECT_NTHNL +extern __pid_t __REDIRECT_NTHNL (wait3, (int *__stat_loc, int __options, + struct rusage * __usage), + __wait3_time64); +# else +# define wait3 __wait3_time64 +# endif +# endif +#endif + +#ifdef __USE_MISC +# ifndef __USE_TIME64_REDIRECTS +/* PID is like waitpid. Other args are like wait3. */ +extern __pid_t wait4 (__pid_t __pid, int *__stat_loc, int __options, + struct rusage *__usage) __THROWNL; +# else +# ifdef __REDIRECT_NTHNL +extern __pid_t __REDIRECT_NTHNL (wait4, (__pid_t __pid, int *__stat_loc, + int __options, struct rusage *__usage), + __wait4_time64); +# else +# define wait4 __wait4_time64 +# endif +# endif +#endif /* Use misc. */ + + +__END_DECLS + +#endif /* sys/wait.h */ diff --git a/board/mentalnet/overlay/usr/include/sys/xattr.h b/board/mentalnet/overlay/usr/include/sys/xattr.h new file mode 100644 index 0000000..6844ba5 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sys/xattr.h @@ -0,0 +1,109 @@ +/* Copyright (C) 2002-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_XATTR_H +#define _SYS_XATTR_H 1 + +#include +#include + + +__BEGIN_DECLS + +/* The following constants should be used for the fifth parameter of + `*setxattr'. */ +#ifndef __USE_KERNEL_XATTR_DEFS +enum +{ + XATTR_CREATE = 1, /* set value, fail if attr already exists. */ +#define XATTR_CREATE XATTR_CREATE + XATTR_REPLACE = 2 /* set value, fail if attr does not exist. */ +#define XATTR_REPLACE XATTR_REPLACE +}; +#endif + +/* Set the attribute NAME of the file pointed to by PATH to VALUE (which + is SIZE bytes long). Return 0 on success, -1 for errors. */ +extern int setxattr (const char *__path, const char *__name, + const void *__value, size_t __size, int __flags) + __THROW __attr_access ((__read_only__, 3, 4)); + +/* Set the attribute NAME of the file pointed to by PATH to VALUE (which is + SIZE bytes long), not following symlinks for the last pathname component. + Return 0 on success, -1 for errors. */ +extern int lsetxattr (const char *__path, const char *__name, + const void *__value, size_t __size, int __flags) + __THROW __attr_access ((__read_only__, 3, 4)); + +/* Set the attribute NAME of the file descriptor FD to VALUE (which is SIZE + bytes long). Return 0 on success, -1 for errors. */ +extern int fsetxattr (int __fd, const char *__name, const void *__value, + size_t __size, int __flags) + __THROW __attr_access ((__read_only__, 3, 4)); + +/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is + SIZE bytes long). Return 0 on success, -1 for errors. */ +extern ssize_t getxattr (const char *__path, const char *__name, + void *__value, size_t __size) + __THROW __attr_access ((__write_only__, 3, 4)); + +/* Get the attribute NAME of the file pointed to by PATH to VALUE (which is + SIZE bytes long), not following symlinks for the last pathname component. + Return 0 on success, -1 for errors. */ +extern ssize_t lgetxattr (const char *__path, const char *__name, + void *__value, size_t __size) + __THROW __attr_access ((__write_only__, 3, 4)); + +/* Get the attribute NAME of the file descriptor FD to VALUE (which is SIZE + bytes long). Return 0 on success, -1 for errors. */ +extern ssize_t fgetxattr (int __fd, const char *__name, void *__value, + size_t __size) + __THROW __attr_access ((__write_only__, 3, 4)); + +/* List attributes of the file pointed to by PATH into the user-supplied + buffer LIST (which is SIZE bytes big). Return 0 on success, -1 for + errors. */ +extern ssize_t listxattr (const char *__path, char *__list, size_t __size) + __THROW __attr_access ((__write_only__, 2, 3)); + +/* List attributes of the file pointed to by PATH into the user-supplied + buffer LIST (which is SIZE bytes big), not following symlinks for the + last pathname component. Return 0 on success, -1 for errors. */ +extern ssize_t llistxattr (const char *__path, char *__list, size_t __size) + __THROW __attr_access ((__write_only__, 2, 3)); + +/* List attributes of the file descriptor FD into the user-supplied buffer + LIST (which is SIZE bytes big). Return 0 on success, -1 for errors. */ +extern ssize_t flistxattr (int __fd, char *__list, size_t __size) + __THROW __attr_access ((__write_only__, 2, 3)); + +/* Remove the attribute NAME from the file pointed to by PATH. Return 0 + on success, -1 for errors. */ +extern int removexattr (const char *__path, const char *__name) __THROW; + +/* Remove the attribute NAME from the file pointed to by PATH, not + following symlinks for the last pathname component. Return 0 on + success, -1 for errors. */ +extern int lremovexattr (const char *__path, const char *__name) __THROW; + +/* Remove the attribute NAME from the file descriptor FD. Return 0 on + success, -1 for errors. */ +extern int fremovexattr (int __fd, const char *__name) __THROW; + +__END_DECLS + +#endif /* sys/xattr.h */ diff --git a/board/mentalnet/overlay/usr/include/syscall.h b/board/mentalnet/overlay/usr/include/syscall.h new file mode 100644 index 0000000..4c30578 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/syscall.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/sysexits.h b/board/mentalnet/overlay/usr/include/sysexits.h new file mode 100644 index 0000000..37246b6 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/sysexits.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 1987, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)sysexits.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _SYSEXITS_H +#define _SYSEXITS_H 1 + +/* + * SYSEXITS.H -- Exit status codes for system programs. + * + * This include file attempts to categorize possible error + * exit statuses for system programs, notably delivermail + * and the Berkeley network. + * + * Error numbers begin at EX__BASE to reduce the possibility of + * clashing with other exit statuses that random programs may + * already return. The meaning of the codes is approximately + * as follows: + * + * EX_USAGE -- The command was used incorrectly, e.g., with + * the wrong number of arguments, a bad flag, a bad + * syntax in a parameter, or whatever. + * EX_DATAERR -- The input data was incorrect in some way. + * This should only be used for user's data & not + * system files. + * EX_NOINPUT -- An input file (not a system file) did not + * exist or was not readable. This could also include + * errors like "No message" to a mailer (if it cared + * to catch it). + * EX_NOUSER -- The user specified did not exist. This might + * be used for mail addresses or remote logins. + * EX_NOHOST -- The host specified did not exist. This is used + * in mail addresses or network requests. + * EX_UNAVAILABLE -- A service is unavailable. This can occur + * if a support program or file does not exist. This + * can also be used as a catchall message when something + * you wanted to do doesn't work, but you don't know + * why. + * EX_SOFTWARE -- An internal software error has been detected. + * This should be limited to non-operating system related + * errors as possible. + * EX_OSERR -- An operating system error has been detected. + * This is intended to be used for such things as "cannot + * fork", "cannot create pipe", or the like. It includes + * things like getuid returning a user that does not + * exist in the passwd file. + * EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp, + * etc.) does not exist, cannot be opened, or has some + * sort of error (e.g., syntax error). + * EX_CANTCREAT -- A (user specified) output file cannot be + * created. + * EX_IOERR -- An error occurred while doing I/O on some file. + * EX_TEMPFAIL -- temporary failure, indicating something that + * is not really an error. In sendmail, this means + * that a mailer (e.g.) could not create a connection, + * and the request should be reattempted later. + * EX_PROTOCOL -- the remote system returned something that + * was "not possible" during a protocol exchange. + * EX_NOPERM -- You did not have sufficient permission to + * perform the operation. This is not intended for + * file system problems, which should use NOINPUT or + * CANTCREAT, but rather for higher level permissions. + */ + +#define EX_OK 0 /* successful termination */ + +#define EX__BASE 64 /* base value for error messages */ + +#define EX_USAGE 64 /* command line usage error */ +#define EX_DATAERR 65 /* data format error */ +#define EX_NOINPUT 66 /* cannot open input */ +#define EX_NOUSER 67 /* addressee unknown */ +#define EX_NOHOST 68 /* host name unknown */ +#define EX_UNAVAILABLE 69 /* service unavailable */ +#define EX_SOFTWARE 70 /* internal software error */ +#define EX_OSERR 71 /* system error (e.g., can't fork) */ +#define EX_OSFILE 72 /* critical OS file missing */ +#define EX_CANTCREAT 73 /* can't create (user) output file */ +#define EX_IOERR 74 /* input/output error */ +#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ +#define EX_PROTOCOL 76 /* remote error in protocol */ +#define EX_NOPERM 77 /* permission denied */ +#define EX_CONFIG 78 /* configuration error */ + +#define EX__MAX 78 /* maximum listed value */ + +#endif /* sysexits.h */ diff --git a/board/mentalnet/overlay/usr/include/syslog.h b/board/mentalnet/overlay/usr/include/syslog.h new file mode 100644 index 0000000..830b492 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/syslog.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/tar.h b/board/mentalnet/overlay/usr/include/tar.h new file mode 100644 index 0000000..d28473c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/tar.h @@ -0,0 +1,111 @@ +/* Extended tar format from POSIX.1. + Copyright (C) 1992-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _TAR_H +#define _TAR_H 1 + +#include + + +/* A tar archive consists of 512-byte blocks. + Each file in the archive has a header block followed by 0+ data blocks. + Two blocks of NUL bytes indicate the end of the archive. */ + +/* The fields of header blocks: + All strings are stored as ISO 646 (approximately ASCII) strings. + + Fields are numeric unless otherwise noted below; numbers are ISO 646 + representations of octal numbers, with leading zeros as needed. + + linkname is only valid when typeflag==LNKTYPE. It doesn't use prefix; + files that are links to pathnames >100 chars long can not be stored + in a tar archive. + + If typeflag=={LNKTYPE,SYMTYPE,DIRTYPE} then size must be 0. + + devmajor and devminor are only valid for typeflag=={BLKTYPE,CHRTYPE}. + + chksum contains the sum of all 512 bytes in the header block, + treating each byte as an 8-bit unsigned value and treating the + 8 bytes of chksum as blank characters. + + uname and gname are used in preference to uid and gid, if those + names exist locally. + + Field Name Byte Offset Length in Bytes Field Type + name 0 100 NUL-terminated if NUL fits + mode 100 8 + uid 108 8 + gid 116 8 + size 124 12 + mtime 136 12 + chksum 148 8 + typeflag 156 1 see below + linkname 157 100 NUL-terminated if NUL fits + magic 257 6 must be TMAGIC (NUL term.) + version 263 2 must be TVERSION + uname 265 32 NUL-terminated + gname 297 32 NUL-terminated + devmajor 329 8 + devminor 337 8 + prefix 345 155 NUL-terminated if NUL fits + + If the first character of prefix is '\0', the file name is name; + otherwise, it is prefix/name. Files whose pathnames don't fit in that + length can not be stored in a tar archive. */ + +/* The bits in mode: */ +#define TSUID 04000 +#define TSGID 02000 +#if defined __USE_XOPEN || !defined __USE_XOPEN2K +# define TSVTX 01000 +#endif +#define TUREAD 00400 +#define TUWRITE 00200 +#define TUEXEC 00100 +#define TGREAD 00040 +#define TGWRITE 00020 +#define TGEXEC 00010 +#define TOREAD 00004 +#define TOWRITE 00002 +#define TOEXEC 00001 + +/* The values for typeflag: + Values 'A'-'Z' are reserved for custom implementations. + All other values are reserved for future POSIX.1 revisions. */ + +#define REGTYPE '0' /* Regular file (preferred code). */ +#define AREGTYPE '\0' /* Regular file (alternate code). */ +#define LNKTYPE '1' /* Hard link. */ +#define SYMTYPE '2' /* Symbolic link (hard if not supported). */ +#define CHRTYPE '3' /* Character special. */ +#define BLKTYPE '4' /* Block special. */ +#define DIRTYPE '5' /* Directory. */ +#define FIFOTYPE '6' /* Named pipe. */ +#define CONTTYPE '7' /* Contiguous file */ + /* (regular file if not supported). */ + +/* Contents of magic field and its length. */ +#define TMAGIC "ustar" +#define TMAGLEN 6 + +/* Contents of the version field and its length. */ +#define TVERSION "00" +#define TVERSLEN 2 + +#endif /* tar.h */ diff --git a/board/mentalnet/overlay/usr/include/term.h b/board/mentalnet/overlay/usr/include/term.h new file mode 100644 index 0000000..21fb5f9 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/term.h @@ -0,0 +1,871 @@ +/**************************************************************************** + * Copyright 2018-2021,2023 Thomas E. Dickey * + * Copyright 1998-2013,2017 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/****************************************************************************/ +/* Author: Zeyd M. Ben-Halim 1992,1995 */ +/* and: Eric S. Raymond */ +/* and: Thomas E. Dickey 1995-on */ +/****************************************************************************/ + +/* $Id: MKterm.h.awk.in,v 1.85 2023/04/23 19:15:36 tom Exp $ */ + +/* +** term.h -- Definition of struct term +*/ + +#ifndef NCURSES_TERM_H_incl +#define NCURSES_TERM_H_incl 1 + +#undef NCURSES_VERSION +#define NCURSES_VERSION "6.4" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H + * definition (based on the system for which this was configured). + */ + +#ifndef __NCURSES_H + +typedef struct screen SCREEN; + +#if 1 +#undef NCURSES_SP_FUNCS +#define NCURSES_SP_FUNCS 20230603 +#undef NCURSES_SP_NAME +#define NCURSES_SP_NAME(name) name##_sp + +/* Define the sp-funcs helper function */ +#undef NCURSES_SP_OUTC +#define NCURSES_SP_OUTC NCURSES_SP_NAME(NCURSES_OUTC) +typedef int (*NCURSES_SP_OUTC)(SCREEN*, int); +#endif + +#endif /* __NCURSES_H */ + +#undef NCURSES_CONST +#define NCURSES_CONST const + +#undef NCURSES_SBOOL +#define NCURSES_SBOOL char + +#undef NCURSES_USE_DATABASE +#define NCURSES_USE_DATABASE 1 + +#undef NCURSES_USE_TERMCAP +#define NCURSES_USE_TERMCAP 0 + +#undef NCURSES_XNAMES +#define NCURSES_XNAMES 1 + +/* We will use these symbols to hide differences between + * termios/termio/sgttyb interfaces. + */ +#undef TTY +#undef SET_TTY +#undef GET_TTY + +/* Assume POSIX termio if we have the header and function */ +/* #if HAVE_TERMIOS_H && HAVE_TCGETATTR */ +#if 1 && 1 + +#undef TERMIOS +#define TERMIOS 1 + +#include +#define TTY struct termios + +#else /* !HAVE_TERMIOS_H */ + +/* #if HAVE_TERMIO_H */ +#if 1 + +#undef TERMIOS +#define TERMIOS 1 + +#include +#define TTY struct termio + +#else /* !HAVE_TERMIO_H */ + +#if (defined(_WIN32) || defined(_WIN64)) +#if 0 +#include +#define TTY struct winconmode +#else +#include +#define TTY struct termios +#endif +#else +#undef TERMIOS +#include +#include +#define TTY struct sgttyb +#endif /* MINGW32 */ +#endif /* HAVE_TERMIO_H */ + +#endif /* HAVE_TERMIOS_H */ + +#ifdef TERMIOS +#define GET_TTY(fd, buf) tcgetattr(fd, buf) +#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf) +#elif 0 && (defined(_WIN32) || defined(_WIN64)) +#define GET_TTY(fd, buf) _nc_console_getmode(_nc_console_fd2handle(fd),buf) +#define SET_TTY(fd, buf) _nc_console_setmode(_nc_console_fd2handle(fd),buf) +#else +#define GET_TTY(fd, buf) gtty(fd, buf) +#define SET_TTY(fd, buf) stty(fd, buf) +#endif + +#ifndef GCC_NORETURN +#define GCC_NORETURN /* nothing */ +#endif + +#define NAMESIZE 256 + +/* The cast works because TERMTYPE is the first data in TERMINAL */ +#define CUR ((TERMTYPE *)(cur_term))-> + +#define auto_left_margin CUR Booleans[0] +#define auto_right_margin CUR Booleans[1] +#define no_esc_ctlc CUR Booleans[2] +#define ceol_standout_glitch CUR Booleans[3] +#define eat_newline_glitch CUR Booleans[4] +#define erase_overstrike CUR Booleans[5] +#define generic_type CUR Booleans[6] +#define hard_copy CUR Booleans[7] +#define has_meta_key CUR Booleans[8] +#define has_status_line CUR Booleans[9] +#define insert_null_glitch CUR Booleans[10] +#define memory_above CUR Booleans[11] +#define memory_below CUR Booleans[12] +#define move_insert_mode CUR Booleans[13] +#define move_standout_mode CUR Booleans[14] +#define over_strike CUR Booleans[15] +#define status_line_esc_ok CUR Booleans[16] +#define dest_tabs_magic_smso CUR Booleans[17] +#define tilde_glitch CUR Booleans[18] +#define transparent_underline CUR Booleans[19] +#define xon_xoff CUR Booleans[20] +#define needs_xon_xoff CUR Booleans[21] +#define prtr_silent CUR Booleans[22] +#define hard_cursor CUR Booleans[23] +#define non_rev_rmcup CUR Booleans[24] +#define no_pad_char CUR Booleans[25] +#define non_dest_scroll_region CUR Booleans[26] +#define can_change CUR Booleans[27] +#define back_color_erase CUR Booleans[28] +#define hue_lightness_saturation CUR Booleans[29] +#define col_addr_glitch CUR Booleans[30] +#define cr_cancels_micro_mode CUR Booleans[31] +#define has_print_wheel CUR Booleans[32] +#define row_addr_glitch CUR Booleans[33] +#define semi_auto_right_margin CUR Booleans[34] +#define cpi_changes_res CUR Booleans[35] +#define lpi_changes_res CUR Booleans[36] +#define columns CUR Numbers[0] +#define init_tabs CUR Numbers[1] +#define lines CUR Numbers[2] +#define lines_of_memory CUR Numbers[3] +#define magic_cookie_glitch CUR Numbers[4] +#define padding_baud_rate CUR Numbers[5] +#define virtual_terminal CUR Numbers[6] +#define width_status_line CUR Numbers[7] +#define num_labels CUR Numbers[8] +#define label_height CUR Numbers[9] +#define label_width CUR Numbers[10] +#define max_attributes CUR Numbers[11] +#define maximum_windows CUR Numbers[12] +#define max_colors CUR Numbers[13] +#define max_pairs CUR Numbers[14] +#define no_color_video CUR Numbers[15] +#define buffer_capacity CUR Numbers[16] +#define dot_vert_spacing CUR Numbers[17] +#define dot_horz_spacing CUR Numbers[18] +#define max_micro_address CUR Numbers[19] +#define max_micro_jump CUR Numbers[20] +#define micro_col_size CUR Numbers[21] +#define micro_line_size CUR Numbers[22] +#define number_of_pins CUR Numbers[23] +#define output_res_char CUR Numbers[24] +#define output_res_line CUR Numbers[25] +#define output_res_horz_inch CUR Numbers[26] +#define output_res_vert_inch CUR Numbers[27] +#define print_rate CUR Numbers[28] +#define wide_char_size CUR Numbers[29] +#define buttons CUR Numbers[30] +#define bit_image_entwining CUR Numbers[31] +#define bit_image_type CUR Numbers[32] +#define back_tab CUR Strings[0] +#define bell CUR Strings[1] +#define carriage_return CUR Strings[2] +#define change_scroll_region CUR Strings[3] +#define clear_all_tabs CUR Strings[4] +#define clear_screen CUR Strings[5] +#define clr_eol CUR Strings[6] +#define clr_eos CUR Strings[7] +#define column_address CUR Strings[8] +#define command_character CUR Strings[9] +#define cursor_address CUR Strings[10] +#define cursor_down CUR Strings[11] +#define cursor_home CUR Strings[12] +#define cursor_invisible CUR Strings[13] +#define cursor_left CUR Strings[14] +#define cursor_mem_address CUR Strings[15] +#define cursor_normal CUR Strings[16] +#define cursor_right CUR Strings[17] +#define cursor_to_ll CUR Strings[18] +#define cursor_up CUR Strings[19] +#define cursor_visible CUR Strings[20] +#define delete_character CUR Strings[21] +#define delete_line CUR Strings[22] +#define dis_status_line CUR Strings[23] +#define down_half_line CUR Strings[24] +#define enter_alt_charset_mode CUR Strings[25] +#define enter_blink_mode CUR Strings[26] +#define enter_bold_mode CUR Strings[27] +#define enter_ca_mode CUR Strings[28] +#define enter_delete_mode CUR Strings[29] +#define enter_dim_mode CUR Strings[30] +#define enter_insert_mode CUR Strings[31] +#define enter_secure_mode CUR Strings[32] +#define enter_protected_mode CUR Strings[33] +#define enter_reverse_mode CUR Strings[34] +#define enter_standout_mode CUR Strings[35] +#define enter_underline_mode CUR Strings[36] +#define erase_chars CUR Strings[37] +#define exit_alt_charset_mode CUR Strings[38] +#define exit_attribute_mode CUR Strings[39] +#define exit_ca_mode CUR Strings[40] +#define exit_delete_mode CUR Strings[41] +#define exit_insert_mode CUR Strings[42] +#define exit_standout_mode CUR Strings[43] +#define exit_underline_mode CUR Strings[44] +#define flash_screen CUR Strings[45] +#define form_feed CUR Strings[46] +#define from_status_line CUR Strings[47] +#define init_1string CUR Strings[48] +#define init_2string CUR Strings[49] +#define init_3string CUR Strings[50] +#define init_file CUR Strings[51] +#define insert_character CUR Strings[52] +#define insert_line CUR Strings[53] +#define insert_padding CUR Strings[54] +#define key_backspace CUR Strings[55] +#define key_catab CUR Strings[56] +#define key_clear CUR Strings[57] +#define key_ctab CUR Strings[58] +#define key_dc CUR Strings[59] +#define key_dl CUR Strings[60] +#define key_down CUR Strings[61] +#define key_eic CUR Strings[62] +#define key_eol CUR Strings[63] +#define key_eos CUR Strings[64] +#define key_f0 CUR Strings[65] +#define key_f1 CUR Strings[66] +#define key_f10 CUR Strings[67] +#define key_f2 CUR Strings[68] +#define key_f3 CUR Strings[69] +#define key_f4 CUR Strings[70] +#define key_f5 CUR Strings[71] +#define key_f6 CUR Strings[72] +#define key_f7 CUR Strings[73] +#define key_f8 CUR Strings[74] +#define key_f9 CUR Strings[75] +#define key_home CUR Strings[76] +#define key_ic CUR Strings[77] +#define key_il CUR Strings[78] +#define key_left CUR Strings[79] +#define key_ll CUR Strings[80] +#define key_npage CUR Strings[81] +#define key_ppage CUR Strings[82] +#define key_right CUR Strings[83] +#define key_sf CUR Strings[84] +#define key_sr CUR Strings[85] +#define key_stab CUR Strings[86] +#define key_up CUR Strings[87] +#define keypad_local CUR Strings[88] +#define keypad_xmit CUR Strings[89] +#define lab_f0 CUR Strings[90] +#define lab_f1 CUR Strings[91] +#define lab_f10 CUR Strings[92] +#define lab_f2 CUR Strings[93] +#define lab_f3 CUR Strings[94] +#define lab_f4 CUR Strings[95] +#define lab_f5 CUR Strings[96] +#define lab_f6 CUR Strings[97] +#define lab_f7 CUR Strings[98] +#define lab_f8 CUR Strings[99] +#define lab_f9 CUR Strings[100] +#define meta_off CUR Strings[101] +#define meta_on CUR Strings[102] +#define newline CUR Strings[103] +#define pad_char CUR Strings[104] +#define parm_dch CUR Strings[105] +#define parm_delete_line CUR Strings[106] +#define parm_down_cursor CUR Strings[107] +#define parm_ich CUR Strings[108] +#define parm_index CUR Strings[109] +#define parm_insert_line CUR Strings[110] +#define parm_left_cursor CUR Strings[111] +#define parm_right_cursor CUR Strings[112] +#define parm_rindex CUR Strings[113] +#define parm_up_cursor CUR Strings[114] +#define pkey_key CUR Strings[115] +#define pkey_local CUR Strings[116] +#define pkey_xmit CUR Strings[117] +#define print_screen CUR Strings[118] +#define prtr_off CUR Strings[119] +#define prtr_on CUR Strings[120] +#define repeat_char CUR Strings[121] +#define reset_1string CUR Strings[122] +#define reset_2string CUR Strings[123] +#define reset_3string CUR Strings[124] +#define reset_file CUR Strings[125] +#define restore_cursor CUR Strings[126] +#define row_address CUR Strings[127] +#define save_cursor CUR Strings[128] +#define scroll_forward CUR Strings[129] +#define scroll_reverse CUR Strings[130] +#define set_attributes CUR Strings[131] +#define set_tab CUR Strings[132] +#define set_window CUR Strings[133] +#define tab CUR Strings[134] +#define to_status_line CUR Strings[135] +#define underline_char CUR Strings[136] +#define up_half_line CUR Strings[137] +#define init_prog CUR Strings[138] +#define key_a1 CUR Strings[139] +#define key_a3 CUR Strings[140] +#define key_b2 CUR Strings[141] +#define key_c1 CUR Strings[142] +#define key_c3 CUR Strings[143] +#define prtr_non CUR Strings[144] +#define char_padding CUR Strings[145] +#define acs_chars CUR Strings[146] +#define plab_norm CUR Strings[147] +#define key_btab CUR Strings[148] +#define enter_xon_mode CUR Strings[149] +#define exit_xon_mode CUR Strings[150] +#define enter_am_mode CUR Strings[151] +#define exit_am_mode CUR Strings[152] +#define xon_character CUR Strings[153] +#define xoff_character CUR Strings[154] +#define ena_acs CUR Strings[155] +#define label_on CUR Strings[156] +#define label_off CUR Strings[157] +#define key_beg CUR Strings[158] +#define key_cancel CUR Strings[159] +#define key_close CUR Strings[160] +#define key_command CUR Strings[161] +#define key_copy CUR Strings[162] +#define key_create CUR Strings[163] +#define key_end CUR Strings[164] +#define key_enter CUR Strings[165] +#define key_exit CUR Strings[166] +#define key_find CUR Strings[167] +#define key_help CUR Strings[168] +#define key_mark CUR Strings[169] +#define key_message CUR Strings[170] +#define key_move CUR Strings[171] +#define key_next CUR Strings[172] +#define key_open CUR Strings[173] +#define key_options CUR Strings[174] +#define key_previous CUR Strings[175] +#define key_print CUR Strings[176] +#define key_redo CUR Strings[177] +#define key_reference CUR Strings[178] +#define key_refresh CUR Strings[179] +#define key_replace CUR Strings[180] +#define key_restart CUR Strings[181] +#define key_resume CUR Strings[182] +#define key_save CUR Strings[183] +#define key_suspend CUR Strings[184] +#define key_undo CUR Strings[185] +#define key_sbeg CUR Strings[186] +#define key_scancel CUR Strings[187] +#define key_scommand CUR Strings[188] +#define key_scopy CUR Strings[189] +#define key_screate CUR Strings[190] +#define key_sdc CUR Strings[191] +#define key_sdl CUR Strings[192] +#define key_select CUR Strings[193] +#define key_send CUR Strings[194] +#define key_seol CUR Strings[195] +#define key_sexit CUR Strings[196] +#define key_sfind CUR Strings[197] +#define key_shelp CUR Strings[198] +#define key_shome CUR Strings[199] +#define key_sic CUR Strings[200] +#define key_sleft CUR Strings[201] +#define key_smessage CUR Strings[202] +#define key_smove CUR Strings[203] +#define key_snext CUR Strings[204] +#define key_soptions CUR Strings[205] +#define key_sprevious CUR Strings[206] +#define key_sprint CUR Strings[207] +#define key_sredo CUR Strings[208] +#define key_sreplace CUR Strings[209] +#define key_sright CUR Strings[210] +#define key_srsume CUR Strings[211] +#define key_ssave CUR Strings[212] +#define key_ssuspend CUR Strings[213] +#define key_sundo CUR Strings[214] +#define req_for_input CUR Strings[215] +#define key_f11 CUR Strings[216] +#define key_f12 CUR Strings[217] +#define key_f13 CUR Strings[218] +#define key_f14 CUR Strings[219] +#define key_f15 CUR Strings[220] +#define key_f16 CUR Strings[221] +#define key_f17 CUR Strings[222] +#define key_f18 CUR Strings[223] +#define key_f19 CUR Strings[224] +#define key_f20 CUR Strings[225] +#define key_f21 CUR Strings[226] +#define key_f22 CUR Strings[227] +#define key_f23 CUR Strings[228] +#define key_f24 CUR Strings[229] +#define key_f25 CUR Strings[230] +#define key_f26 CUR Strings[231] +#define key_f27 CUR Strings[232] +#define key_f28 CUR Strings[233] +#define key_f29 CUR Strings[234] +#define key_f30 CUR Strings[235] +#define key_f31 CUR Strings[236] +#define key_f32 CUR Strings[237] +#define key_f33 CUR Strings[238] +#define key_f34 CUR Strings[239] +#define key_f35 CUR Strings[240] +#define key_f36 CUR Strings[241] +#define key_f37 CUR Strings[242] +#define key_f38 CUR Strings[243] +#define key_f39 CUR Strings[244] +#define key_f40 CUR Strings[245] +#define key_f41 CUR Strings[246] +#define key_f42 CUR Strings[247] +#define key_f43 CUR Strings[248] +#define key_f44 CUR Strings[249] +#define key_f45 CUR Strings[250] +#define key_f46 CUR Strings[251] +#define key_f47 CUR Strings[252] +#define key_f48 CUR Strings[253] +#define key_f49 CUR Strings[254] +#define key_f50 CUR Strings[255] +#define key_f51 CUR Strings[256] +#define key_f52 CUR Strings[257] +#define key_f53 CUR Strings[258] +#define key_f54 CUR Strings[259] +#define key_f55 CUR Strings[260] +#define key_f56 CUR Strings[261] +#define key_f57 CUR Strings[262] +#define key_f58 CUR Strings[263] +#define key_f59 CUR Strings[264] +#define key_f60 CUR Strings[265] +#define key_f61 CUR Strings[266] +#define key_f62 CUR Strings[267] +#define key_f63 CUR Strings[268] +#define clr_bol CUR Strings[269] +#define clear_margins CUR Strings[270] +#define set_left_margin CUR Strings[271] +#define set_right_margin CUR Strings[272] +#define label_format CUR Strings[273] +#define set_clock CUR Strings[274] +#define display_clock CUR Strings[275] +#define remove_clock CUR Strings[276] +#define create_window CUR Strings[277] +#define goto_window CUR Strings[278] +#define hangup CUR Strings[279] +#define dial_phone CUR Strings[280] +#define quick_dial CUR Strings[281] +#define tone CUR Strings[282] +#define pulse CUR Strings[283] +#define flash_hook CUR Strings[284] +#define fixed_pause CUR Strings[285] +#define wait_tone CUR Strings[286] +#define user0 CUR Strings[287] +#define user1 CUR Strings[288] +#define user2 CUR Strings[289] +#define user3 CUR Strings[290] +#define user4 CUR Strings[291] +#define user5 CUR Strings[292] +#define user6 CUR Strings[293] +#define user7 CUR Strings[294] +#define user8 CUR Strings[295] +#define user9 CUR Strings[296] +#define orig_pair CUR Strings[297] +#define orig_colors CUR Strings[298] +#define initialize_color CUR Strings[299] +#define initialize_pair CUR Strings[300] +#define set_color_pair CUR Strings[301] +#define set_foreground CUR Strings[302] +#define set_background CUR Strings[303] +#define change_char_pitch CUR Strings[304] +#define change_line_pitch CUR Strings[305] +#define change_res_horz CUR Strings[306] +#define change_res_vert CUR Strings[307] +#define define_char CUR Strings[308] +#define enter_doublewide_mode CUR Strings[309] +#define enter_draft_quality CUR Strings[310] +#define enter_italics_mode CUR Strings[311] +#define enter_leftward_mode CUR Strings[312] +#define enter_micro_mode CUR Strings[313] +#define enter_near_letter_quality CUR Strings[314] +#define enter_normal_quality CUR Strings[315] +#define enter_shadow_mode CUR Strings[316] +#define enter_subscript_mode CUR Strings[317] +#define enter_superscript_mode CUR Strings[318] +#define enter_upward_mode CUR Strings[319] +#define exit_doublewide_mode CUR Strings[320] +#define exit_italics_mode CUR Strings[321] +#define exit_leftward_mode CUR Strings[322] +#define exit_micro_mode CUR Strings[323] +#define exit_shadow_mode CUR Strings[324] +#define exit_subscript_mode CUR Strings[325] +#define exit_superscript_mode CUR Strings[326] +#define exit_upward_mode CUR Strings[327] +#define micro_column_address CUR Strings[328] +#define micro_down CUR Strings[329] +#define micro_left CUR Strings[330] +#define micro_right CUR Strings[331] +#define micro_row_address CUR Strings[332] +#define micro_up CUR Strings[333] +#define order_of_pins CUR Strings[334] +#define parm_down_micro CUR Strings[335] +#define parm_left_micro CUR Strings[336] +#define parm_right_micro CUR Strings[337] +#define parm_up_micro CUR Strings[338] +#define select_char_set CUR Strings[339] +#define set_bottom_margin CUR Strings[340] +#define set_bottom_margin_parm CUR Strings[341] +#define set_left_margin_parm CUR Strings[342] +#define set_right_margin_parm CUR Strings[343] +#define set_top_margin CUR Strings[344] +#define set_top_margin_parm CUR Strings[345] +#define start_bit_image CUR Strings[346] +#define start_char_set_def CUR Strings[347] +#define stop_bit_image CUR Strings[348] +#define stop_char_set_def CUR Strings[349] +#define subscript_characters CUR Strings[350] +#define superscript_characters CUR Strings[351] +#define these_cause_cr CUR Strings[352] +#define zero_motion CUR Strings[353] +#define char_set_names CUR Strings[354] +#define key_mouse CUR Strings[355] +#define mouse_info CUR Strings[356] +#define req_mouse_pos CUR Strings[357] +#define get_mouse CUR Strings[358] +#define set_a_foreground CUR Strings[359] +#define set_a_background CUR Strings[360] +#define pkey_plab CUR Strings[361] +#define device_type CUR Strings[362] +#define code_set_init CUR Strings[363] +#define set0_des_seq CUR Strings[364] +#define set1_des_seq CUR Strings[365] +#define set2_des_seq CUR Strings[366] +#define set3_des_seq CUR Strings[367] +#define set_lr_margin CUR Strings[368] +#define set_tb_margin CUR Strings[369] +#define bit_image_repeat CUR Strings[370] +#define bit_image_newline CUR Strings[371] +#define bit_image_carriage_return CUR Strings[372] +#define color_names CUR Strings[373] +#define define_bit_image_region CUR Strings[374] +#define end_bit_image_region CUR Strings[375] +#define set_color_band CUR Strings[376] +#define set_page_length CUR Strings[377] +#define display_pc_char CUR Strings[378] +#define enter_pc_charset_mode CUR Strings[379] +#define exit_pc_charset_mode CUR Strings[380] +#define enter_scancode_mode CUR Strings[381] +#define exit_scancode_mode CUR Strings[382] +#define pc_term_options CUR Strings[383] +#define scancode_escape CUR Strings[384] +#define alt_scancode_esc CUR Strings[385] +#define enter_horizontal_hl_mode CUR Strings[386] +#define enter_left_hl_mode CUR Strings[387] +#define enter_low_hl_mode CUR Strings[388] +#define enter_right_hl_mode CUR Strings[389] +#define enter_top_hl_mode CUR Strings[390] +#define enter_vertical_hl_mode CUR Strings[391] +#define set_a_attributes CUR Strings[392] +#define set_pglen_inch CUR Strings[393] + +#define BOOLWRITE 37 +#define NUMWRITE 33 +#define STRWRITE 394 + +/* older synonyms for some capabilities */ +#define beehive_glitch no_esc_ctlc +#define teleray_glitch dest_tabs_magic_smso + +/* HPUX-11 uses this name rather than the standard one */ +#ifndef micro_char_size +#define micro_char_size micro_col_size +#endif + +#ifdef __INTERNAL_CAPS_VISIBLE +#define termcap_init2 CUR Strings[394] +#define termcap_reset CUR Strings[395] +#define magic_cookie_glitch_ul CUR Numbers[33] +#define backspaces_with_bs CUR Booleans[37] +#define crt_no_scrolling CUR Booleans[38] +#define no_correctly_working_cr CUR Booleans[39] +#define carriage_return_delay CUR Numbers[34] +#define new_line_delay CUR Numbers[35] +#define linefeed_if_not_lf CUR Strings[396] +#define backspace_if_not_bs CUR Strings[397] +#define gnu_has_meta_key CUR Booleans[40] +#define linefeed_is_newline CUR Booleans[41] +#define backspace_delay CUR Numbers[36] +#define horizontal_tab_delay CUR Numbers[37] +#define number_of_function_keys CUR Numbers[38] +#define other_non_function_keys CUR Strings[398] +#define arrow_key_map CUR Strings[399] +#define has_hardware_tabs CUR Booleans[42] +#define return_does_clr_eol CUR Booleans[43] +#define acs_ulcorner CUR Strings[400] +#define acs_llcorner CUR Strings[401] +#define acs_urcorner CUR Strings[402] +#define acs_lrcorner CUR Strings[403] +#define acs_ltee CUR Strings[404] +#define acs_rtee CUR Strings[405] +#define acs_btee CUR Strings[406] +#define acs_ttee CUR Strings[407] +#define acs_hline CUR Strings[408] +#define acs_vline CUR Strings[409] +#define acs_plus CUR Strings[410] +#define memory_lock CUR Strings[411] +#define memory_unlock CUR Strings[412] +#define box_chars_1 CUR Strings[413] +#endif /* __INTERNAL_CAPS_VISIBLE */ + + +/* + * Predefined terminfo array sizes + */ +#define BOOLCOUNT 44 +#define NUMCOUNT 39 +#define STRCOUNT 414 + +/* used by code for comparing entries */ +#define acs_chars_index 146 + +typedef struct termtype { /* in-core form of terminfo data */ + char *term_names; /* str_table offset of term names */ + char *str_table; /* pointer to string table */ + NCURSES_SBOOL *Booleans; /* array of boolean values */ + short *Numbers; /* array of integer values */ + char **Strings; /* array of string offsets */ + +#if NCURSES_XNAMES + char *ext_str_table; /* pointer to extended string table */ + char **ext_Names; /* corresponding names */ + + unsigned short num_Booleans;/* count total Booleans */ + unsigned short num_Numbers; /* count total Numbers */ + unsigned short num_Strings; /* count total Strings */ + + unsigned short ext_Booleans;/* count extensions to Booleans */ + unsigned short ext_Numbers; /* count extensions to Numbers */ + unsigned short ext_Strings; /* count extensions to Strings */ +#endif /* NCURSES_XNAMES */ + +} TERMTYPE; + +/* + * The only reason these structures are visible is for read-only use. + * Programs which modify the data are not, never were, portable across + * curses implementations. + * + * The first field in TERMINAL is used in macros. + * The remaining fields are private. + */ +#ifdef NCURSES_INTERNALS + +#undef TERMINAL +#define TERMINAL struct term +TERMINAL; + +#undef TERMTYPE2 +#define TERMTYPE2 TERMTYPE +#else + +typedef struct term { /* describe an actual terminal */ + TERMTYPE type; /* terminal type description */ +} TERMINAL; + +#endif /* NCURSES_INTERNALS */ + + +#if 0 && !0 +extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term; +#elif 0 +NCURSES_WRAPPED_VAR(TERMINAL *, cur_term); +#define cur_term NCURSES_PUBLIC_VAR(cur_term()) +#else +extern NCURSES_EXPORT_VAR(TERMINAL *) cur_term; +#endif + +#if 0 || 0 +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolnames); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolcodes); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, boolfnames); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numnames); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numcodes); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, numfnames); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strnames); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strcodes); +NCURSES_WRAPPED_VAR(NCURSES_CONST char * const *, strfnames); + +#define boolnames NCURSES_PUBLIC_VAR(boolnames()) +#define boolcodes NCURSES_PUBLIC_VAR(boolcodes()) +#define boolfnames NCURSES_PUBLIC_VAR(boolfnames()) +#define numnames NCURSES_PUBLIC_VAR(numnames()) +#define numcodes NCURSES_PUBLIC_VAR(numcodes()) +#define numfnames NCURSES_PUBLIC_VAR(numfnames()) +#define strnames NCURSES_PUBLIC_VAR(strnames()) +#define strcodes NCURSES_PUBLIC_VAR(strcodes()) +#define strfnames NCURSES_PUBLIC_VAR(strfnames()) + +#else + +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolnames[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolcodes[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) boolfnames[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numnames[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numcodes[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) numfnames[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strnames[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strcodes[]; +extern NCURSES_EXPORT_VAR(NCURSES_CONST char * const ) strfnames[]; + +#endif + +/* + * These entrypoints are used only by the ncurses utilities such as tic. + */ +#ifdef NCURSES_INTERNALS + +extern NCURSES_EXPORT(int) _nc_set_tty_mode (TTY *buf); +extern NCURSES_EXPORT(int) _nc_read_entry2 (const char * const, char * const, TERMTYPE2 *const); +extern NCURSES_EXPORT(int) _nc_read_file_entry (const char *const, TERMTYPE2 *); +extern NCURSES_EXPORT(int) _nc_read_termtype (TERMTYPE2 *, char *, int); +extern NCURSES_EXPORT(char *) _nc_first_name (const char *const); +extern NCURSES_EXPORT(int) _nc_name_match (const char *const, const char *const, const char *const); +extern NCURSES_EXPORT(char *) _nc_tiparm(int, const char *, ...); +extern NCURSES_EXPORT(const TERMTYPE *) _nc_fallback (const char *); +extern NCURSES_EXPORT(int) _nc_read_entry (const char * const, char * const, TERMTYPE *const); + +#endif /* NCURSES_INTERNALS */ + +/* + * Normal entry points + */ +extern NCURSES_EXPORT(TERMINAL *) set_curterm (TERMINAL *); +extern NCURSES_EXPORT(int) del_curterm (TERMINAL *); + +/* miscellaneous entry points */ +extern NCURSES_EXPORT(int) restartterm (NCURSES_CONST char *, int, int *); +extern NCURSES_EXPORT(int) setupterm (const char *,int,int *); + +/* terminfo entry points, also declared in curses.h */ +#if !defined(__NCURSES_H) +extern NCURSES_EXPORT(char *) tigetstr (const char *); +extern NCURSES_EXPORT_VAR(char) ttytype[]; +extern NCURSES_EXPORT(int) putp (const char *); +extern NCURSES_EXPORT(int) tigetflag (const char *); +extern NCURSES_EXPORT(int) tigetnum (const char *); + +#if 1 /* NCURSES_TPARM_VARARGS */ +extern NCURSES_EXPORT(char *) tparm (const char *, ...); /* special */ +#else +extern NCURSES_EXPORT(char *) tparm (const char *, long,long,long,long,long,long,long,long,long); /* special */ +#endif + +extern NCURSES_EXPORT(char *) tiparm (const char *, ...); /* special */ +extern NCURSES_EXPORT(char *) tiparm_s (int, int, const char *, ...); /* special */ +extern NCURSES_EXPORT(int) tiscan_s (int *, int *, const char *); /* special */ + +#endif /* __NCURSES_H */ + +/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */ +#if !defined(NCURSES_TERMCAP_H_incl) +extern NCURSES_EXPORT(char *) tgetstr (const char *, char **); +extern NCURSES_EXPORT(char *) tgoto (const char *, int, int); +extern NCURSES_EXPORT(int) tgetent (char *, const char *); +extern NCURSES_EXPORT(int) tgetflag (const char *); +extern NCURSES_EXPORT(int) tgetnum (const char *); +extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int)); +#endif /* NCURSES_TERMCAP_H_incl */ + +/* + * Include curses.h before term.h to enable these extensions. + */ +#if defined(NCURSES_SP_FUNCS) && (NCURSES_SP_FUNCS != 0) + +extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tigetstr) (SCREEN*, const char *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(putp) (SCREEN*, const char *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetflag) (SCREEN*, const char *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tigetnum) (SCREEN*, const char *); + +#if 1 /* NCURSES_TPARM_VARARGS */ +extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm) (SCREEN*, const char *, ...); /* special */ +#else +extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tparm) (SCREEN*, const char *, long,long,long,long,long,long,long,long,long); /* special */ +#endif + +/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */ +extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgetstr) (SCREEN*, const char *, char **); +extern NCURSES_EXPORT(char *) NCURSES_SP_NAME(tgoto) (SCREEN*, const char *, int, int); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetent) (SCREEN*, char *, const char *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetflag) (SCREEN*, const char *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tgetnum) (SCREEN*, const char *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(tputs) (SCREEN*, const char *, int, NCURSES_SP_OUTC); + +extern NCURSES_EXPORT(TERMINAL *) NCURSES_SP_NAME(set_curterm) (SCREEN*, TERMINAL *); +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(del_curterm) (SCREEN*, TERMINAL *); + +extern NCURSES_EXPORT(int) NCURSES_SP_NAME(restartterm) (SCREEN*, NCURSES_CONST char *, int, int *); +#endif /* NCURSES_SP_FUNCS */ + +/* + * Debugging features. + */ +extern GCC_NORETURN NCURSES_EXPORT(void) exit_terminfo(int); + +#ifdef __cplusplus +} +#endif + +#endif /* NCURSES_TERM_H_incl */ diff --git a/board/mentalnet/overlay/usr/include/termcap.h b/board/mentalnet/overlay/usr/include/termcap.h new file mode 100644 index 0000000..12ba54a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/termcap.h @@ -0,0 +1,73 @@ +/**************************************************************************** + * Copyright 2018-2020,2021 Thomas E. Dickey * + * Copyright 1998-2000,2001 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Zeyd M. Ben-Halim 1992,1995 * + * and: Eric S. Raymond * + ****************************************************************************/ + +/* $Id: termcap.h.in,v 1.20 2021/06/17 21:26:02 tom Exp $ */ + +#ifndef NCURSES_TERMCAP_H_incl +#define NCURSES_TERMCAP_H_incl 1 + +#undef NCURSES_VERSION +#define NCURSES_VERSION "6.4" + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include + +#undef NCURSES_OSPEED +#define NCURSES_OSPEED short + +extern NCURSES_EXPORT_VAR(char) PC; +extern NCURSES_EXPORT_VAR(char *) UP; +extern NCURSES_EXPORT_VAR(char *) BC; +extern NCURSES_EXPORT_VAR(NCURSES_OSPEED) ospeed; + +#if !defined(NCURSES_TERM_H_incl) +extern NCURSES_EXPORT(char *) tgetstr (const char *, char **); +extern NCURSES_EXPORT(char *) tgoto (const char *, int, int); +extern NCURSES_EXPORT(int) tgetent (char *, const char *); +extern NCURSES_EXPORT(int) tgetflag (const char *); +extern NCURSES_EXPORT(int) tgetnum (const char *); +extern NCURSES_EXPORT(int) tputs (const char *, int, int (*)(int)); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* NCURSES_TERMCAP_H_incl */ diff --git a/board/mentalnet/overlay/usr/include/termio.h b/board/mentalnet/overlay/usr/include/termio.h new file mode 100644 index 0000000..0e610f0 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/termio.h @@ -0,0 +1,6 @@ +/* Compatible for old `struct termio' ioctl interface. + This is obsolete; use the POSIX.1 `struct termios' interface + defined in instead. */ + +#include +#include diff --git a/board/mentalnet/overlay/usr/include/termios.h b/board/mentalnet/overlay/usr/include/termios.h new file mode 100644 index 0000000..1755c50 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/termios.h @@ -0,0 +1,109 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 7.1-2 General Terminal Interface + */ + +#ifndef _TERMIOS_H +#define _TERMIOS_H 1 + +#include +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* We need `pid_t'. */ +# include +# ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +# endif +#endif + +__BEGIN_DECLS + +/* Get the system-dependent definitions of `struct termios', `tcflag_t', + `cc_t', `speed_t', and all the macros specifying the flag bits. */ +#include + +#ifdef __USE_MISC +/* Compare a character C to a value VAL from the `c_cc' array in a + `struct termios'. If VAL is _POSIX_VDISABLE, no character can match it. */ +# define CCEQ(val, c) ((c) == (val) && (val) != _POSIX_VDISABLE) +#endif + +/* Return the output baud rate stored in *TERMIOS_P. */ +extern speed_t cfgetospeed (const struct termios *__termios_p) __THROW; + +/* Return the input baud rate stored in *TERMIOS_P. */ +extern speed_t cfgetispeed (const struct termios *__termios_p) __THROW; + +/* Set the output baud rate stored in *TERMIOS_P to SPEED. */ +extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __THROW; + +/* Set the input baud rate stored in *TERMIOS_P to SPEED. */ +extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __THROW; + +#ifdef __USE_MISC +/* Set both the input and output baud rates in *TERMIOS_OP to SPEED. */ +extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __THROW; +#endif + + +/* Put the state of FD into *TERMIOS_P. */ +extern int tcgetattr (int __fd, struct termios *__termios_p) __THROW; + +/* Set the state of FD to *TERMIOS_P. + Values for OPTIONAL_ACTIONS (TCSA*) are in . */ +extern int tcsetattr (int __fd, int __optional_actions, + const struct termios *__termios_p) __THROW; + + +#ifdef __USE_MISC +/* Set *TERMIOS_P to indicate raw mode. */ +extern void cfmakeraw (struct termios *__termios_p) __THROW; +#endif + +/* Send zero bits on FD. */ +extern int tcsendbreak (int __fd, int __duration) __THROW; + +/* Wait for pending output to be written on FD. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int tcdrain (int __fd); + +/* Flush pending data on FD. + Values for QUEUE_SELECTOR (TC{I,O,IO}FLUSH) are in . */ +extern int tcflush (int __fd, int __queue_selector) __THROW; + +/* Suspend or restart transmission on FD. + Values for ACTION (TC[IO]{OFF,ON}) are in . */ +extern int tcflow (int __fd, int __action) __THROW; + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Get process group ID for session leader for controlling terminal FD. */ +extern __pid_t tcgetsid (int __fd) __THROW; +#endif + + +#ifdef __USE_MISC +# include +#endif + +__END_DECLS + +#endif /* termios.h */ diff --git a/board/mentalnet/overlay/usr/include/tgmath.h b/board/mentalnet/overlay/usr/include/tgmath.h new file mode 100644 index 0000000..e8e168b --- /dev/null +++ b/board/mentalnet/overlay/usr/include/tgmath.h @@ -0,0 +1,1203 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.22 Type-generic math + */ + +#ifndef _TGMATH_H +#define _TGMATH_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +/* Include the needed headers. */ +#include +#include +#include + + +/* There are two variant implementations of type-generic macros in + this file: one for GCC 8 and later, using __builtin_tgmath and + where each macro expands each of its arguments only once, and one + for older GCC, using other compiler extensions but with macros + expanding their arguments many times (so resulting in exponential + blowup of the size of expansions when calls to such macros are + nested inside arguments to such macros). Because of a long series + of defect fixes made after the initial release of TS 18661-1, GCC + versions before GCC 13 have __builtin_tgmath semantics that, when + integer arguments are passed to narrowing macros returning + _Float32x, or non-narrowing macros with at least two generic + arguments, do not always correspond to the C23 semantics, so more + complicated macro definitions are also used in some cases for + versions from GCC 8 to GCC 12. */ + +#define __HAVE_BUILTIN_TGMATH __GNUC_PREREQ (8, 0) +#define __HAVE_BUILTIN_TGMATH_C23 __GNUC_PREREQ (13, 0) + +#if __GNUC_PREREQ (2, 7) + +/* Certain cases of narrowing macros only need to call a single + function so cannot use __builtin_tgmath and do not need any + complicated logic. */ +# if __HAVE_FLOAT128X +# error "Unsupported _Float128x type for ." +# endif +# if ((__HAVE_FLOAT64X && !__HAVE_FLOAT128) \ + || (__HAVE_FLOAT128 && !__HAVE_FLOAT64X)) +# error "Unsupported combination of types for ." +# endif +# define __TGMATH_1_NARROW_D(F, X) \ + (F ## l (X)) +# define __TGMATH_2_NARROW_D(F, X, Y) \ + (F ## l (X, Y)) +# define __TGMATH_3_NARROW_D(F, X, Y, Z) \ + (F ## l (X, Y, Z)) +# define __TGMATH_1_NARROW_F64X(F, X) \ + (F ## f128 (X)) +# define __TGMATH_2_NARROW_F64X(F, X, Y) \ + (F ## f128 (X, Y)) +# define __TGMATH_3_NARROW_F64X(F, X, Y, Z) \ + (F ## f128 (X, Y, Z)) +# if !__HAVE_FLOAT128 +# define __TGMATH_1_NARROW_F32X(F, X) \ + (F ## f64 (X)) +# define __TGMATH_2_NARROW_F32X(F, X, Y) \ + (F ## f64 (X, Y)) +# define __TGMATH_3_NARROW_F32X(F, X, Y, Z) \ + (F ## f64 (X, Y, Z)) +# endif + +# if __HAVE_BUILTIN_TGMATH + +# if __HAVE_FLOAT16 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F16_ARG(X) X ## f16, +# else +# define __TG_F16_ARG(X) +# endif +# if __HAVE_FLOAT32 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F32_ARG(X) X ## f32, +# else +# define __TG_F32_ARG(X) +# endif +# if __HAVE_FLOAT64 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F64_ARG(X) X ## f64, +# else +# define __TG_F64_ARG(X) +# endif +# if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F128_ARG(X) X ## f128, +# else +# define __TG_F128_ARG(X) +# endif +# if __HAVE_FLOAT32X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F32X_ARG(X) X ## f32x, +# else +# define __TG_F32X_ARG(X) +# endif +# if __HAVE_FLOAT64X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F64X_ARG(X) X ## f64x, +# else +# define __TG_F64X_ARG(X) +# endif +# if __HAVE_FLOAT128X && __GLIBC_USE (IEC_60559_TYPES_EXT) +# define __TG_F128X_ARG(X) X ## f128x, +# else +# define __TG_F128X_ARG(X) +# endif + +# define __TGMATH_FUNCS(X) X ## f, X, X ## l, \ + __TG_F16_ARG (X) __TG_F32_ARG (X) __TG_F64_ARG (X) __TG_F128_ARG (X) \ + __TG_F32X_ARG (X) __TG_F64X_ARG (X) __TG_F128X_ARG (X) +# define __TGMATH_RCFUNCS(F, C) __TGMATH_FUNCS (F) __TGMATH_FUNCS (C) +# define __TGMATH_1(F, X) __builtin_tgmath (__TGMATH_FUNCS (F) (X)) +# define __TGMATH_2(F, X, Y) __builtin_tgmath (__TGMATH_FUNCS (F) (X), (Y)) +# define __TGMATH_2STD(F, X, Y) __builtin_tgmath (F ## f, F, F ## l, (X), (Y)) +# define __TGMATH_3(F, X, Y, Z) __builtin_tgmath (__TGMATH_FUNCS (F) \ + (X), (Y), (Z)) +# define __TGMATH_1C(F, C, X) __builtin_tgmath (__TGMATH_RCFUNCS (F, C) (X)) +# define __TGMATH_2C(F, C, X, Y) __builtin_tgmath (__TGMATH_RCFUNCS (F, C) \ + (X), (Y)) + +# define __TGMATH_NARROW_FUNCS_F(X) X, X ## l, +# define __TGMATH_NARROW_FUNCS_F16(X) \ + __TG_F32_ARG (X) __TG_F64_ARG (X) __TG_F128_ARG (X) \ + __TG_F32X_ARG (X) __TG_F64X_ARG (X) __TG_F128X_ARG (X) +# define __TGMATH_NARROW_FUNCS_F32(X) \ + __TG_F64_ARG (X) __TG_F128_ARG (X) \ + __TG_F32X_ARG (X) __TG_F64X_ARG (X) __TG_F128X_ARG (X) +# define __TGMATH_NARROW_FUNCS_F64(X) \ + __TG_F128_ARG (X) \ + __TG_F64X_ARG (X) __TG_F128X_ARG (X) +# define __TGMATH_NARROW_FUNCS_F32X(X) \ + __TG_F64X_ARG (X) __TG_F128X_ARG (X) \ + __TG_F64_ARG (X) __TG_F128_ARG (X) + +# define __TGMATH_1_NARROW_F(F, X) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F (F) (X)) +# define __TGMATH_2_NARROW_F(F, X, Y) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F (F) (X), (Y)) +# define __TGMATH_3_NARROW_F(F, X, Y, Z) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F (F) (X), (Y), (Z)) +# define __TGMATH_1_NARROW_F16(F, X) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F16 (F) (X)) +# define __TGMATH_2_NARROW_F16(F, X, Y) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F16 (F) (X), (Y)) +# define __TGMATH_3_NARROW_F16(F, X, Y, Z) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F16 (F) (X), (Y), (Z)) +# define __TGMATH_1_NARROW_F32(F, X) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F32 (F) (X)) +# define __TGMATH_2_NARROW_F32(F, X, Y) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F32 (F) (X), (Y)) +# define __TGMATH_3_NARROW_F32(F, X, Y, Z) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F32 (F) (X), (Y), (Z)) +# define __TGMATH_1_NARROW_F64(F, X) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F64 (F) (X)) +# define __TGMATH_2_NARROW_F64(F, X, Y) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F64 (F) (X), (Y)) +# define __TGMATH_3_NARROW_F64(F, X, Y, Z) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F64 (F) (X), (Y), (Z)) +# if __HAVE_FLOAT128 && __HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_1_NARROW_F32X(F, X) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F32X (F) (X)) +# define __TGMATH_2_NARROW_F32X(F, X, Y) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F32X (F) (X), (Y)) +# define __TGMATH_3_NARROW_F32X(F, X, Y, Z) \ + __builtin_tgmath (__TGMATH_NARROW_FUNCS_F32X (F) (X), (Y), (Z)) +# endif + +# endif + +# if !__HAVE_BUILTIN_TGMATH_C23 +# ifdef __NO_LONG_DOUBLE_MATH +# define __tgml(fct) fct +# else +# define __tgml(fct) fct ## l +# endif + +/* __floating_type expands to 1 if TYPE is a floating type (including + complex floating types), 0 if TYPE is an integer type (including + complex integer types). __real_integer_type expands to 1 if TYPE + is a real integer type. __complex_integer_type expands to 1 if + TYPE is a complex integer type. All these macros expand to integer + constant expressions. All these macros can assume their argument + has an arithmetic type (not vector, decimal floating-point or + fixed-point), valid to pass to tgmath.h macros. */ +# if __GNUC_PREREQ (3, 1) +/* __builtin_classify_type expands to an integer constant expression + in GCC 3.1 and later. Default conversions applied to the argument + of __builtin_classify_type mean it always returns 1 for real + integer types rather than ever returning different values for + character, boolean or enumerated types. */ +# define __floating_type(type) \ + (__builtin_classify_type (__real__ ((type) 0)) == 8) +# define __real_integer_type(type) \ + (__builtin_classify_type ((type) 0) == 1) +# define __complex_integer_type(type) \ + (__builtin_classify_type ((type) 0) == 9 \ + && __builtin_classify_type (__real__ ((type) 0)) == 1) +# else +/* GCC versions predating __builtin_classify_type are also looser on + what counts as an integer constant expression. */ +# define __floating_type(type) (((type) 1.25) != 1) +# define __real_integer_type(type) (((type) (1.25 + _Complex_I)) == 1) +# define __complex_integer_type(type) \ + (((type) (1.25 + _Complex_I)) == (1 + _Complex_I)) +# endif + +/* Whether an expression (of arithmetic type) has a real type. */ +# define __expr_is_real(E) (__builtin_classify_type (E) != 9) + +/* Type T1 if E is 1, type T2 is E is 0. */ +# define __tgmath_type_if(T1, T2, E) \ + __typeof__ (*(0 ? (__typeof__ (0 ? (T2 *) 0 : (void *) (E))) 0 \ + : (__typeof__ (0 ? (T1 *) 0 : (void *) (!(E)))) 0)) + +/* The tgmath real type for T, where E is 0 if T is an integer type + and 1 for a floating type. If T has a complex type, it is + unspecified whether the return type is real or complex (but it has + the correct corresponding real type). */ +# define __tgmath_real_type_sub(T, E) \ + __tgmath_type_if (T, double, E) + +/* The tgmath real type of EXPR. */ +# define __tgmath_real_type(expr) \ + __tgmath_real_type_sub (__typeof__ ((__typeof__ (+(expr))) 0), \ + __floating_type (__typeof__ (+(expr)))) + +/* The tgmath complex type for T, where E1 is 1 if T has a floating + type and 0 otherwise, E2 is 1 if T has a real integer type and 0 + otherwise, and E3 is 1 if T has a complex type and 0 otherwise. */ +# define __tgmath_complex_type_sub(T, E1, E2, E3) \ + __typeof__ (*(0 \ + ? (__typeof__ (0 ? (T *) 0 : (void *) (!(E1)))) 0 \ + : (__typeof__ (0 \ + ? (__typeof__ (0 \ + ? (double *) 0 \ + : (void *) (!(E2)))) 0 \ + : (__typeof__ (0 \ + ? (_Complex double *) 0 \ + : (void *) (!(E3)))) 0)) 0)) + +/* The tgmath complex type of EXPR. */ +# define __tgmath_complex_type(expr) \ + __tgmath_complex_type_sub (__typeof__ ((__typeof__ (+(expr))) 0), \ + __floating_type (__typeof__ (+(expr))), \ + __real_integer_type (__typeof__ (+(expr))), \ + __complex_integer_type (__typeof__ (+(expr)))) + +/* The tgmath real type of EXPR1 combined with EXPR2, without handling + the C23 rule of interpreting integer arguments as _Float32x if any + argument is _FloatNx. */ +# define __tgmath_real_type2_base(expr1, expr2) \ + __typeof ((__tgmath_real_type (expr1)) 0 + (__tgmath_real_type (expr2)) 0) + +/* The tgmath complex type of EXPR1 combined with EXPR2, without + handling the C23 rule of interpreting integer arguments as + _Float32x if any argument is _FloatNx. */ +# define __tgmath_complex_type2_base(expr1, expr2) \ + __typeof ((__tgmath_complex_type (expr1)) 0 \ + + (__tgmath_complex_type (expr2)) 0) + +/* The tgmath real type of EXPR1 combined with EXPR2 and EXPR3, + without handling the C23 rule of interpreting integer arguments as + _Float32x if any argument is _FloatNx. */ +# define __tgmath_real_type3_base(expr1, expr2, expr3) \ + __typeof ((__tgmath_real_type (expr1)) 0 \ + + (__tgmath_real_type (expr2)) 0 \ + + (__tgmath_real_type (expr3)) 0) + +/* The tgmath real or complex type of EXPR1 combined with EXPR2 (and + EXPR3 if applicable). */ +# if __HAVE_FLOATN_NOT_TYPEDEF +# define __tgmath_real_type2(expr1, expr2) \ + __tgmath_type_if (_Float32x, __tgmath_real_type2_base (expr1, expr2), \ + _Generic ((expr1) + (expr2), _Float32x: 1, default: 0)) +# define __tgmath_complex_type2(expr1, expr2) \ + __tgmath_type_if (_Float32x, \ + __tgmath_type_if (_Complex _Float32x, \ + __tgmath_complex_type2_base (expr1, \ + expr2), \ + _Generic ((expr1) + (expr2), \ + _Complex _Float32x: 1, \ + default: 0)), \ + _Generic ((expr1) + (expr2), _Float32x: 1, default: 0)) +# define __tgmath_real_type3(expr1, expr2, expr3) \ + __tgmath_type_if (_Float32x, \ + __tgmath_real_type3_base (expr1, expr2, expr3), \ + _Generic ((expr1) + (expr2) + (expr3), \ + _Float32x: 1, default: 0)) +# else +# define __tgmath_real_type2(expr1, expr2) \ + __tgmath_real_type2_base (expr1, expr2) +# define __tgmath_complex_type2(expr1, expr2) \ + __tgmath_complex_type2_base (expr1, expr2) +# define __tgmath_real_type3(expr1, expr2, expr3) \ + __tgmath_real_type3_base (expr1, expr2, expr3) +# endif + +# if (__HAVE_DISTINCT_FLOAT16 \ + || __HAVE_DISTINCT_FLOAT32 \ + || __HAVE_DISTINCT_FLOAT64 \ + || __HAVE_DISTINCT_FLOAT32X \ + || __HAVE_DISTINCT_FLOAT64X \ + || __HAVE_DISTINCT_FLOAT128X) +# error "Unsupported _FloatN or _FloatNx types for ." +# endif + +/* Expand to text that checks if ARG_COMB has type _Float128, and if + so calls the appropriately suffixed FCT (which may include a cast), + or FCT and CFCT for complex functions, with arguments ARG_CALL. + __TGMATH_F128LD (only used in the __HAVE_FLOAT64X_LONG_DOUBLE case, + for narrowing macros) handles long double the same as + _Float128. */ +# if __HAVE_DISTINCT_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT) +# if (!__HAVE_FLOAT64X \ + || __HAVE_FLOAT64X_LONG_DOUBLE \ + || !__HAVE_FLOATN_NOT_TYPEDEF) +# define __TGMATH_F128(arg_comb, fct, arg_call) \ + __builtin_types_compatible_p (__typeof (+(arg_comb)), _Float128) \ + ? fct ## f128 arg_call : +# define __TGMATH_F128LD(arg_comb, fct, arg_call) \ + (__builtin_types_compatible_p (__typeof (+(arg_comb)), _Float128) \ + || __builtin_types_compatible_p (__typeof (+(arg_comb)), long double)) \ + ? fct ## f128 arg_call : +# define __TGMATH_CF128(arg_comb, fct, cfct, arg_call) \ + __builtin_types_compatible_p (__typeof (+__real__ (arg_comb)), _Float128) \ + ? (__expr_is_real (arg_comb) \ + ? fct ## f128 arg_call \ + : cfct ## f128 arg_call) : +# else +/* _Float64x is a distinct type at the C language level, which must be + handled like _Float128. */ +# define __TGMATH_F128(arg_comb, fct, arg_call) \ + (__builtin_types_compatible_p (__typeof (+(arg_comb)), _Float128) \ + || __builtin_types_compatible_p (__typeof (+(arg_comb)), _Float64x)) \ + ? fct ## f128 arg_call : +# define __TGMATH_CF128(arg_comb, fct, cfct, arg_call) \ + (__builtin_types_compatible_p (__typeof (+__real__ (arg_comb)), _Float128) \ + || __builtin_types_compatible_p (__typeof (+__real__ (arg_comb)), \ + _Float64x)) \ + ? (__expr_is_real (arg_comb) \ + ? fct ## f128 arg_call \ + : cfct ## f128 arg_call) : +# endif +# else +# define __TGMATH_F128(arg_comb, fct, arg_call) /* Nothing. */ +# define __TGMATH_CF128(arg_comb, fct, cfct, arg_call) /* Nothing. */ +# endif + +# endif /* !__HAVE_BUILTIN_TGMATH_C23. */ + +/* We have two kinds of generic macros: to support functions which are + only defined on real valued parameters and those which are defined + for complex functions as well. */ +# if __HAVE_BUILTIN_TGMATH + +# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) __TGMATH_1 (Fct, (Val)) +# define __TGMATH_UNARY_REAL_RET_ONLY(Val, Fct) __TGMATH_1 (Fct, (Val)) +# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \ + __TGMATH_2 (Fct, (Val1), (Val2)) +# define __TGMATH_BINARY_FIRST_REAL_STD_ONLY(Val1, Val2, Fct) \ + __TGMATH_2STD (Fct, (Val1), (Val2)) +# if __HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \ + __TGMATH_2 (Fct, (Val1), (Val2)) +# endif +# define __TGMATH_BINARY_REAL_STD_ONLY(Val1, Val2, Fct) \ + __TGMATH_2STD (Fct, (Val1), (Val2)) +# if __HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \ + __TGMATH_3 (Fct, (Val1), (Val2), (Val3)) +# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \ + __TGMATH_3 (Fct, (Val1), (Val2), (Val3)) +# endif +# define __TGMATH_TERNARY_FIRST_REAL_RET_ONLY(Val1, Val2, Val3, Fct) \ + __TGMATH_3 (Fct, (Val1), (Val2), (Val3)) +# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \ + __TGMATH_1C (Fct, Cfct, (Val)) +# define __TGMATH_UNARY_IMAG(Val, Cfct) __TGMATH_1 (Cfct, (Val)) +# define __TGMATH_UNARY_REAL_IMAG_RET_REAL(Val, Fct, Cfct) \ + __TGMATH_1C (Fct, Cfct, (Val)) +# define __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME(Val, Cfct) \ + __TGMATH_1 (Cfct, (Val)) +# if __HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \ + __TGMATH_2C (Fct, Cfct, (Val1), (Val2)) +# endif + +# endif + +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \ + (__extension__ ((sizeof (+(Val)) == sizeof (double) \ + || __builtin_classify_type (Val) != 8) \ + ? (__tgmath_real_type (Val)) Fct (Val) \ + : (sizeof (+(Val)) == sizeof (float)) \ + ? (__tgmath_real_type (Val)) Fct##f (Val) \ + : __TGMATH_F128 ((Val), (__tgmath_real_type (Val)) Fct, \ + (Val)) \ + (__tgmath_real_type (Val)) __tgml(Fct) (Val))) + +# define __TGMATH_UNARY_REAL_RET_ONLY(Val, Fct) \ + (__extension__ ((sizeof (+(Val)) == sizeof (double) \ + || __builtin_classify_type (Val) != 8) \ + ? Fct (Val) \ + : (sizeof (+(Val)) == sizeof (float)) \ + ? Fct##f (Val) \ + : __TGMATH_F128 ((Val), Fct, (Val)) \ + __tgml(Fct) (Val))) + +# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \ + (__extension__ ((sizeof (+(Val1)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8) \ + ? (__tgmath_real_type (Val1)) Fct (Val1, Val2) \ + : (sizeof (+(Val1)) == sizeof (float)) \ + ? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2) \ + : __TGMATH_F128 ((Val1), (__tgmath_real_type (Val1)) Fct, \ + (Val1, Val2)) \ + (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2))) + +# define __TGMATH_BINARY_FIRST_REAL_STD_ONLY(Val1, Val2, Fct) \ + (__extension__ ((sizeof (+(Val1)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8) \ + ? (__tgmath_real_type (Val1)) Fct (Val1, Val2) \ + : (sizeof (+(Val1)) == sizeof (float)) \ + ? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2) \ + : (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2))) +# endif + +# if !__HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \ + (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \ + && __builtin_classify_type ((Val1) + (Val2)) == 8) \ + ? __TGMATH_F128 ((Val1) + (Val2), \ + (__tgmath_real_type2 (Val1, Val2)) Fct, \ + (Val1, Val2)) \ + (__tgmath_real_type2 (Val1, Val2)) \ + __tgml(Fct) (Val1, Val2) \ + : (sizeof (+(Val1)) == sizeof (double) \ + || sizeof (+(Val2)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8) \ + ? (__tgmath_real_type2 (Val1, Val2)) \ + Fct (Val1, Val2) \ + : (__tgmath_real_type2 (Val1, Val2)) \ + Fct##f (Val1, Val2))) +# endif + +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_BINARY_REAL_STD_ONLY(Val1, Val2, Fct) \ + (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \ + && __builtin_classify_type ((Val1) + (Val2)) == 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + __tgml(Fct) (Val1, Val2) \ + : (sizeof (+(Val1)) == sizeof (double) \ + || sizeof (+(Val2)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct (Val1, Val2) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct##f (Val1, Val2))) +# endif + +# if !__HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \ + (__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \ + && __builtin_classify_type ((Val1) + (Val2)) == 8) \ + ? __TGMATH_F128 ((Val1) + (Val2), \ + (__tgmath_real_type2 (Val1, Val2)) Fct, \ + (Val1, Val2, Val3)) \ + (__tgmath_real_type2 (Val1, Val2)) \ + __tgml(Fct) (Val1, Val2, Val3) \ + : (sizeof (+(Val1)) == sizeof (double) \ + || sizeof (+(Val2)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8) \ + ? (__tgmath_real_type2 (Val1, Val2)) \ + Fct (Val1, Val2, Val3) \ + : (__tgmath_real_type2 (Val1, Val2)) \ + Fct##f (Val1, Val2, Val3))) + +# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \ + (__extension__ ((sizeof ((Val1) + (Val2) + (Val3)) > sizeof (double) \ + && __builtin_classify_type ((Val1) + (Val2) + (Val3)) \ + == 8) \ + ? __TGMATH_F128 ((Val1) + (Val2) + (Val3), \ + (__tgmath_real_type3 (Val1, Val2, \ + Val3)) Fct, \ + (Val1, Val2, Val3)) \ + (__tgmath_real_type3 (Val1, Val2, Val3)) \ + __tgml(Fct) (Val1, Val2, Val3) \ + : (sizeof (+(Val1)) == sizeof (double) \ + || sizeof (+(Val2)) == sizeof (double) \ + || sizeof (+(Val3)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8 \ + || __builtin_classify_type (Val3) != 8) \ + ? (__tgmath_real_type3 (Val1, Val2, Val3)) \ + Fct (Val1, Val2, Val3) \ + : (__tgmath_real_type3 (Val1, Val2, Val3)) \ + Fct##f (Val1, Val2, Val3))) +# endif + +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_TERNARY_FIRST_REAL_RET_ONLY(Val1, Val2, Val3, Fct) \ + (__extension__ ((sizeof (+(Val1)) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8) \ + ? Fct (Val1, Val2, Val3) \ + : (sizeof (+(Val1)) == sizeof (float)) \ + ? Fct##f (Val1, Val2, Val3) \ + : __TGMATH_F128 ((Val1), Fct, (Val1, Val2, Val3)) \ + __tgml(Fct) (Val1, Val2, Val3))) + +/* XXX This definition has to be changed as soon as the compiler understands + the imaginary keyword. */ +# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \ + (__extension__ ((sizeof (+__real__ (Val)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ + ? (__expr_is_real (Val) \ + ? (__tgmath_complex_type (Val)) Fct (Val) \ + : (__tgmath_complex_type (Val)) Cfct (Val)) \ + : (sizeof (+__real__ (Val)) == sizeof (float)) \ + ? (__expr_is_real (Val) \ + ? (__tgmath_complex_type (Val)) Fct##f (Val) \ + : (__tgmath_complex_type (Val)) Cfct##f (Val)) \ + : __TGMATH_CF128 ((Val), \ + (__tgmath_complex_type (Val)) Fct, \ + (__tgmath_complex_type (Val)) Cfct, \ + (Val)) \ + (__expr_is_real (Val) \ + ? (__tgmath_complex_type (Val)) __tgml(Fct) (Val) \ + : (__tgmath_complex_type (Val)) __tgml(Cfct) (Val)))) + +# define __TGMATH_UNARY_IMAG(Val, Cfct) \ + (__extension__ ((sizeof (+__real__ (Val)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ + ? (__typeof__ ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) Cfct (Val) \ + : (sizeof (+__real__ (Val)) == sizeof (float)) \ + ? (__typeof__ ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) Cfct##f (Val) \ + : __TGMATH_F128 (__real__ (Val), \ + (__typeof__ \ + ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) Cfct, (Val)) \ + (__typeof__ ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) __tgml(Cfct) (Val))) + +/* XXX This definition has to be changed as soon as the compiler understands + the imaginary keyword. */ +# define __TGMATH_UNARY_REAL_IMAG_RET_REAL(Val, Fct, Cfct) \ + (__extension__ ((sizeof (+__real__ (Val)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ + ? (__expr_is_real (Val) \ + ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Fct (Val) \ + : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Cfct (Val)) \ + : (sizeof (+__real__ (Val)) == sizeof (float)) \ + ? (__expr_is_real (Val) \ + ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Fct##f (Val) \ + : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Cfct##f (Val)) \ + : __TGMATH_CF128 ((Val), \ + (__typeof__ \ + (__real__ \ + (__tgmath_real_type (Val)) 0)) Fct, \ + (__typeof__ \ + (__real__ \ + (__tgmath_real_type (Val)) 0)) Cfct, \ + (Val)) \ + (__expr_is_real (Val) \ + ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0)) \ + __tgml(Fct) (Val) \ + : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0)) \ + __tgml(Cfct) (Val)))) +# define __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME(Val, Cfct) \ + __TGMATH_UNARY_REAL_IMAG_RET_REAL ((Val), Cfct, Cfct) +# endif + +# if !__HAVE_BUILTIN_TGMATH_C23 +/* XXX This definition has to be changed as soon as the compiler understands + the imaginary keyword. */ +# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \ + (__extension__ ((sizeof (__real__ (Val1) \ + + __real__ (Val2)) > sizeof (double) \ + && __builtin_classify_type (__real__ (Val1) \ + + __real__ (Val2)) == 8) \ + ? __TGMATH_CF128 ((Val1) + (Val2), \ + (__tgmath_complex_type2 (Val1, Val2)) \ + Fct, \ + (__tgmath_complex_type2 (Val1, Val2)) \ + Cfct, \ + (Val1, Val2)) \ + (__expr_is_real ((Val1) + (Val2)) \ + ? (__tgmath_complex_type2 (Val1, Val2)) \ + __tgml(Fct) (Val1, Val2) \ + : (__tgmath_complex_type2 (Val1, Val2)) \ + __tgml(Cfct) (Val1, Val2)) \ + : (sizeof (+__real__ (Val1)) == sizeof (double) \ + || sizeof (+__real__ (Val2)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val1)) != 8 \ + || __builtin_classify_type (__real__ (Val2)) != 8) \ + ? (__expr_is_real ((Val1) + (Val2)) \ + ? (__tgmath_complex_type2 (Val1, Val2)) \ + Fct (Val1, Val2) \ + : (__tgmath_complex_type2 (Val1, Val2)) \ + Cfct (Val1, Val2)) \ + : (__expr_is_real ((Val1) + (Val2)) \ + ? (__tgmath_complex_type2 (Val1, Val2)) \ + Fct##f (Val1, Val2) \ + : (__tgmath_complex_type2 (Val1, Val2)) \ + Cfct##f (Val1, Val2)))) +# endif + +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_1_NARROW_F(F, X) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0) > sizeof (double) \ + ? F ## l (X) \ + : F (X))) +# define __TGMATH_2_NARROW_F(F, X, Y) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0) > sizeof (double) \ + ? F ## l (X, Y) \ + : F (X, Y))) +# define __TGMATH_3_NARROW_F(F, X, Y, Z) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0 \ + + (__tgmath_real_type (Z)) 0) > sizeof (double) \ + ? F ## l (X, Y, Z) \ + : F (X, Y, Z))) +# endif +/* In most cases, these narrowing macro definitions based on sizeof + ensure that the function called has the right argument format, as + for other macros for compilers before GCC 8, but may not + have exactly the argument type (among the types with that format) + specified in the standard logic. + + In the case of macros for _Float32x return type, when _Float64x + exists, _Float64 arguments should result in the *f64 function being + called while _Float32x, float and double arguments should result in + the *f64x function being called (and integer arguments are + considered to have type _Float32x if any argument has type + _FloatNx, or double otherwise). These cases cannot be + distinguished using sizeof (or at all if the types are typedefs + rather than different types, in which case we err on the side of + using the wider type if unsure). */ +# if !__HAVE_BUILTIN_TGMATH_C23 +# if __HAVE_FLOATN_NOT_TYPEDEF +# define __TGMATH_NARROW_F32X_USE_F64X(X) \ + !__builtin_types_compatible_p (__typeof (+(X)), _Float64) +# else +# define __TGMATH_NARROW_F32X_USE_F64X(X) \ + (__builtin_types_compatible_p (__typeof (+(X)), double) \ + || __builtin_types_compatible_p (__typeof (+(X)), float) \ + || !__floating_type (__typeof (+(X)))) +# endif +# endif +# if __HAVE_FLOAT64X_LONG_DOUBLE && __HAVE_DISTINCT_FLOAT128 +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_1_NARROW_F32(F, X) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0) > sizeof (_Float64) \ + ? __TGMATH_F128LD ((X), F, (X)) \ + F ## f64x (X) \ + : F ## f64 (X))) +# define __TGMATH_2_NARROW_F32(F, X, Y) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \ + ? __TGMATH_F128LD ((X) + (Y), F, (X, Y)) \ + F ## f64x (X, Y) \ + : F ## f64 (X, Y))) +# define __TGMATH_3_NARROW_F32(F, X, Y, Z) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0 \ + + (__tgmath_real_type (Z)) 0) > sizeof (_Float64) \ + ? __TGMATH_F128LD ((X) + (Y) + (Z), F, (X, Y, Z)) \ + F ## f64x (X, Y, Z) \ + : F ## f64 (X, Y, Z))) +# define __TGMATH_1_NARROW_F64(F, X) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0) > sizeof (_Float64) \ + ? __TGMATH_F128LD ((X), F, (X)) \ + F ## f64x (X) \ + : F ## f128 (X))) +# define __TGMATH_2_NARROW_F64(F, X, Y) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \ + ? __TGMATH_F128LD ((X) + (Y), F, (X, Y)) \ + F ## f64x (X, Y) \ + : F ## f128 (X, Y))) +# define __TGMATH_3_NARROW_F64(F, X, Y, Z) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0 \ + + (__tgmath_real_type (Z)) 0) > sizeof (_Float64) \ + ? __TGMATH_F128LD ((X) + (Y) + (Z), F, (X, Y, Z)) \ + F ## f64x (X, Y, Z) \ + : F ## f128 (X, Y, Z))) +# endif +# if !__HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_1_NARROW_F32X(F, X) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0) > sizeof (_Float64) \ + || __TGMATH_NARROW_F32X_USE_F64X (X) \ + ? __TGMATH_F128 ((X), F, (X)) \ + F ## f64x (X) \ + : F ## f64 (X))) +# define __TGMATH_2_NARROW_F32X(F, X, Y) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \ + || __TGMATH_NARROW_F32X_USE_F64X ((X) + (Y)) \ + ? __TGMATH_F128 ((X) + (Y), F, (X, Y)) \ + F ## f64x (X, Y) \ + : F ## f64 (X, Y))) +# define __TGMATH_3_NARROW_F32X(F, X, Y, Z) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0 \ + + (__tgmath_real_type (Z)) 0) > sizeof (_Float64) \ + || __TGMATH_NARROW_F32X_USE_F64X ((X) + (Y) + (Z)) \ + ? __TGMATH_F128 ((X) + (Y) + (Z), F, (X, Y, Z)) \ + F ## f64x (X, Y, Z) \ + : F ## f64 (X, Y, Z))) +# endif +# elif __HAVE_FLOAT128 +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_1_NARROW_F32(F, X) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0) > sizeof (_Float64) \ + ? F ## f128 (X) \ + : F ## f64 (X))) +# define __TGMATH_2_NARROW_F32(F, X, Y) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \ + ? F ## f128 (X, Y) \ + : F ## f64 (X, Y))) +# define __TGMATH_3_NARROW_F32(F, X, Y, Z) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0 \ + + (__tgmath_real_type (Z)) 0) > sizeof (_Float64) \ + ? F ## f128 (X, Y, Z) \ + : F ## f64 (X, Y, Z))) +# define __TGMATH_1_NARROW_F64(F, X) \ + (F ## f128 (X)) +# define __TGMATH_2_NARROW_F64(F, X, Y) \ + (F ## f128 (X, Y)) +# define __TGMATH_3_NARROW_F64(F, X, Y, Z) \ + (F ## f128 (X, Y, Z)) +# endif +# if !__HAVE_BUILTIN_TGMATH_C23 +# define __TGMATH_1_NARROW_F32X(F, X) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0) > sizeof (_Float32x) \ + || __TGMATH_NARROW_F32X_USE_F64X (X) \ + ? F ## f64x (X) \ + : F ## f64 (X))) +# define __TGMATH_2_NARROW_F32X(F, X, Y) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0) > sizeof (_Float32x) \ + || __TGMATH_NARROW_F32X_USE_F64X ((X) + (Y)) \ + ? F ## f64x (X, Y) \ + : F ## f64 (X, Y))) +# define __TGMATH_3_NARROW_F32X(F, X, Y, Z) \ + (__extension__ (sizeof ((__tgmath_real_type (X)) 0 \ + + (__tgmath_real_type (Y)) 0 \ + + (__tgmath_real_type (Z)) 0) > sizeof (_Float32x) \ + || __TGMATH_NARROW_F32X_USE_F64X ((X) + (Y) + (Z)) \ + ? F ## f64x (X, Y, Z) \ + : F ## f64 (X, Y, Z))) +# endif +# else +# if !__HAVE_BUILTIN_TGMATH +# define __TGMATH_1_NARROW_F32(F, X) \ + (F ## f64 (X)) +# define __TGMATH_2_NARROW_F32(F, X, Y) \ + (F ## f64 (X, Y)) +# define __TGMATH_3_NARROW_F32(F, X, Y, Z) \ + (F ## f64 (X, Y, Z)) +# endif +# endif +#else +# error "Unsupported compiler; you cannot use " +#endif + + +/* Unary functions defined for real and complex values. */ + + +/* Trigonometric functions. */ + +/* Arc cosine of X. */ +#define acos(Val) __TGMATH_UNARY_REAL_IMAG (Val, acos, cacos) +/* Arc sine of X. */ +#define asin(Val) __TGMATH_UNARY_REAL_IMAG (Val, asin, casin) +/* Arc tangent of X. */ +#define atan(Val) __TGMATH_UNARY_REAL_IMAG (Val, atan, catan) +/* Arc tangent of Y/X. */ +#define atan2(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, atan2) + +/* Cosine of X. */ +#define cos(Val) __TGMATH_UNARY_REAL_IMAG (Val, cos, ccos) +/* Sine of X. */ +#define sin(Val) __TGMATH_UNARY_REAL_IMAG (Val, sin, csin) +/* Tangent of X. */ +#define tan(Val) __TGMATH_UNARY_REAL_IMAG (Val, tan, ctan) + +#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C23) +/* Arc cosine of X, divided by pi.. */ +# define acospi(Val) __TGMATH_UNARY_REAL_ONLY (Val, acospi) +/* Arc sine of X, divided by pi.. */ +# define asinpi(Val) __TGMATH_UNARY_REAL_ONLY (Val, asinpi) +/* Arc tangent of X, divided by pi. */ +# define atanpi(Val) __TGMATH_UNARY_REAL_ONLY (Val, atanpi) +/* Arc tangent of Y/X, divided by pi. */ +#define atan2pi(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, atan2pi) + +/* Cosine of pi * X. */ +# define cospi(Val) __TGMATH_UNARY_REAL_ONLY (Val, cospi) +/* Sine of pi * X. */ +# define sinpi(Val) __TGMATH_UNARY_REAL_ONLY (Val, sinpi) +/* Tangent of pi * X. */ +# define tanpi(Val) __TGMATH_UNARY_REAL_ONLY (Val, tanpi) +#endif + +/* Hyperbolic functions. */ + +/* Hyperbolic arc cosine of X. */ +#define acosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, acosh, cacosh) +/* Hyperbolic arc sine of X. */ +#define asinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, asinh, casinh) +/* Hyperbolic arc tangent of X. */ +#define atanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, atanh, catanh) + +/* Hyperbolic cosine of X. */ +#define cosh(Val) __TGMATH_UNARY_REAL_IMAG (Val, cosh, ccosh) +/* Hyperbolic sine of X. */ +#define sinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, sinh, csinh) +/* Hyperbolic tangent of X. */ +#define tanh(Val) __TGMATH_UNARY_REAL_IMAG (Val, tanh, ctanh) + + +/* Exponential and logarithmic functions. */ + +/* Exponential function of X. */ +#define exp(Val) __TGMATH_UNARY_REAL_IMAG (Val, exp, cexp) + +/* Break VALUE into a normalized fraction and an integral power of 2. */ +#define frexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, frexp) + +/* X times (two to the EXP power). */ +#define ldexp(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, ldexp) + +/* Natural logarithm of X. */ +#define log(Val) __TGMATH_UNARY_REAL_IMAG (Val, log, clog) + +/* Base-ten logarithm of X. */ +#ifdef __USE_GNU +# define log10(Val) __TGMATH_UNARY_REAL_IMAG (Val, log10, clog10) +#else +# define log10(Val) __TGMATH_UNARY_REAL_ONLY (Val, log10) +#endif + +/* Return exp(X) - 1. */ +#define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1) + +/* Return log(1 + X). */ +#define log1p(Val) __TGMATH_UNARY_REAL_ONLY (Val, log1p) + +/* Return the base 2 signed integral exponent of X. */ +#define logb(Val) __TGMATH_UNARY_REAL_ONLY (Val, logb) + +/* Compute base-2 exponential of X. */ +#define exp2(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp2) + +/* Compute base-2 logarithm of X. */ +#define log2(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2) + +#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C23) +/* Compute exponent to base ten. */ +#define exp10(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp10) + +/* Return exp2(X) - 1. */ +#define exp2m1(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp2m1) + +/* Return exp10(X) - 1. */ +#define exp10m1(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp10m1) + +/* Return log2(1 + X). */ +#define log2p1(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2p1) + +/* Return log10(1 + X). */ +#define log10p1(Val) __TGMATH_UNARY_REAL_ONLY (Val, log10p1) + +/* Return log(1 + X). */ +#define logp1(Val) __TGMATH_UNARY_REAL_ONLY (Val, logp1) +#endif + + +/* Power functions. */ + +/* Return X to the Y power. */ +#define pow(Val1, Val2) __TGMATH_BINARY_REAL_IMAG (Val1, Val2, pow, cpow) + +/* Return the square root of X. */ +#define sqrt(Val) __TGMATH_UNARY_REAL_IMAG (Val, sqrt, csqrt) + +/* Return `sqrt(X*X + Y*Y)'. */ +#define hypot(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, hypot) + +/* Return the cube root of X. */ +#define cbrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, cbrt) + + +/* Nearest integer, absolute value, and remainder functions. */ + +/* Smallest integral value not less than X. */ +#define ceil(Val) __TGMATH_UNARY_REAL_ONLY (Val, ceil) + +/* Absolute value of X. */ +#define fabs(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, fabs, cabs) + +/* Largest integer not greater than X. */ +#define floor(Val) __TGMATH_UNARY_REAL_ONLY (Val, floor) + +/* Floating-point modulo remainder of X/Y. */ +#define fmod(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmod) + +/* Round X to integral valuein floating-point format using current + rounding direction, but do not raise inexact exception. */ +#define nearbyint(Val) __TGMATH_UNARY_REAL_ONLY (Val, nearbyint) + +/* Round X to nearest integral value, rounding halfway cases away from + zero. */ +#define round(Val) __TGMATH_UNARY_REAL_ONLY (Val, round) + +/* Round X to the integral value in floating-point format nearest but + not larger in magnitude. */ +#define trunc(Val) __TGMATH_UNARY_REAL_ONLY (Val, trunc) + +/* Compute remainder of X and Y and put in *QUO a value with sign of x/y + and magnitude congruent `mod 2^n' to the magnitude of the integral + quotient x/y, with n >= 3. */ +#define remquo(Val1, Val2, Val3) \ + __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY (Val1, Val2, Val3, remquo) + +/* Round X to nearest integral value according to current rounding + direction. */ +#define lrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, lrint) +#define llrint(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, llrint) + +/* Round X to nearest integral value, rounding halfway cases away from + zero. */ +#define lround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, lround) +#define llround(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, llround) + + +/* Return X with its signed changed to Y's. */ +#define copysign(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, copysign) + +/* Error and gamma functions. */ +#define erf(Val) __TGMATH_UNARY_REAL_ONLY (Val, erf) +#define erfc(Val) __TGMATH_UNARY_REAL_ONLY (Val, erfc) +#define tgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, tgamma) +#define lgamma(Val) __TGMATH_UNARY_REAL_ONLY (Val, lgamma) + + +/* Return the integer nearest X in the direction of the + prevailing rounding mode. */ +#define rint(Val) __TGMATH_UNARY_REAL_ONLY (Val, rint) + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) +/* Return X - epsilon. */ +# define nextdown(Val) __TGMATH_UNARY_REAL_ONLY (Val, nextdown) +/* Return X + epsilon. */ +# define nextup(Val) __TGMATH_UNARY_REAL_ONLY (Val, nextup) +#endif + +/* Return X + epsilon if X < Y, X - epsilon if X > Y. */ +#define nextafter(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, nextafter) +#define nexttoward(Val1, Val2) \ + __TGMATH_BINARY_FIRST_REAL_STD_ONLY (Val1, Val2, nexttoward) + +/* Return the remainder of integer division X / Y with infinite precision. */ +#define remainder(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, remainder) + +/* Return X times (2 to the Nth power). */ +#ifdef __USE_MISC +# define scalb(Val1, Val2) __TGMATH_BINARY_REAL_STD_ONLY (Val1, Val2, scalb) +#endif + +/* Return X times (2 to the Nth power). */ +#define scalbn(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbn) + +/* Return X times (2 to the Nth power). */ +#define scalbln(Val1, Val2) \ + __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, scalbln) + +/* Return the binary exponent of X, which must be nonzero. */ +#define ilogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, ilogb) + + +/* Return positive difference between X and Y. */ +#define fdim(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fdim) + +#if __GLIBC_USE (ISOC23) && !defined __USE_GNU +/* Return maximum numeric value from X and Y. */ +# define fmax(Val1, Val2) __TGMATH_BINARY_REAL_STD_ONLY (Val1, Val2, fmax) + +/* Return minimum numeric value from X and Y. */ +# define fmin(Val1, Val2) __TGMATH_BINARY_REAL_STD_ONLY (Val1, Val2, fmin) +#else +/* Return maximum numeric value from X and Y. */ +# define fmax(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmax) + +/* Return minimum numeric value from X and Y. */ +# define fmin(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmin) +#endif + + +/* Multiply-add function computed as a ternary operation. */ +#define fma(Val1, Val2, Val3) \ + __TGMATH_TERNARY_REAL_ONLY (Val1, Val2, Val3, fma) + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) +/* Round X to nearest integer value, rounding halfway cases to even. */ +# define roundeven(Val) __TGMATH_UNARY_REAL_ONLY (Val, roundeven) + +# define fromfp(Val1, Val2, Val3) \ + __TGMATH_TERNARY_FIRST_REAL_RET_ONLY (Val1, Val2, Val3, fromfp) + +# define ufromfp(Val1, Val2, Val3) \ + __TGMATH_TERNARY_FIRST_REAL_RET_ONLY (Val1, Val2, Val3, ufromfp) + +# define fromfpx(Val1, Val2, Val3) \ + __TGMATH_TERNARY_FIRST_REAL_RET_ONLY (Val1, Val2, Val3, fromfpx) + +# define ufromfpx(Val1, Val2, Val3) \ + __TGMATH_TERNARY_FIRST_REAL_RET_ONLY (Val1, Val2, Val3, ufromfpx) + +/* Like ilogb, but returning long int. */ +# define llogb(Val) __TGMATH_UNARY_REAL_RET_ONLY (Val, llogb) +#endif + +#if __GLIBC_USE (IEC_60559_BFP_EXT) +/* Return value with maximum magnitude. */ +# define fmaxmag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmaxmag) + +/* Return value with minimum magnitude. */ +# define fminmag(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminmag) +#endif + +#if __GLIBC_USE (ISOC23) +/* Return maximum value from X and Y. */ +# define fmaximum(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmaximum) + +/* Return minimum value from X and Y. */ +# define fminimum(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminimum) + +/* Return maximum numeric value from X and Y. */ +# define fmaximum_num(Val1, Val2) \ + __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmaximum_num) + +/* Return minimum numeric value from X and Y. */ +# define fminimum_num(Val1, Val2) \ + __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminimum_num) + +/* Return value with maximum magnitude. */ +# define fmaximum_mag(Val1, Val2) \ + __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmaximum_mag) + +/* Return value with minimum magnitude. */ +# define fminimum_mag(Val1, Val2) \ + __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminimum_mag) + +/* Return numeric value with maximum magnitude. */ +# define fmaximum_mag_num(Val1, Val2) \ + __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmaximum_mag_num) + +/* Return numeric value with minimum magnitude. */ +# define fminimum_mag_num(Val1, Val2) \ + __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fminimum_mag_num) +#endif + + +/* Absolute value, conjugates, and projection. */ + +/* Argument value of Z. */ +#define carg(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME (Val, carg) + +/* Complex conjugate of Z. */ +#define conj(Val) __TGMATH_UNARY_IMAG (Val, conj) + +/* Projection of Z onto the Riemann sphere. */ +#define cproj(Val) __TGMATH_UNARY_IMAG (Val, cproj) + + +/* Decomposing complex values. */ + +/* Imaginary part of Z. */ +#define cimag(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME (Val, cimag) + +/* Real part of Z. */ +#define creal(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME (Val, creal) + + +/* Narrowing functions. */ + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) + +/* Add. */ +# define fadd(Val1, Val2) __TGMATH_2_NARROW_F (fadd, Val1, Val2) +# define dadd(Val1, Val2) __TGMATH_2_NARROW_D (dadd, Val1, Val2) + +/* Divide. */ +# define fdiv(Val1, Val2) __TGMATH_2_NARROW_F (fdiv, Val1, Val2) +# define ddiv(Val1, Val2) __TGMATH_2_NARROW_D (ddiv, Val1, Val2) + +/* Multiply. */ +# define fmul(Val1, Val2) __TGMATH_2_NARROW_F (fmul, Val1, Val2) +# define dmul(Val1, Val2) __TGMATH_2_NARROW_D (dmul, Val1, Val2) + +/* Subtract. */ +# define fsub(Val1, Val2) __TGMATH_2_NARROW_F (fsub, Val1, Val2) +# define dsub(Val1, Val2) __TGMATH_2_NARROW_D (dsub, Val1, Val2) + +/* Square root. */ +# define fsqrt(Val) __TGMATH_1_NARROW_F (fsqrt, Val) +# define dsqrt(Val) __TGMATH_1_NARROW_D (dsqrt, Val) + +/* Fused multiply-add. */ +# define ffma(Val1, Val2, Val3) __TGMATH_3_NARROW_F (ffma, Val1, Val2, Val3) +# define dfma(Val1, Val2, Val3) __TGMATH_3_NARROW_D (dfma, Val1, Val2, Val3) + +#endif + +#if __GLIBC_USE (IEC_60559_TYPES_EXT) + +# if __HAVE_FLOAT16 +# define f16add(Val1, Val2) __TGMATH_2_NARROW_F16 (f16add, Val1, Val2) +# define f16div(Val1, Val2) __TGMATH_2_NARROW_F16 (f16div, Val1, Val2) +# define f16mul(Val1, Val2) __TGMATH_2_NARROW_F16 (f16mul, Val1, Val2) +# define f16sub(Val1, Val2) __TGMATH_2_NARROW_F16 (f16sub, Val1, Val2) +# define f16sqrt(Val) __TGMATH_1_NARROW_F16 (f16sqrt, Val) +# define f16fma(Val1, Val2, Val3) \ + __TGMATH_3_NARROW_F16 (f16fma, Val1, Val2, Val3) +# endif + +# if __HAVE_FLOAT32 +# define f32add(Val1, Val2) __TGMATH_2_NARROW_F32 (f32add, Val1, Val2) +# define f32div(Val1, Val2) __TGMATH_2_NARROW_F32 (f32div, Val1, Val2) +# define f32mul(Val1, Val2) __TGMATH_2_NARROW_F32 (f32mul, Val1, Val2) +# define f32sub(Val1, Val2) __TGMATH_2_NARROW_F32 (f32sub, Val1, Val2) +# define f32sqrt(Val) __TGMATH_1_NARROW_F32 (f32sqrt, Val) +# define f32fma(Val1, Val2, Val3) \ + __TGMATH_3_NARROW_F32 (f32fma, Val1, Val2, Val3) +# endif + +# if __HAVE_FLOAT64 && (__HAVE_FLOAT64X || __HAVE_FLOAT128) +# define f64add(Val1, Val2) __TGMATH_2_NARROW_F64 (f64add, Val1, Val2) +# define f64div(Val1, Val2) __TGMATH_2_NARROW_F64 (f64div, Val1, Val2) +# define f64mul(Val1, Val2) __TGMATH_2_NARROW_F64 (f64mul, Val1, Val2) +# define f64sub(Val1, Val2) __TGMATH_2_NARROW_F64 (f64sub, Val1, Val2) +# define f64sqrt(Val) __TGMATH_1_NARROW_F64 (f64sqrt, Val) +# define f64fma(Val1, Val2, Val3) \ + __TGMATH_3_NARROW_F64 (f64fma, Val1, Val2, Val3) +# endif + +# if __HAVE_FLOAT32X +# define f32xadd(Val1, Val2) __TGMATH_2_NARROW_F32X (f32xadd, Val1, Val2) +# define f32xdiv(Val1, Val2) __TGMATH_2_NARROW_F32X (f32xdiv, Val1, Val2) +# define f32xmul(Val1, Val2) __TGMATH_2_NARROW_F32X (f32xmul, Val1, Val2) +# define f32xsub(Val1, Val2) __TGMATH_2_NARROW_F32X (f32xsub, Val1, Val2) +# define f32xsqrt(Val) __TGMATH_1_NARROW_F32X (f32xsqrt, Val) +# define f32xfma(Val1, Val2, Val3) \ + __TGMATH_3_NARROW_F32X (f32xfma, Val1, Val2, Val3) +# endif + +# if __HAVE_FLOAT64X && (__HAVE_FLOAT128X || __HAVE_FLOAT128) +# define f64xadd(Val1, Val2) __TGMATH_2_NARROW_F64X (f64xadd, Val1, Val2) +# define f64xdiv(Val1, Val2) __TGMATH_2_NARROW_F64X (f64xdiv, Val1, Val2) +# define f64xmul(Val1, Val2) __TGMATH_2_NARROW_F64X (f64xmul, Val1, Val2) +# define f64xsub(Val1, Val2) __TGMATH_2_NARROW_F64X (f64xsub, Val1, Val2) +# define f64xsqrt(Val) __TGMATH_1_NARROW_F64X (f64xsqrt, Val) +# define f64xfma(Val1, Val2, Val3) \ + __TGMATH_3_NARROW_F64X (f64xfma, Val1, Val2, Val3) +# endif + +#endif + +#endif /* tgmath.h */ diff --git a/board/mentalnet/overlay/usr/include/thread_db.h b/board/mentalnet/overlay/usr/include/thread_db.h new file mode 100644 index 0000000..44eb307 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/thread_db.h @@ -0,0 +1,458 @@ +/* thread_db.h -- interface to libthread_db.so library for debugging -lpthread + Copyright (C) 1999-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _THREAD_DB_H +#define _THREAD_DB_H 1 + +/* This is the debugger interface for the NPTL library. It is + modelled closely after the interface with same names in Solaris + with the goal to share the same code in the debugger. */ +#include +#include +#include +#include + + +/* Error codes of the library. */ +typedef enum +{ + TD_OK, /* No error. */ + TD_ERR, /* No further specified error. */ + TD_NOTHR, /* No matching thread found. */ + TD_NOSV, /* No matching synchronization handle found. */ + TD_NOLWP, /* No matching light-weighted process found. */ + TD_BADPH, /* Invalid process handle. */ + TD_BADTH, /* Invalid thread handle. */ + TD_BADSH, /* Invalid synchronization handle. */ + TD_BADTA, /* Invalid thread agent. */ + TD_BADKEY, /* Invalid key. */ + TD_NOMSG, /* No event available. */ + TD_NOFPREGS, /* No floating-point register content available. */ + TD_NOLIBTHREAD, /* Application not linked with thread library. */ + TD_NOEVENT, /* Requested event is not supported. */ + TD_NOCAPAB, /* Capability not available. */ + TD_DBERR, /* Internal debug library error. */ + TD_NOAPLIC, /* Operation is not applicable. */ + TD_NOTSD, /* No thread-specific data available. */ + TD_MALLOC, /* Out of memory. */ + TD_PARTIALREG, /* Not entire register set was read or written. */ + TD_NOXREGS, /* X register set not available for given thread. */ + TD_TLSDEFER, /* Thread has not yet allocated TLS for given module. */ + TD_NOTALLOC = TD_TLSDEFER, + TD_VERSION, /* Version if libpthread and libthread_db do not match. */ + TD_NOTLS /* There is no TLS segment in the given module. */ +} td_err_e; + + +/* Possible thread states. TD_THR_ANY_STATE is a pseudo-state used to + select threads regardless of state in td_ta_thr_iter(). */ +typedef enum +{ + TD_THR_ANY_STATE, + TD_THR_UNKNOWN, + TD_THR_STOPPED, + TD_THR_RUN, + TD_THR_ACTIVE, + TD_THR_ZOMBIE, + TD_THR_SLEEP, + TD_THR_STOPPED_ASLEEP +} td_thr_state_e; + +/* Thread type: user or system. TD_THR_ANY_TYPE is a pseudo-type used + to select threads regardless of type in td_ta_thr_iter(). */ +typedef enum +{ + TD_THR_ANY_TYPE, + TD_THR_USER, + TD_THR_SYSTEM +} td_thr_type_e; + + +/* Types of the debugging library. */ + +/* Handle for a process. This type is opaque. */ +typedef struct td_thragent td_thragent_t; + +/* The actual thread handle type. This is also opaque. */ +typedef struct td_thrhandle +{ + td_thragent_t *th_ta_p; + psaddr_t th_unique; +} td_thrhandle_t; + + +/* Forward declaration of a type defined by and for the dynamic linker. */ +struct link_map; + + +/* Flags for `td_ta_thr_iter'. */ +#define TD_THR_ANY_USER_FLAGS 0xffffffff +#define TD_THR_LOWEST_PRIORITY -20 +#define TD_SIGNO_MASK NULL + + +#define TD_EVENTSIZE 2 +#define BT_UISHIFT 5 /* log base 2 of BT_NBIPUI, to extract word index */ +#define BT_NBIPUI (1 << BT_UISHIFT) /* n bits per unsigned int */ +#define BT_UIMASK (BT_NBIPUI - 1) /* to extract bit index */ + +/* Bitmask of enabled events. */ +typedef struct td_thr_events +{ + uint32_t event_bits[TD_EVENTSIZE]; +} td_thr_events_t; + +/* Event set manipulation macros. */ +#define __td_eventmask(n) \ + (UINT32_C (1) << (((n) - 1) & BT_UIMASK)) +#define __td_eventword(n) \ + ((UINT32_C ((n) - 1)) >> BT_UISHIFT) + +#define td_event_emptyset(setp) \ + do { \ + int __i; \ + for (__i = TD_EVENTSIZE; __i > 0; --__i) \ + (setp)->event_bits[__i - 1] = 0; \ + } while (0) + +#define td_event_fillset(setp) \ + do { \ + int __i; \ + for (__i = TD_EVENTSIZE; __i > 0; --__i) \ + (setp)->event_bits[__i - 1] = UINT32_C (0xffffffff); \ + } while (0) + +#define td_event_addset(setp, n) \ + (((setp)->event_bits[__td_eventword (n)]) |= __td_eventmask (n)) +#define td_event_delset(setp, n) \ + (((setp)->event_bits[__td_eventword (n)]) &= ~__td_eventmask (n)) +#define td_eventismember(setp, n) \ + (__td_eventmask (n) & ((setp)->event_bits[__td_eventword (n)])) +#if TD_EVENTSIZE == 2 +# define td_eventisempty(setp) \ + (!((setp)->event_bits[0]) && !((setp)->event_bits[1])) +#else +# error "td_eventisempty must be changed to match TD_EVENTSIZE" +#endif + +/* Events reportable by the thread implementation. */ +typedef enum +{ + TD_ALL_EVENTS, /* Pseudo-event number. */ + TD_EVENT_NONE = TD_ALL_EVENTS, /* Depends on context. */ + TD_READY, /* Is executable now. */ + TD_SLEEP, /* Blocked in a synchronization obj. */ + TD_SWITCHTO, /* Now assigned to a process. */ + TD_SWITCHFROM, /* Not anymore assigned to a process. */ + TD_LOCK_TRY, /* Trying to get an unavailable lock. */ + TD_CATCHSIG, /* Signal posted to the thread. */ + TD_IDLE, /* Process getting idle. */ + TD_CREATE, /* New thread created. */ + TD_DEATH, /* Thread terminated. */ + TD_PREEMPT, /* Preempted. */ + TD_PRI_INHERIT, /* Inherited elevated priority. */ + TD_REAP, /* Reaped. */ + TD_CONCURRENCY, /* Number of processes changing. */ + TD_TIMEOUT, /* Conditional variable wait timed out. */ + TD_MIN_EVENT_NUM = TD_READY, + TD_MAX_EVENT_NUM = TD_TIMEOUT, + TD_EVENTS_ENABLE = 31 /* Event reporting enabled. */ +} td_event_e; + +/* Values representing the different ways events are reported. */ +typedef enum +{ + NOTIFY_BPT, /* User must insert breakpoint at u.bptaddr. */ + NOTIFY_AUTOBPT, /* Breakpoint at u.bptaddr is automatically + inserted. */ + NOTIFY_SYSCALL /* System call u.syscallno will be invoked. */ +} td_notify_e; + +/* Description how event type is reported. */ +typedef struct td_notify +{ + td_notify_e type; /* Way the event is reported. */ + union + { + psaddr_t bptaddr; /* Address of breakpoint. */ + int syscallno; /* Number of system call used. */ + } u; +} td_notify_t; + +/* Structure used to report event. */ +typedef struct td_event_msg +{ + td_event_e event; /* Event type being reported. */ + const td_thrhandle_t *th_p; /* Thread reporting the event. */ + union + { +# if 0 + td_synchandle_t *sh; /* Handle of synchronization object. */ +#endif + uintptr_t data; /* Event specific data. */ + } msg; +} td_event_msg_t; + +/* Structure containing event data available in each thread structure. */ +typedef struct +{ + td_thr_events_t eventmask; /* Mask of enabled events. */ + td_event_e eventnum; /* Number of last event. */ + void *eventdata; /* Data associated with event. */ +} td_eventbuf_t; + + +/* Gathered statistics about the process. */ +typedef struct td_ta_stats +{ + int nthreads; /* Total number of threads in use. */ + int r_concurrency; /* Concurrency level requested by user. */ + int nrunnable_num; /* Average runnable threads, numerator. */ + int nrunnable_den; /* Average runnable threads, denominator. */ + int a_concurrency_num; /* Achieved concurrency level, numerator. */ + int a_concurrency_den; /* Achieved concurrency level, denominator. */ + int nlwps_num; /* Average number of processes in use, + numerator. */ + int nlwps_den; /* Average number of processes in use, + denominator. */ + int nidle_num; /* Average number of idling processes, + numerator. */ + int nidle_den; /* Average number of idling processes, + denominator. */ +} td_ta_stats_t; + + +/* Since Sun's library is based on Solaris threads we have to define a few + types to map them to POSIX threads. */ +typedef pthread_t thread_t; +typedef pthread_key_t thread_key_t; + + +/* Callback for iteration over threads. */ +typedef int td_thr_iter_f (const td_thrhandle_t *, void *); + +/* Callback for iteration over thread local data. */ +typedef int td_key_iter_f (thread_key_t, void (*) (void *), void *); + + + +/* Forward declaration. This has to be defined by the user. */ +struct ps_prochandle; + + +/* Information about the thread. */ +typedef struct td_thrinfo +{ + td_thragent_t *ti_ta_p; /* Process handle. */ + unsigned int ti_user_flags; /* Unused. */ + thread_t ti_tid; /* Thread ID returned by + pthread_create(). */ + char *ti_tls; /* Pointer to thread-local data. */ + psaddr_t ti_startfunc; /* Start function passed to + pthread_create(). */ + psaddr_t ti_stkbase; /* Base of thread's stack. */ + long int ti_stksize; /* Size of thread's stack. */ + psaddr_t ti_ro_area; /* Unused. */ + int ti_ro_size; /* Unused. */ + td_thr_state_e ti_state; /* Thread state. */ + unsigned char ti_db_suspended; /* Nonzero if suspended by debugger. */ + td_thr_type_e ti_type; /* Type of the thread (system vs + user thread). */ + intptr_t ti_pc; /* Unused. */ + intptr_t ti_sp; /* Unused. */ + short int ti_flags; /* Unused. */ + int ti_pri; /* Thread priority. */ + lwpid_t ti_lid; /* Kernel PID for this thread. */ + sigset_t ti_sigmask; /* Signal mask. */ + unsigned char ti_traceme; /* Nonzero if event reporting + enabled. */ + unsigned char ti_preemptflag; /* Unused. */ + unsigned char ti_pirecflag; /* Unused. */ + sigset_t ti_pending; /* Set of pending signals. */ + td_thr_events_t ti_events; /* Set of enabled events. */ +} td_thrinfo_t; + + + +/* Prototypes for exported library functions. */ + +/* Initialize the thread debug support library. */ +extern td_err_e td_init (void); + +/* Historical relict. Should not be used anymore. */ +extern td_err_e td_log (void); + +/* Return list of symbols the library can request. */ +extern const char **td_symbol_list (void); + +/* Generate new thread debug library handle for process PS. */ +extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta); + +/* Free resources allocated for TA. */ +extern td_err_e td_ta_delete (td_thragent_t *__ta); + +/* Get number of currently running threads in process associated with TA. */ +extern td_err_e td_ta_get_nthreads (const td_thragent_t *__ta, int *__np); + +/* Return process handle passed in `td_ta_new' for process associated with + TA. */ +extern td_err_e td_ta_get_ph (const td_thragent_t *__ta, + struct ps_prochandle **__ph); + +/* Map thread library handle PT to thread debug library handle for process + associated with TA and store result in *TH. */ +extern td_err_e td_ta_map_id2thr (const td_thragent_t *__ta, pthread_t __pt, + td_thrhandle_t *__th); + +/* Map process ID LWPID to thread debug library handle for process + associated with TA and store result in *TH. */ +extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid, + td_thrhandle_t *__th); + + +/* Call for each thread in a process associated with TA the callback function + CALLBACK. */ +extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta, + td_thr_iter_f *__callback, void *__cbdata_p, + td_thr_state_e __state, int __ti_pri, + sigset_t *__ti_sigmask_p, + unsigned int __ti_user_flags); + +/* Call for each defined thread local data entry the callback function KI. */ +extern td_err_e td_ta_tsd_iter (const td_thragent_t *__ta, td_key_iter_f *__ki, + void *__p); + + +/* Get event address for EVENT. */ +extern td_err_e td_ta_event_addr (const td_thragent_t *__ta, + td_event_e __event, td_notify_t *__ptr); + +/* Enable EVENT in global mask. */ +extern td_err_e td_ta_set_event (const td_thragent_t *__ta, + td_thr_events_t *__event); + +/* Disable EVENT in global mask. */ +extern td_err_e td_ta_clear_event (const td_thragent_t *__ta, + td_thr_events_t *__event); + +/* Return information about last event. */ +extern td_err_e td_ta_event_getmsg (const td_thragent_t *__ta, + td_event_msg_t *__msg); + + +/* Set suggested concurrency level for process associated with TA. */ +extern td_err_e td_ta_setconcurrency (const td_thragent_t *__ta, int __level); + + +/* Enable collecting statistics for process associated with TA. */ +extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable); + +/* Reset statistics. */ +extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta); + +/* Retrieve statistics from process associated with TA. */ +extern td_err_e td_ta_get_stats (const td_thragent_t *__ta, + td_ta_stats_t *__statsp); + + +/* Validate that TH is a thread handle. */ +extern td_err_e td_thr_validate (const td_thrhandle_t *__th); + +/* Return information about thread TH. */ +extern td_err_e td_thr_get_info (const td_thrhandle_t *__th, + td_thrinfo_t *__infop); + +/* Retrieve floating-point register contents of process running thread TH. */ +extern td_err_e td_thr_getfpregs (const td_thrhandle_t *__th, + prfpregset_t *__regset); + +/* Retrieve general register contents of process running thread TH. */ +extern td_err_e td_thr_getgregs (const td_thrhandle_t *__th, + prgregset_t __gregs); + +/* Retrieve extended register contents of process running thread TH. */ +extern td_err_e td_thr_getxregs (const td_thrhandle_t *__th, void *__xregs); + +/* Get size of extended register set of process running thread TH. */ +extern td_err_e td_thr_getxregsize (const td_thrhandle_t *__th, int *__sizep); + +/* Set floating-point register contents of process running thread TH. */ +extern td_err_e td_thr_setfpregs (const td_thrhandle_t *__th, + const prfpregset_t *__fpregs); + +/* Set general register contents of process running thread TH. */ +extern td_err_e td_thr_setgregs (const td_thrhandle_t *__th, + prgregset_t __gregs); + +/* Set extended register contents of process running thread TH. */ +extern td_err_e td_thr_setxregs (const td_thrhandle_t *__th, + const void *__addr); + + +/* Get address of the given module's TLS storage area for the given thread. */ +extern td_err_e td_thr_tlsbase (const td_thrhandle_t *__th, + unsigned long int __modid, + psaddr_t *__base); + +/* Get address of thread local variable. */ +extern td_err_e td_thr_tls_get_addr (const td_thrhandle_t *__th, + psaddr_t __map_address, size_t __offset, + psaddr_t *__address); + + +/* Enable reporting for EVENT for thread TH. */ +extern td_err_e td_thr_event_enable (const td_thrhandle_t *__th, int __event); + +/* Enable EVENT for thread TH. */ +extern td_err_e td_thr_set_event (const td_thrhandle_t *__th, + td_thr_events_t *__event); + +/* Disable EVENT for thread TH. */ +extern td_err_e td_thr_clear_event (const td_thrhandle_t *__th, + td_thr_events_t *__event); + +/* Get event message for thread TH. */ +extern td_err_e td_thr_event_getmsg (const td_thrhandle_t *__th, + td_event_msg_t *__msg); + + +/* Set priority of thread TH. */ +extern td_err_e td_thr_setprio (const td_thrhandle_t *__th, int __prio); + + +/* Set pending signals for thread TH. */ +extern td_err_e td_thr_setsigpending (const td_thrhandle_t *__th, + unsigned char __n, const sigset_t *__ss); + +/* Set signal mask for thread TH. */ +extern td_err_e td_thr_sigsetmask (const td_thrhandle_t *__th, + const sigset_t *__ss); + + +/* Return thread local data associated with key TK in thread TH. */ +extern td_err_e td_thr_tsd (const td_thrhandle_t *__th, + const thread_key_t __tk, void **__data); + + +/* Suspend execution of thread TH. */ +extern td_err_e td_thr_dbsuspend (const td_thrhandle_t *__th); + +/* Resume execution of thread TH. */ +extern td_err_e td_thr_dbresume (const td_thrhandle_t *__th); + +#endif /* thread_db.h */ diff --git a/board/mentalnet/overlay/usr/include/threads.h b/board/mentalnet/overlay/usr/include/threads.h new file mode 100644 index 0000000..44c9bc7 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/threads.h @@ -0,0 +1,239 @@ +/* ISO C11 Standard: 7.26 - Thread support library . + Copyright (C) 2018-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _THREADS_H +#define _THREADS_H 1 + +#include +#include + +__BEGIN_DECLS + +#include +#include + +#if (!defined __STDC_VERSION__ \ + || __STDC_VERSION__ <= 201710L \ + || !__GNUC_PREREQ (13, 0)) && !defined __cplusplus +# define thread_local _Thread_local +#endif + +#define TSS_DTOR_ITERATIONS 4 +typedef __tss_t tss_t; +typedef void (*tss_dtor_t) (void*); + +typedef __thrd_t thrd_t; +typedef int (*thrd_start_t) (void*); + +/* Exit and error codes. */ +enum +{ + thrd_success = 0, + thrd_busy = 1, + thrd_error = 2, + thrd_nomem = 3, + thrd_timedout = 4 +}; + +/* Mutex types. */ +enum +{ + mtx_plain = 0, + mtx_recursive = 1, + mtx_timed = 2 +}; + +typedef __once_flag once_flag; +#define ONCE_FLAG_INIT __ONCE_FLAG_INIT + +typedef union +{ + char __size[__SIZEOF_PTHREAD_MUTEX_T]; + long int __align __LOCK_ALIGNMENT; +} mtx_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_COND_T]; + __extension__ long long int __align __LOCK_ALIGNMENT; +} cnd_t; + +/* Threads functions. */ + +/* Create a new thread executing the function __FUNC. Arguments for __FUNC + are passed through __ARG. If successful, __THR is set to new thread + identifier. */ +extern int thrd_create (thrd_t *__thr, thrd_start_t __func, void *__arg); + +/* Check if __LHS and __RHS point to the same thread. */ +extern int thrd_equal (thrd_t __lhs, thrd_t __rhs); + +/* Return current thread identifier. */ +extern thrd_t thrd_current (void); + +/* Block current thread execution for at least the time pointed by + __TIME_POINT. The current thread may resume if receives a signal. In + that case, if __REMAINING is not NULL, the remaining time is stored in + the object pointed by it. */ +#ifndef __USE_TIME64_REDIRECTS +extern int thrd_sleep (const struct timespec *__time_point, + struct timespec *__remaining); +#else +# ifdef __REDIRECT +extern int __REDIRECT (thrd_sleep, (const struct timespec *__time_point, + struct timespec *__remaining), + __thrd_sleep64); +# else +# define thrd_sleep __thrd_sleep64 +# endif +#endif + +/* Terminate current thread execution, cleaning up any thread local + storage and freeing resources. Returns the value specified in __RES. */ +extern void thrd_exit (int __res) __attribute__ ((__noreturn__)); + +/* Detach the thread identified by __THR from the current environment + (it does not allow join or wait for it). */ +extern int thrd_detach (thrd_t __thr); + +/* Block current thread until execution of __THR is complete. In case that + __RES is not NULL, will store the return value of __THR when exiting. */ +extern int thrd_join (thrd_t __thr, int *__res); + +/* Stop current thread execution and call the scheduler to decide which + thread should execute next. The current thread may be selected by the + scheduler to keep running. */ +extern void thrd_yield (void); + +#ifdef __USE_EXTERN_INLINES +/* Optimizations. */ +__extern_inline int +thrd_equal (thrd_t __thread1, thrd_t __thread2) +{ + return __thread1 == __thread2; +} +#endif + + +/* Mutex functions. */ + +/* Creates a new mutex object with type __TYPE. If successful the new + object is pointed by __MUTEX. */ +extern int mtx_init (mtx_t *__mutex, int __type); + +/* Block the current thread until the mutex pointed to by __MUTEX is + unlocked. In that case current thread will not be blocked. */ +extern int mtx_lock (mtx_t *__mutex); + +/* Block the current thread until the mutex pointed by __MUTEX is unlocked + or time pointed by __TIME_POINT is reached. In case the mutex is unlock, + the current thread will not be blocked. */ +#ifndef __USE_TIME64_REDIRECTS +extern int mtx_timedlock (mtx_t *__restrict __mutex, + const struct timespec *__restrict __time_point); +#else +# ifdef __REDIRECT +extern int __REDIRECT (mtx_timedlock, (mtx_t *__restrict __mutex, + const struct timespec *__restrict + __time_point), + __mtx_timedlock64); +# else +# define mtx_timedlock __mtx_timedlock64 +# endif +#endif + +/* Try to lock the mutex pointed by __MUTEX without blocking. If the mutex + is free the current threads takes control of it, otherwise it returns + immediately. */ +extern int mtx_trylock (mtx_t *__mutex); + +/* Unlock the mutex pointed by __MUTEX. It may potentially awake other + threads waiting on this mutex. */ +extern int mtx_unlock (mtx_t *__mutex); + +/* Destroy the mutex object pointed by __MUTEX. */ +extern void mtx_destroy (mtx_t *__mutex); + + +/* Call function __FUNC exactly once, even if invoked from several threads. + All calls must be made with the same __FLAGS object. */ +extern void call_once (once_flag *__flag, void (*__func)(void)); + + +/* Condition variable functions. */ + +/* Initialize new condition variable pointed by __COND. */ +extern int cnd_init (cnd_t *__cond); + +/* Unblock one thread that currently waits on condition variable pointed + by __COND. */ +extern int cnd_signal (cnd_t *__cond); + +/* Unblock all threads currently waiting on condition variable pointed by + __COND. */ +extern int cnd_broadcast (cnd_t *__cond); + +/* Block current thread on the condition variable pointed by __COND. */ +extern int cnd_wait (cnd_t *__cond, mtx_t *__mutex); + +/* Block current thread on the condition variable until condition variable + pointed by __COND is signaled or time pointed by __TIME_POINT is + reached. */ +#ifndef __USE_TIME64_REDIRECTS +extern int cnd_timedwait (cnd_t *__restrict __cond, + mtx_t *__restrict __mutex, + const struct timespec *__restrict __time_point); +#else +# ifdef __REDIRECT +extern int __REDIRECT (cnd_timedwait, (cnd_t *__restrict __cond, + mtx_t *__restrict __mutex, + const struct timespec *__restrict + __time_point), + __cnd_timedwait64); +# else +# define cnd_timedwait __cnd_timedwait64 +# endif +#endif + +/* Destroy condition variable pointed by __cond and free all of its + resources. */ +extern void cnd_destroy (cnd_t *__COND); + + +/* Thread specific storage functions. */ + +/* Create new thread-specific storage key and stores it in the object pointed + by __TSS_ID. If __DESTRUCTOR is not NULL, the function will be called when + the thread terminates. */ +extern int tss_create (tss_t *__tss_id, tss_dtor_t __destructor); + +/* Return the value held in thread-specific storage for the current thread + identified by __TSS_ID. */ +extern void *tss_get (tss_t __tss_id); + +/* Sets the value of the thread-specific storage identified by __TSS_ID for + the current thread to __VAL. */ +extern int tss_set (tss_t __tss_id, void *__val); + +/* Destroys the thread-specific storage identified by __TSS_ID. The + destructor is not called until thrd_exit is called. */ +extern void tss_delete (tss_t __tss_id); + +__END_DECLS + +#endif /* _THREADS_H */ diff --git a/board/mentalnet/overlay/usr/include/time.h b/board/mentalnet/overlay/usr/include/time.h new file mode 100644 index 0000000..4913508 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/time.h @@ -0,0 +1,454 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.23 Date and time + */ + +#ifndef _TIME_H +#define _TIME_H 1 + +#include + +#define __need_size_t +#define __need_NULL +#include + +/* This defines CLOCKS_PER_SEC, which is the number of processor clock + ticks per second, and possibly a number of other constants. */ +#include + +/* Many of the typedefs and structs whose official home is this header + may also need to be defined by other headers. */ +#include +#include +#include + +#if defined __USE_POSIX199309 || defined __USE_ISOC11 +# include +#endif + +#ifdef __USE_POSIX199309 +# include +# include +# include +struct sigevent; +#endif + +#ifdef __USE_XOPEN2K +# ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +# endif +#endif + +#ifdef __USE_XOPEN2K8 +# include +#endif + +#ifdef __USE_ISOC11 +/* Time base values for timespec_get. */ +# define TIME_UTC 1 +#endif + +__BEGIN_DECLS + +/* Time used by the program so far (user time + system time). + The result / CLOCKS_PER_SEC is program time in seconds. */ +extern clock_t clock (void) __THROW; + +#ifndef __USE_TIME64_REDIRECTS +/* Return the current time and put it in *TIMER if TIMER is not NULL. */ +extern time_t time (time_t *__timer) __THROW; + +/* Return the difference between TIME1 and TIME0. */ +extern double difftime (time_t __time1, time_t __time0); + +/* Return the `time_t' representation of TP and normalize TP. */ +extern time_t mktime (struct tm *__tp) __THROW; +#else +# ifdef __REDIRECT_NTH +extern time_t __REDIRECT_NTH (time, (time_t *__timer), __time64); +extern double __REDIRECT_NTH (difftime, (time_t __time1, time_t __time0), + __difftime64); +extern time_t __REDIRECT_NTH (mktime, (struct tm *__tp), __mktime64); +# else +# define time __time64 +# define difftime __difftime64 +# define mktime __mktime64 +# endif +#endif + +/* Format TP into S according to FORMAT. + Write no more than MAXSIZE characters and return the number + of characters written, or 0 if it would exceed MAXSIZE. */ +extern size_t strftime (char *__restrict __s, size_t __maxsize, + const char *__restrict __format, + const struct tm *__restrict __tp) + __THROW __nonnull((1, 3, 4)); + +#ifdef __USE_XOPEN +/* Parse S according to FORMAT and store binary time information in TP. + The return value is a pointer to the first unparsed character in S. */ +extern char *strptime (const char *__restrict __s, + const char *__restrict __fmt, struct tm *__tp) + __THROW; +#endif + +#ifdef __USE_XOPEN2K8 +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ + +extern size_t strftime_l (char *__restrict __s, size_t __maxsize, + const char *__restrict __format, + const struct tm *__restrict __tp, + locale_t __loc) __THROW; +#endif + +#ifdef __USE_GNU +extern char *strptime_l (const char *__restrict __s, + const char *__restrict __fmt, struct tm *__tp, + locale_t __loc) __THROW; +#endif + + +#ifndef __USE_TIME64_REDIRECTS +/* Return the `struct tm' representation of *TIMER + in Universal Coordinated Time (aka Greenwich Mean Time). */ +extern struct tm *gmtime (const time_t *__timer) __THROW; + +/* Return the `struct tm' representation + of *TIMER in the local timezone. */ +extern struct tm *localtime (const time_t *__timer) __THROW; + +#else +# ifdef __REDIRECT_NTH +extern struct tm*__REDIRECT_NTH (gmtime, (const time_t *__timer), __gmtime64); +extern struct tm *__REDIRECT_NTH (localtime, (const time_t *__timer), + __localtime64); +# else +# define gmtime __gmtime64 +# define localtime __localtime64 +# endif +#endif + + +#if defined __USE_POSIX || __GLIBC_USE (ISOC23) +# ifndef __USE_TIME64_REDIRECTS +/* Return the `struct tm' representation of *TIMER in UTC, + using *TP to store the result. */ +extern struct tm *gmtime_r (const time_t *__restrict __timer, + struct tm *__restrict __tp) __THROW; + +/* Return the `struct tm' representation of *TIMER in local time, + using *TP to store the result. */ +extern struct tm *localtime_r (const time_t *__restrict __timer, + struct tm *__restrict __tp) __THROW; +# else +# ifdef __REDIRECT_NTH +extern struct tm*__REDIRECT_NTH (gmtime_r, (const time_t *__restrict __timer, + struct tm *__restrict __tp), + __gmtime64_r); + +extern struct tm*__REDIRECT_NTH (localtime_r, (const time_t *__restrict __t, + struct tm *__restrict __tp), + __localtime64_r); +# else +# define gmtime_r __gmtime64_r +# define localtime_r __localtime_r +# endif +# endif +#endif /* POSIX || C23 */ + +/* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n" + that is the representation of TP in this format. */ +extern char *asctime (const struct tm *__tp) __THROW; + +/* Equivalent to `asctime (localtime (timer))'. */ +#ifndef __USE_TIME64_REDIRECTS +extern char *ctime (const time_t *__timer) __THROW; +#else +# ifdef __REDIRECT_NTH +extern char *__REDIRECT_NTH (ctime, (const time_t *__timer), __ctime64); +# else +# define ctime __ctime64 +# endif +#endif + +#ifdef __USE_POSIX +/* Reentrant versions of the above functions. */ + +/* Return in BUF a string of the form "Day Mon dd hh:mm:ss yyyy\n" + that is the representation of TP in this format. */ +extern char *asctime_r (const struct tm *__restrict __tp, + char *__restrict __buf) __THROW; + +/* Equivalent to `asctime_r (localtime_r (timer, *TMP*), buf)'. */ +#ifndef __USE_TIME64_REDIRECTS +extern char *ctime_r (const time_t *__restrict __timer, + char *__restrict __buf) __THROW; +#else +# ifdef __REDIRECT_NTH +extern char *__REDIRECT_NTH (ctime_r, (const time_t *__restrict __timer, + char *__restrict __buf), __ctime64_r); +# else +# define ctime_r __ctime64_r +# endif +#endif + +#endif /* POSIX */ + + +/* Defined in localtime.c. */ +extern char *__tzname[2]; /* Current time zone abbreviations. */ +extern int __daylight; /* If daylight-saving time is ever in use. */ +extern long int __timezone; /* Seconds west of UTC. */ + + +#ifdef __USE_POSIX +/* Same as above. */ +extern char *tzname[2]; + +/* Set time conversion information from the TZ environment variable. + If TZ is not defined, a locale-dependent default is used. */ +extern void tzset (void) __THROW; +#endif + +#if defined __USE_MISC || defined __USE_XOPEN +extern int daylight; +extern long int timezone; +#endif + + +/* Nonzero if YEAR is a leap year (every 4 years, + except every 100th isn't, and every 400th is). */ +#define __isleap(year) \ + ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) + + +#if defined __USE_MISC || __GLIBC_USE (ISOC23) +# ifndef __USE_TIME64_REDIRECTS +/* Like `mktime', but for TP represents Universal Time, not local time. */ +extern time_t timegm (struct tm *__tp) __THROW; +# else +# ifdef __REDIRECT_NTH +extern time_t __REDIRECT_NTH (timegm, (struct tm *__tp), __timegm64); +# else +# define timegm __timegm64 +# endif +# endif +#endif + + +#ifdef __USE_MISC +/* Miscellaneous functions many Unices inherited from the public domain + localtime package. These are included only for compatibility. */ + +#ifndef __USE_TIME64_REDIRECTS +/* Another name for `mktime'. */ +extern time_t timelocal (struct tm *__tp) __THROW; +#else +# ifdef __REDIRECT_NTH +extern time_t __REDIRECT_NTH (timelocal, (struct tm *__tp), __mktime64); +# endif +#endif + +/* Return the number of days in YEAR. */ +extern int dysize (int __year) __THROW __attribute__ ((__const__)); +#endif + + +#ifdef __USE_POSIX199309 +# ifndef __USE_TIME64_REDIRECTS +/* Pause execution for a number of nanoseconds. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int nanosleep (const struct timespec *__requested_time, + struct timespec *__remaining); + +/* Get resolution of clock CLOCK_ID. */ +extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW; + +/* Get current value of clock CLOCK_ID and store it in TP. */ +extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) + __THROW __nonnull((2)); + +/* Set clock CLOCK_ID to value TP. */ +extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) + __THROW __nonnull((2)); +# else +# ifdef __REDIRECT +extern int __REDIRECT (nanosleep, (const struct timespec *__requested_time, + struct timespec *__remaining), + __nanosleep64); +extern int __REDIRECT_NTH (clock_getres, (clockid_t __clock_id, + struct timespec *__res), + __clock_getres64); +extern int __REDIRECT_NTH (clock_gettime, (clockid_t __clock_id, struct + timespec *__tp), __clock_gettime64) + __nonnull((2)); +extern int __REDIRECT_NTH (clock_settime, (clockid_t __clock_id, const struct + timespec *__tp), __clock_settime64) + __nonnull((2)); +# else +# define nanosleep __nanosleep64 +# define clock_getres __clock_getres64 +# define clock_gettime __clock_gettime64 +# define clock_settime __clock_settime64 +# endif +# endif + + +# ifdef __USE_XOPEN2K +/* High-resolution sleep with the specified clock. + + This function is a cancellation point and therefore not marked with + __THROW. */ +# ifndef __USE_TIME64_REDIRECTS +extern int clock_nanosleep (clockid_t __clock_id, int __flags, + const struct timespec *__req, + struct timespec *__rem); +# else +# ifdef __REDIRECT +extern int __REDIRECT (clock_nanosleep, (clockid_t __clock_id, int __flags, + const struct timespec *__req, + struct timespec *__rem), + __clock_nanosleep_time64); +# else +# define clock_nanosleep __clock_nanosleep_time64 +# endif +# endif + +/* Return clock ID for CPU-time clock. */ +extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __THROW; +# endif + + +/* Create new per-process timer using CLOCK_ID. */ +extern int timer_create (clockid_t __clock_id, + struct sigevent *__restrict __evp, + timer_t *__restrict __timerid) __THROW; + +/* Delete timer TIMERID. */ +extern int timer_delete (timer_t __timerid) __THROW; + +/* Set timer TIMERID to VALUE, returning old value in OVALUE. */ +# ifndef __USE_TIME64_REDIRECTS +extern int timer_settime (timer_t __timerid, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue) __THROW; + +/* Get current value of timer TIMERID and store it in VALUE. */ +extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) + __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (timer_settime, (timer_t __timerid, int __flags, + const struct itimerspec *__restrict __value, + struct itimerspec *__restrict __ovalue), + __timer_settime64); + +extern int __REDIRECT_NTH (timer_gettime, (timer_t __timerid, + struct itimerspec *__value), + __timer_gettime64); +# else +# define timer_settime __timer_settime64 +# define timer_gettime __timer_gettime64 +# endif +# endif + +/* Get expiration overrun for timer TIMERID. */ +extern int timer_getoverrun (timer_t __timerid) __THROW; +#endif + + +#ifdef __USE_ISOC11 +# ifndef __USE_TIME64_REDIRECTS +/* Set TS to calendar time based in time base BASE. */ +extern int timespec_get (struct timespec *__ts, int __base) + __THROW __nonnull ((1)); +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (timespec_get, (struct timespec *__ts, int __base), + __timespec_get64) __nonnull ((1)); +# else +# define timespec_get __timespec_get64 +# endif +# endif +#endif + + +#if __GLIBC_USE (ISOC23) +# ifndef __USE_TIME64_REDIRECTS +/* Set TS to resolution of time base BASE. */ +extern int timespec_getres (struct timespec *__ts, int __base) + __THROW; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (timespec_getres, (struct timespec *__ts, + int __base), + __timespec_getres64); +# else +# define timespec_getres __timespec_getres64 +# endif +# endif +#endif + + +#ifdef __USE_XOPEN_EXTENDED +/* Set to one of the following values to indicate an error. + 1 the DATEMSK environment variable is null or undefined, + 2 the template file cannot be opened for reading, + 3 failed to get file status information, + 4 the template file is not a regular file, + 5 an error is encountered while reading the template file, + 6 memory allication failed (not enough memory available), + 7 there is no line in the template that matches the input, + 8 invalid input specification Example: February 31 or a time is + specified that can not be represented in a time_t (representing + the time in seconds since 00:00:00 UTC, January 1, 1970) */ +extern int getdate_err; + +/* Parse the given string as a date specification and return a value + representing the value. The templates from the file identified by + the environment variable DATEMSK are used. In case of an error + `getdate_err' is set. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct tm *getdate (const char *__string); +#endif + +#ifdef __USE_GNU +/* Since `getdate' is not reentrant because of the use of `getdate_err' + and the static buffer to return the result in, we provide a thread-safe + variant. The functionality is the same. The result is returned in + the buffer pointed to by RESBUFP and in case of an error the return + value is != 0 with the same values as given above for `getdate_err'. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int getdate_r (const char *__restrict __string, + struct tm *__restrict __resbufp); +#endif + +__END_DECLS + +#endif /* time.h. */ diff --git a/board/mentalnet/overlay/usr/include/ttyent.h b/board/mentalnet/overlay/usr/include/ttyent.h new file mode 100644 index 0000000..fe418a5 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/ttyent.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ttyent.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _TTYENT_H +#define _TTYENT_H 1 + +#include + +#define _PATH_TTYS "/etc/ttys" + +#define _TTYS_OFF "off" +#define _TTYS_ON "on" +#define _TTYS_SECURE "secure" +#define _TTYS_WINDOW "window" + +struct ttyent { + char *ty_name; /* terminal device name */ + char *ty_getty; /* command to execute, usually getty */ + char *ty_type; /* terminal type for termcap */ +#define TTY_ON 0x01 /* enable logins (start ty_getty program) */ +#define TTY_SECURE 0x02 /* allow uid of 0 to login */ + int ty_status; /* status flags */ + char *ty_window; /* command to start up window manager */ + char *ty_comment; /* comment field */ +}; + + +__BEGIN_DECLS + +extern struct ttyent *getttyent (void) __THROW; +extern struct ttyent *getttynam (const char *__tty) __THROW; +extern int setttyent (void) __THROW; +extern int endttyent (void) __THROW; + +__END_DECLS + +#endif /* ttyent.h */ diff --git a/board/mentalnet/overlay/usr/include/types.h b/board/mentalnet/overlay/usr/include/types.h new file mode 100644 index 0000000..ab3037a --- /dev/null +++ b/board/mentalnet/overlay/usr/include/types.h @@ -0,0 +1,232 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 2.6 Primitive System Data Types + */ + +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H 1 + +#include + +__BEGIN_DECLS + +#include + +#ifdef __USE_MISC +# ifndef __u_char_defined +typedef __u_char u_char; +typedef __u_short u_short; +typedef __u_int u_int; +typedef __u_long u_long; +typedef __quad_t quad_t; +typedef __u_quad_t u_quad_t; +typedef __fsid_t fsid_t; +# define __u_char_defined +# endif +typedef __loff_t loff_t; +#endif + +#ifndef __ino_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __ino_t ino_t; +# else +typedef __ino64_t ino_t; +# endif +# define __ino_t_defined +#endif +#if defined __USE_LARGEFILE64 && !defined __ino64_t_defined +typedef __ino64_t ino64_t; +# define __ino64_t_defined +#endif + +#ifndef __dev_t_defined +typedef __dev_t dev_t; +# define __dev_t_defined +#endif + +#ifndef __gid_t_defined +typedef __gid_t gid_t; +# define __gid_t_defined +#endif + +#ifndef __mode_t_defined +typedef __mode_t mode_t; +# define __mode_t_defined +#endif + +#ifndef __nlink_t_defined +typedef __nlink_t nlink_t; +# define __nlink_t_defined +#endif + +#ifndef __uid_t_defined +typedef __uid_t uid_t; +# define __uid_t_defined +#endif + +#ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +#endif +#if defined __USE_LARGEFILE64 && !defined __off64_t_defined +typedef __off64_t off64_t; +# define __off64_t_defined +#endif + +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \ + && !defined __id_t_defined +typedef __id_t id_t; +# define __id_t_defined +#endif + +#ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +#endif + +#ifdef __USE_MISC +# ifndef __daddr_t_defined +typedef __daddr_t daddr_t; +typedef __caddr_t caddr_t; +# define __daddr_t_defined +# endif +#endif + +#if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined +typedef __key_t key_t; +# define __key_t_defined +#endif + +#if defined __USE_XOPEN || defined __USE_XOPEN2K8 +# include +#endif +#include +#include +#include + +#ifdef __USE_XOPEN +# ifndef __useconds_t_defined +typedef __useconds_t useconds_t; +# define __useconds_t_defined +# endif +# ifndef __suseconds_t_defined +typedef __suseconds_t suseconds_t; +# define __suseconds_t_defined +# endif +#endif + +#define __need_size_t +#include + +#ifdef __USE_MISC +/* Old compatibility names for C types. */ +typedef unsigned long int ulong; +typedef unsigned short int ushort; +typedef unsigned int uint; +#endif + +/* These size-specific names are used by some of the inet code. */ + +#include + +/* These were defined by ISO C without the first `_'. */ +typedef __uint8_t u_int8_t; +typedef __uint16_t u_int16_t; +typedef __uint32_t u_int32_t; +typedef __uint64_t u_int64_t; + +#if __GNUC_PREREQ (2, 7) +typedef int register_t __attribute__ ((__mode__ (__word__))); +#else +typedef int register_t; +#endif + +/* Some code from BIND tests this macro to see if the types above are + defined. */ +#define __BIT_TYPES_DEFINED__ 1 + + +#ifdef __USE_MISC +/* In BSD is expected to define BYTE_ORDER. */ +# include + +/* It also defines `fd_set' and the FD_* macros for `select'. */ +# include +#endif /* Use misc. */ + + +#if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \ + && !defined __blksize_t_defined +typedef __blksize_t blksize_t; +# define __blksize_t_defined +#endif + +/* Types from the Large File Support interface. */ +#ifndef __USE_FILE_OFFSET64 +# ifndef __blkcnt_t_defined +typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */ +# define __blkcnt_t_defined +# endif +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#else +# ifndef __blkcnt_t_defined +typedef __blkcnt64_t blkcnt_t; /* Type to count number of disk blocks. */ +# define __blkcnt_t_defined +# endif +# ifndef __fsblkcnt_t_defined +typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */ +# define __fsblkcnt_t_defined +# endif +# ifndef __fsfilcnt_t_defined +typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */ +# define __fsfilcnt_t_defined +# endif +#endif + +#ifdef __USE_LARGEFILE64 +typedef __blkcnt64_t blkcnt64_t; /* Type to count number of disk blocks. */ +typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks. */ +typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes. */ +#endif + + +/* Now add the thread types. */ +#if defined __USE_POSIX199506 || defined __USE_UNIX98 +# include +#endif + +__END_DECLS + +#endif /* sys/types.h */ diff --git a/board/mentalnet/overlay/usr/include/uchar.h b/board/mentalnet/overlay/usr/include/uchar.h new file mode 100644 index 0000000..335bfa3 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/uchar.h @@ -0,0 +1,96 @@ +/* Copyright (C) 2011-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C11 Standard: 7.28 + * Unicode utilities + */ + +#ifndef _UCHAR_H +#define _UCHAR_H 1 + +#include + +#define __need_size_t +#include + +#include +#include + +/* Declare the C23 char8_t typedef in C23 modes, but only if the C++ + __cpp_char8_t feature test macro is not defined. */ +#if __GLIBC_USE (ISOC23) && !defined __cpp_char8_t +#if __GNUC_PREREQ (10, 0) && defined __cplusplus +/* Suppress the diagnostic regarding char8_t being a keyword in C++20. */ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++20-compat" +#endif +/* Define the 8-bit character type. */ +typedef unsigned char char8_t; +#if __GNUC_PREREQ (10, 0) && defined __cplusplus +# pragma GCC diagnostic pop +#endif +#endif + +#ifndef __USE_ISOCXX11 +/* Define the 16-bit and 32-bit character types. */ +typedef __uint_least16_t char16_t; +typedef __uint_least32_t char32_t; +#endif + + +__BEGIN_DECLS + +/* Declare the C23 mbrtoc8() and c8rtomb() functions in C23 modes or if + the C++ __cpp_char8_t feature test macro is defined. */ +#if __GLIBC_USE (ISOC23) || defined __cpp_char8_t +/* Write char8_t representation of multibyte character pointed + to by S to PC8. */ +extern size_t mbrtoc8 (char8_t *__restrict __pc8, + const char *__restrict __s, size_t __n, + mbstate_t *__restrict __p) __THROW; + +/* Write multibyte representation of char8_t C8 to S. */ +extern size_t c8rtomb (char *__restrict __s, char8_t __c8, + mbstate_t *__restrict __ps) __THROW; +#endif + +/* Write char16_t representation of multibyte character pointed + to by S to PC16. */ +extern size_t mbrtoc16 (char16_t *__restrict __pc16, + const char *__restrict __s, size_t __n, + mbstate_t *__restrict __p) __THROW; + +/* Write multibyte representation of char16_t C16 to S. */ +extern size_t c16rtomb (char *__restrict __s, char16_t __c16, + mbstate_t *__restrict __ps) __THROW; + + + +/* Write char32_t representation of multibyte character pointed + to by S to PC32. */ +extern size_t mbrtoc32 (char32_t *__restrict __pc32, + const char *__restrict __s, size_t __n, + mbstate_t *__restrict __p) __THROW; + +/* Write multibyte representation of char32_t C32 to S. */ +extern size_t c32rtomb (char *__restrict __s, char32_t __c32, + mbstate_t *__restrict __ps) __THROW; + +__END_DECLS + +#endif /* uchar.h */ diff --git a/board/mentalnet/overlay/usr/include/ucontext.h b/board/mentalnet/overlay/usr/include/ucontext.h new file mode 100644 index 0000000..34a3b49 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/ucontext.h @@ -0,0 +1,56 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* System V ABI compliant user-level context switching support. */ + +#ifndef _UCONTEXT_H +#define _UCONTEXT_H 1 + +#include + +/* Get definition of __INDIRECT_RETURN. */ +#include + +/* Get machine dependent definition of data structures. */ +#include + +__BEGIN_DECLS + +/* Get user context and store it in variable pointed to by UCP. */ +extern int getcontext (ucontext_t *__ucp) __THROWNL; + +/* Set user context from information of variable pointed to by UCP. */ +extern int setcontext (const ucontext_t *__ucp) __THROWNL; + +/* Save current context in context variable pointed to by OUCP and set + context from variable pointed to by UCP. */ +extern int swapcontext (ucontext_t *__restrict __oucp, + const ucontext_t *__restrict __ucp) + __THROWNL __INDIRECT_RETURN; + +/* Manipulate user context UCP to continue with calling functions FUNC + and the ARGC-1 parameters following ARGC when the context is used + the next time in `setcontext' or `swapcontext'. + + We cannot say anything about the parameters FUNC takes; `void' + is as good as any other choice. */ +extern void makecontext (ucontext_t *__ucp, void (*__func) (void), + int __argc, ...) __THROW; + +__END_DECLS + +#endif /* ucontext.h */ diff --git a/board/mentalnet/overlay/usr/include/ulimit.h b/board/mentalnet/overlay/usr/include/ulimit.h new file mode 100644 index 0000000..95c06b8 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/ulimit.h @@ -0,0 +1,47 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _ULIMIT_H +#define _ULIMIT_H 1 + +#include + +/* Constants used as the first parameter for `ulimit'. They denote limits + which can be set or retrieved using this function. */ +enum +{ + UL_GETFSIZE = 1, /* Return limit on the size of a file, + in units of 512 bytes. */ +#define UL_GETFSIZE UL_GETFSIZE + UL_SETFSIZE, /* Set limit on the size of a file to + second argument. */ +#define UL_SETFSIZE UL_SETFSIZE + __UL_GETMAXBRK, /* Return the maximum possible address + of the data segment. */ + __UL_GETOPENMAX /* Return the maximum number of files + that the calling process can open.*/ +}; + + +__BEGIN_DECLS + +/* Control process limits according to CMD. */ +extern long int ulimit (int __cmd, ...) __THROW; + +__END_DECLS + +#endif /* ulimit.h */ diff --git a/board/mentalnet/overlay/usr/include/unctrl.h b/board/mentalnet/overlay/usr/include/unctrl.h new file mode 100644 index 0000000..2e11f48 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/unctrl.h @@ -0,0 +1,68 @@ +/**************************************************************************** + * Copyright 2020 Thomas E. Dickey * + * Copyright 1998-2001,2009 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Zeyd M. Ben-Halim 1992,1995 * + * and: Eric S. Raymond * + ****************************************************************************/ + +/* + * unctrl.h + * + * Display a printable version of a control character. + * Control characters are displayed in caret notation (^x), DELETE is displayed + * as ^?. Printable characters are displayed as is. + */ + +/* $Id: unctrl.h.in,v 1.12 2020/02/02 23:34:34 tom Exp $ */ + +#ifndef NCURSES_UNCTRL_H_incl +#define NCURSES_UNCTRL_H_incl 1 + +#undef NCURSES_VERSION +#define NCURSES_VERSION "6.4" + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#undef unctrl +NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype); + +#if 1 +NCURSES_EXPORT(NCURSES_CONST char *) NCURSES_SP_NAME(unctrl) (SCREEN*, chtype); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* NCURSES_UNCTRL_H_incl */ diff --git a/board/mentalnet/overlay/usr/include/unistd.h b/board/mentalnet/overlay/usr/include/unistd.h new file mode 100644 index 0000000..3f4e426 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/unistd.h @@ -0,0 +1,1225 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 2.10 Symbolic Constants + */ + +#ifndef _UNISTD_H +#define _UNISTD_H 1 + +#include + +__BEGIN_DECLS + +/* These may be used to determine what facilities are present at compile time. + Their values can be obtained at run time from `sysconf'. */ + +#ifdef __USE_XOPEN2K8 +/* POSIX Standard approved as ISO/IEC 9945-1 as of September 2008. */ +# define _POSIX_VERSION 200809L +#elif defined __USE_XOPEN2K +/* POSIX Standard approved as ISO/IEC 9945-1 as of December 2001. */ +# define _POSIX_VERSION 200112L +#elif defined __USE_POSIX199506 +/* POSIX Standard approved as ISO/IEC 9945-1 as of June 1995. */ +# define _POSIX_VERSION 199506L +#elif defined __USE_POSIX199309 +/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1993. */ +# define _POSIX_VERSION 199309L +#else +/* POSIX Standard approved as ISO/IEC 9945-1 as of September 1990. */ +# define _POSIX_VERSION 199009L +#endif + +/* These are not #ifdef __USE_POSIX2 because they are + in the theoretically application-owned namespace. */ + +#ifdef __USE_XOPEN2K8 +# define __POSIX2_THIS_VERSION 200809L +/* The utilities on GNU systems also correspond to this version. */ +#elif defined __USE_XOPEN2K +/* The utilities on GNU systems also correspond to this version. */ +# define __POSIX2_THIS_VERSION 200112L +#elif defined __USE_POSIX199506 +/* The utilities on GNU systems also correspond to this version. */ +# define __POSIX2_THIS_VERSION 199506L +#else +/* The utilities on GNU systems also correspond to this version. */ +# define __POSIX2_THIS_VERSION 199209L +#endif + +/* The utilities on GNU systems also correspond to this version. */ +#define _POSIX2_VERSION __POSIX2_THIS_VERSION + +/* This symbol was required until the 2001 edition of POSIX. */ +#define _POSIX2_C_VERSION __POSIX2_THIS_VERSION + +/* If defined, the implementation supports the + C Language Bindings Option. */ +#define _POSIX2_C_BIND __POSIX2_THIS_VERSION + +/* If defined, the implementation supports the + C Language Development Utilities Option. */ +#define _POSIX2_C_DEV __POSIX2_THIS_VERSION + +/* If defined, the implementation supports the + Software Development Utilities Option. */ +#define _POSIX2_SW_DEV __POSIX2_THIS_VERSION + +/* If defined, the implementation supports the + creation of locales with the localedef utility. */ +#define _POSIX2_LOCALEDEF __POSIX2_THIS_VERSION + +/* X/Open version number to which the library conforms. It is selectable. */ +#ifdef __USE_XOPEN2K8 +# define _XOPEN_VERSION 700 +#elif defined __USE_XOPEN2K +# define _XOPEN_VERSION 600 +#elif defined __USE_UNIX98 +# define _XOPEN_VERSION 500 +#else +# define _XOPEN_VERSION 4 +#endif + +/* Commands and utilities from XPG4 are available. */ +#define _XOPEN_XCU_VERSION 4 + +/* We are compatible with the old published standards as well. */ +#define _XOPEN_XPG2 1 +#define _XOPEN_XPG3 1 +#define _XOPEN_XPG4 1 + +/* The X/Open Unix extensions are available. */ +#define _XOPEN_UNIX 1 + +/* The enhanced internationalization capabilities according to XPG4.2 + are present. */ +#define _XOPEN_ENH_I18N 1 + +/* The legacy interfaces are also available. */ +#define _XOPEN_LEGACY 1 + + +/* Get values of POSIX options: + + If these symbols are defined, the corresponding features are + always available. If not, they may be available sometimes. + The current values can be obtained with `sysconf'. + + _POSIX_JOB_CONTROL Job control is supported. + _POSIX_SAVED_IDS Processes have a saved set-user-ID + and a saved set-group-ID. + _POSIX_REALTIME_SIGNALS Real-time, queued signals are supported. + _POSIX_PRIORITY_SCHEDULING Priority scheduling is supported. + _POSIX_TIMERS POSIX.4 clocks and timers are supported. + _POSIX_ASYNCHRONOUS_IO Asynchronous I/O is supported. + _POSIX_PRIORITIZED_IO Prioritized asynchronous I/O is supported. + _POSIX_SYNCHRONIZED_IO Synchronizing file data is supported. + _POSIX_FSYNC The fsync function is present. + _POSIX_MAPPED_FILES Mapping of files to memory is supported. + _POSIX_MEMLOCK Locking of all memory is supported. + _POSIX_MEMLOCK_RANGE Locking of ranges of memory is supported. + _POSIX_MEMORY_PROTECTION Setting of memory protections is supported. + _POSIX_MESSAGE_PASSING POSIX.4 message queues are supported. + _POSIX_SEMAPHORES POSIX.4 counting semaphores are supported. + _POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported. + _POSIX_THREADS POSIX.1c pthreads are supported. + _POSIX_THREAD_ATTR_STACKADDR Thread stack address attribute option supported. + _POSIX_THREAD_ATTR_STACKSIZE Thread stack size attribute option supported. + _POSIX_THREAD_SAFE_FUNCTIONS Thread-safe functions are supported. + _POSIX_THREAD_PRIORITY_SCHEDULING + POSIX.1c thread execution scheduling supported. + _POSIX_THREAD_PRIO_INHERIT Thread priority inheritance option supported. + _POSIX_THREAD_PRIO_PROTECT Thread priority protection option supported. + _POSIX_THREAD_PROCESS_SHARED Process-shared synchronization supported. + _POSIX_PII Protocol-independent interfaces are supported. + _POSIX_PII_XTI XTI protocol-indep. interfaces are supported. + _POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported. + _POSIX_PII_INTERNET Internet family of protocols supported. + _POSIX_PII_INTERNET_STREAM Connection-mode Internet protocol supported. + _POSIX_PII_INTERNET_DGRAM Connectionless Internet protocol supported. + _POSIX_PII_OSI ISO/OSI family of protocols supported. + _POSIX_PII_OSI_COTS Connection-mode ISO/OSI service supported. + _POSIX_PII_OSI_CLTS Connectionless ISO/OSI service supported. + _POSIX_POLL Implementation supports `poll' function. + _POSIX_SELECT Implementation supports `select' and `pselect'. + + _XOPEN_REALTIME X/Open realtime support is available. + _XOPEN_REALTIME_THREADS X/Open realtime thread support is available. + _XOPEN_SHM Shared memory interface according to XPG4.2. + + _XBS5_ILP32_OFF32 Implementation provides environment with 32-bit + int, long, pointer, and off_t types. + _XBS5_ILP32_OFFBIG Implementation provides environment with 32-bit + int, long, and pointer and off_t with at least + 64 bits. + _XBS5_LP64_OFF64 Implementation provides environment with 32-bit + int, and 64-bit long, pointer, and off_t types. + _XBS5_LPBIG_OFFBIG Implementation provides environment with at + least 32 bits int and long, pointer, and off_t + with at least 64 bits. + + If any of these symbols is defined as -1, the corresponding option is not + true for any file. If any is defined as other than -1, the corresponding + option is true for all files. If a symbol is not defined at all, the value + for a specific file can be obtained from `pathconf' and `fpathconf'. + + _POSIX_CHOWN_RESTRICTED Only the super user can use `chown' to change + the owner of a file. `chown' can only be used + to change the group ID of a file to a group of + which the calling process is a member. + _POSIX_NO_TRUNC Pathname components longer than + NAME_MAX generate an error. + _POSIX_VDISABLE If defined, if the value of an element of the + `c_cc' member of `struct termios' is + _POSIX_VDISABLE, no character will have the + effect associated with that element. + _POSIX_SYNC_IO Synchronous I/O may be performed. + _POSIX_ASYNC_IO Asynchronous I/O may be performed. + _POSIX_PRIO_IO Prioritized Asynchronous I/O may be performed. + + Support for the Large File Support interface is not generally available. + If it is available the following constants are defined to one. + _LFS64_LARGEFILE Low-level I/O supports large files. + _LFS64_STDIO Standard I/O supports large files. + */ + +#include + +/* Get the environment definitions from Unix98. */ +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +# include +#endif + +/* Standard file descriptors. */ +#define STDIN_FILENO 0 /* Standard input. */ +#define STDOUT_FILENO 1 /* Standard output. */ +#define STDERR_FILENO 2 /* Standard error output. */ + + +/* All functions that are not declared anywhere else. */ + +#include + +#ifndef __ssize_t_defined +typedef __ssize_t ssize_t; +# define __ssize_t_defined +#endif + +#define __need_size_t +#define __need_NULL +#include + +#if defined __USE_XOPEN || defined __USE_XOPEN2K +/* The Single Unix specification says that some more types are + available here. */ +# ifndef __gid_t_defined +typedef __gid_t gid_t; +# define __gid_t_defined +# endif + +# ifndef __uid_t_defined +typedef __uid_t uid_t; +# define __uid_t_defined +# endif + +# ifndef __off_t_defined +# ifndef __USE_FILE_OFFSET64 +typedef __off_t off_t; +# else +typedef __off64_t off_t; +# endif +# define __off_t_defined +# endif +# if defined __USE_LARGEFILE64 && !defined __off64_t_defined +typedef __off64_t off64_t; +# define __off64_t_defined +# endif + +# ifndef __useconds_t_defined +typedef __useconds_t useconds_t; +# define __useconds_t_defined +# endif + +# ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +# endif +#endif /* X/Open */ + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K +# ifndef __intptr_t_defined +typedef __intptr_t intptr_t; +# define __intptr_t_defined +# endif +#endif + +#if defined __USE_MISC || defined __USE_XOPEN +# ifndef __socklen_t_defined +typedef __socklen_t socklen_t; +# define __socklen_t_defined +# endif +#endif + +/* Values for the second argument to access. + These may be OR'd together. */ +#define R_OK 4 /* Test for read permission. */ +#define W_OK 2 /* Test for write permission. */ +#define X_OK 1 /* Test for execute permission. */ +#define F_OK 0 /* Test for existence. */ + +/* Test for access to NAME using the real UID and real GID. */ +extern int access (const char *__name, int __type) __THROW __nonnull ((1)); + +#ifdef __USE_GNU +/* Test for access to NAME using the effective UID and GID + (as normal file operations use). */ +extern int euidaccess (const char *__name, int __type) + __THROW __nonnull ((1)); + +/* An alias for `euidaccess', used by some other systems. */ +extern int eaccess (const char *__name, int __type) + __THROW __nonnull ((1)); + +/* Execute program relative to a directory file descriptor. */ +extern int execveat (int __fd, const char *__path, char *const __argv[], + char *const __envp[], int __flags) + __THROW __nonnull ((2, 3)); +#endif + +#ifdef __USE_ATFILE +/* Test for access to FILE relative to the directory FD is open on. + If AT_EACCESS is set in FLAG, then use effective IDs like `eaccess', + otherwise use real IDs like `access'. */ +extern int faccessat (int __fd, const char *__file, int __type, int __flag) + __THROW __nonnull ((2)) __wur; +#endif /* Use GNU. */ + + +/* Values for the WHENCE argument to lseek. */ +#ifndef _STDIO_H /* has the same definitions. */ +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Seek from end of file. */ +# ifdef __USE_GNU +# define SEEK_DATA 3 /* Seek to next data. */ +# define SEEK_HOLE 4 /* Seek to next hole. */ +# endif +#endif + +#if defined __USE_MISC && !defined L_SET +/* Old BSD names for the same constants; just for compatibility. */ +# define L_SET SEEK_SET +# define L_INCR SEEK_CUR +# define L_XTND SEEK_END +#endif + + +/* Move FD's file position to OFFSET bytes from the + beginning of the file (if WHENCE is SEEK_SET), + the current position (if WHENCE is SEEK_CUR), + or the end of the file (if WHENCE is SEEK_END). + Return the new file position. */ +#ifndef __USE_FILE_OFFSET64 +extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW; +#else +# ifdef __REDIRECT_NTH +extern __off64_t __REDIRECT_NTH (lseek, + (int __fd, __off64_t __offset, int __whence), + lseek64); +# else +# define lseek lseek64 +# endif +#endif +#ifdef __USE_LARGEFILE64 +extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) + __THROW; +#endif + +/* Close the file descriptor FD. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int close (int __fd); + +#ifdef __USE_MISC +/* Close all open file descriptors greater than or equal to LOWFD. + Negative LOWFD is clamped to 0. */ +extern void closefrom (int __lowfd) __THROW; +#endif + +/* Read NBYTES into BUF from FD. Return the + number read, -1 for errors or 0 for EOF. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur + __fortified_attr_access (__write_only__, 2, 3); + +/* Write N bytes of BUF to FD. Return the number written, or -1. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur + __attr_access ((__read_only__, 2, 3)); + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 +# ifndef __USE_FILE_OFFSET64 +/* Read NBYTES into BUF from FD at the given position OFFSET without + changing the file pointer. Return the number read, -1 for errors + or 0 for EOF. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, + __off_t __offset) __wur + __fortified_attr_access (__write_only__, 2, 3); + +/* Write N bytes of BUF to FD at the given position OFFSET without + changing the file pointer. Return the number written, or -1. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t pwrite (int __fd, const void *__buf, size_t __n, + __off_t __offset) __wur + __attr_access ((__read_only__, 2, 3)); + +# else +# ifdef __REDIRECT +extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes, + __off64_t __offset), + pread64) __wur + __fortified_attr_access (__write_only__, 2, 3); +extern ssize_t __REDIRECT (pwrite, (int __fd, const void *__buf, + size_t __nbytes, __off64_t __offset), + pwrite64) __wur + __attr_access ((__read_only__, 2, 3)); +# else +# define pread pread64 +# define pwrite pwrite64 +# endif +# endif + +# ifdef __USE_LARGEFILE64 +/* Read NBYTES into BUF from FD at the given position OFFSET without + changing the file pointer. Return the number read, -1 for errors + or 0 for EOF. */ +extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, + __off64_t __offset) __wur + __fortified_attr_access (__write_only__, 2, 3); +/* Write N bytes of BUF to FD at the given position OFFSET without + changing the file pointer. Return the number written, or -1. */ +extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n, + __off64_t __offset) __wur + __attr_access ((__read_only__, 2, 3)); +# endif +#endif + +/* Create a one-way communication channel (pipe). + If successful, two file descriptors are stored in PIPEDES; + bytes written on PIPEDES[1] can be read from PIPEDES[0]. + Returns 0 if successful, -1 if not. */ +extern int pipe (int __pipedes[2]) __THROW __wur; + +#ifdef __USE_GNU +/* Same as pipe but apply flags passed in FLAGS to the new file + descriptors. */ +extern int pipe2 (int __pipedes[2], int __flags) __THROW __wur; +#endif + +/* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM. + If SECONDS is zero, any currently scheduled alarm will be cancelled. + The function returns the number of seconds remaining until the last + alarm scheduled would have signaled, or zero if there wasn't one. + There is no return value to indicate an error, but you can set `errno' + to 0 and check its value after calling `alarm', and this might tell you. + The signal may come late due to processor scheduling. */ +extern unsigned int alarm (unsigned int __seconds) __THROW; + +/* Make the process sleep for SECONDS seconds, or until a signal arrives + and is not ignored. The function returns the number of seconds less + than SECONDS which it actually slept (thus zero if it slept the full time). + If a signal handler does a `longjmp' or modifies the handling of the + SIGALRM signal while inside `sleep' call, the handling of the SIGALRM + signal afterwards is undefined. There is no return value to indicate + error, but if `sleep' returns SECONDS, it probably didn't work. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern unsigned int sleep (unsigned int __seconds); + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ + || defined __USE_MISC +/* Set an alarm to go off (generating a SIGALRM signal) in VALUE + microseconds. If INTERVAL is nonzero, when the alarm goes off, the + timer is reset to go off every INTERVAL microseconds thereafter. + Returns the number of microseconds remaining before the alarm. */ +extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) + __THROW; + +/* Sleep USECONDS microseconds, or until a signal arrives that is not blocked + or ignored. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int usleep (__useconds_t __useconds); +#endif + + +/* Suspend the process until a signal arrives. + This always returns -1 and sets `errno' to EINTR. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int pause (void); + + +/* Change the owner and group of FILE. */ +extern int chown (const char *__file, __uid_t __owner, __gid_t __group) + __THROW __nonnull ((1)) __wur; + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Change the owner and group of the file that FD is open on. */ +extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __THROW __wur; + + +/* Change owner and group of FILE, if it is a symbolic + link the ownership of the symbolic link is changed. */ +extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) + __THROW __nonnull ((1)) __wur; + +#endif /* Use X/Open Unix. */ + +#ifdef __USE_ATFILE +/* Change the owner and group of FILE relative to the directory FD is open + on. */ +extern int fchownat (int __fd, const char *__file, __uid_t __owner, + __gid_t __group, int __flag) + __THROW __nonnull ((2)) __wur; +#endif /* Use GNU. */ + +/* Change the process's working directory to PATH. */ +extern int chdir (const char *__path) __THROW __nonnull ((1)) __wur; + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Change the process's working directory to the one FD is open on. */ +extern int fchdir (int __fd) __THROW __wur; +#endif + +/* Get the pathname of the current working directory, + and put it in SIZE bytes of BUF. Returns NULL if the + directory couldn't be determined or SIZE was too small. + If successful, returns BUF. In GNU, if BUF is NULL, + an array is allocated with `malloc'; the array is SIZE + bytes long, unless SIZE == 0, in which case it is as + big as necessary. */ +extern char *getcwd (char *__buf, size_t __size) __THROW __wur; + +#ifdef __USE_GNU +/* Return a malloc'd string containing the current directory name. + If the environment variable `PWD' is set, and its value is correct, + that value is used. */ +extern char *get_current_dir_name (void) __THROW; +#endif + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ + || defined __USE_MISC +/* Put the absolute pathname of the current working directory in BUF. + If successful, return BUF. If not, put an error message in + BUF and return NULL. BUF should be at least PATH_MAX bytes long. */ +extern char *getwd (char *__buf) + __THROW __nonnull ((1)) __attribute_deprecated__ __wur + __attr_access ((__write_only__, 1)); +#endif + + +/* Duplicate FD, returning a new file descriptor on the same file. */ +extern int dup (int __fd) __THROW __wur; + +/* Duplicate FD to FD2, closing FD2 and making it open on the same file. */ +extern int dup2 (int __fd, int __fd2) __THROW; + +#ifdef __USE_GNU +/* Duplicate FD to FD2, closing FD2 and making it open on the same + file while setting flags according to FLAGS. */ +extern int dup3 (int __fd, int __fd2, int __flags) __THROW; +#endif + +/* NULL-terminated array of "NAME=VALUE" environment variables. */ +extern char **__environ; +#ifdef __USE_GNU +extern char **environ; +#endif + + +/* Replace the current process, executing PATH with arguments ARGV and + environment ENVP. ARGV and ENVP are terminated by NULL pointers. */ +extern int execve (const char *__path, char *const __argv[], + char *const __envp[]) __THROW __nonnull ((1, 2)); + +#ifdef __USE_XOPEN2K8 +/* Execute the file FD refers to, overlaying the running program image. + ARGV and ENVP are passed to the new program, as for `execve'. */ +extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) + __THROW __nonnull ((2)); +#endif + + +/* Execute PATH with arguments ARGV and environment from `environ'. */ +extern int execv (const char *__path, char *const __argv[]) + __THROW __nonnull ((1, 2)); + +/* Execute PATH with all arguments after PATH until a NULL pointer, + and the argument after that for environment. */ +extern int execle (const char *__path, const char *__arg, ...) + __THROW __nonnull ((1, 2)); + +/* Execute PATH with all arguments after PATH until + a NULL pointer and environment from `environ'. */ +extern int execl (const char *__path, const char *__arg, ...) + __THROW __nonnull ((1, 2)); + +/* Execute FILE, searching in the `PATH' environment variable if it contains + no slashes, with arguments ARGV and environment from `environ'. */ +extern int execvp (const char *__file, char *const __argv[]) + __THROW __nonnull ((1, 2)); + +/* Execute FILE, searching in the `PATH' environment variable if + it contains no slashes, with all arguments after FILE until a + NULL pointer and environment from `environ'. */ +extern int execlp (const char *__file, const char *__arg, ...) + __THROW __nonnull ((1, 2)); + +#ifdef __USE_GNU +/* Execute FILE, searching in the `PATH' environment variable if it contains + no slashes, with arguments ARGV and environment from `environ'. */ +extern int execvpe (const char *__file, char *const __argv[], + char *const __envp[]) + __THROW __nonnull ((1, 2)); +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN +/* Add INC to priority of the current process. */ +extern int nice (int __inc) __THROW __wur; +#endif + + +/* Terminate program execution with the low-order 8 bits of STATUS. */ +extern void _exit (int __status) __attribute__ ((__noreturn__)); + + +/* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf'; + the `_SC_*' symbols for the NAME argument to `sysconf'; + and the `_CS_*' symbols for the NAME argument to `confstr'. */ +#include + +/* Get file-specific configuration information about PATH. */ +extern long int pathconf (const char *__path, int __name) + __THROW __nonnull ((1)); + +/* Get file-specific configuration about descriptor FD. */ +extern long int fpathconf (int __fd, int __name) __THROW; + +/* Get the value of the system variable NAME. */ +extern long int sysconf (int __name) __THROW; + +#ifdef __USE_POSIX2 +/* Get the value of the string-valued system variable NAME. */ +extern size_t confstr (int __name, char *__buf, size_t __len) __THROW + __fortified_attr_access (__write_only__, 2, 3); +#endif + + +/* Get the process ID of the calling process. */ +extern __pid_t getpid (void) __THROW; + +/* Get the process ID of the calling process's parent. */ +extern __pid_t getppid (void) __THROW; + +/* Get the process group ID of the calling process. */ +extern __pid_t getpgrp (void) __THROW; + +/* Get the process group ID of process PID. */ +extern __pid_t __getpgid (__pid_t __pid) __THROW; +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +extern __pid_t getpgid (__pid_t __pid) __THROW; +#endif + + +/* Set the process group ID of the process matching PID to PGID. + If PID is zero, the current process's process group ID is set. + If PGID is zero, the process ID of the process is used. */ +extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW; + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Both System V and BSD have `setpgrp' functions, but with different + calling conventions. The BSD function is the same as POSIX.1 `setpgid' + (above). The System V function takes no arguments and puts the calling + process in its on group like `setpgid (0, 0)'. + + New programs should always use `setpgid' instead. + + GNU provides the POSIX.1 function. */ + +/* Set the process group ID of the calling process to its own PID. + This is exactly the same as `setpgid (0, 0)'. */ +extern int setpgrp (void) __THROW; + +#endif /* Use misc or X/Open. */ + +/* Create a new session with the calling process as its leader. + The process group IDs of the session and the calling process + are set to the process ID of the calling process, which is returned. */ +extern __pid_t setsid (void) __THROW; + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* Return the session ID of the given process. */ +extern __pid_t getsid (__pid_t __pid) __THROW; +#endif + +/* Get the real user ID of the calling process. */ +extern __uid_t getuid (void) __THROW; + +/* Get the effective user ID of the calling process. */ +extern __uid_t geteuid (void) __THROW; + +/* Get the real group ID of the calling process. */ +extern __gid_t getgid (void) __THROW; + +/* Get the effective group ID of the calling process. */ +extern __gid_t getegid (void) __THROW; + +/* If SIZE is zero, return the number of supplementary groups + the calling process is in. Otherwise, fill in the group IDs + of its supplementary groups in LIST and return the number written. */ +extern int getgroups (int __size, __gid_t __list[]) __THROW __wur + __fortified_attr_access (__write_only__, 2, 1); +#ifdef __USE_GNU +/* Return nonzero iff the calling process is in group GID. */ +extern int group_member (__gid_t __gid) __THROW; +#endif + +/* Set the user ID of the calling process to UID. + If the calling process is the super-user, set the real + and effective user IDs, and the saved set-user-ID to UID; + if not, the effective user ID is set to UID. */ +extern int setuid (__uid_t __uid) __THROW __wur; + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Set the real user ID of the calling process to RUID, + and the effective user ID of the calling process to EUID. */ +extern int setreuid (__uid_t __ruid, __uid_t __euid) __THROW __wur; +#endif + +#ifdef __USE_XOPEN2K +/* Set the effective user ID of the calling process to UID. */ +extern int seteuid (__uid_t __uid) __THROW __wur; +#endif /* Use POSIX.1-2001. */ + +/* Set the group ID of the calling process to GID. + If the calling process is the super-user, set the real + and effective group IDs, and the saved set-group-ID to GID; + if not, the effective group ID is set to GID. */ +extern int setgid (__gid_t __gid) __THROW __wur; + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED +/* Set the real group ID of the calling process to RGID, + and the effective group ID of the calling process to EGID. */ +extern int setregid (__gid_t __rgid, __gid_t __egid) __THROW __wur; +#endif + +#ifdef __USE_XOPEN2K +/* Set the effective group ID of the calling process to GID. */ +extern int setegid (__gid_t __gid) __THROW __wur; +#endif /* Use POSIX.1-2001. */ + +#ifdef __USE_GNU +/* Fetch the real user ID, effective user ID, and saved-set user ID, + of the calling process. */ +extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) + __THROW; + +/* Fetch the real group ID, effective group ID, and saved-set group ID, + of the calling process. */ +extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) + __THROW; + +/* Set the real user ID, effective user ID, and saved-set user ID, + of the calling process to RUID, EUID, and SUID, respectively. */ +extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) + __THROW __wur; + +/* Set the real group ID, effective group ID, and saved-set group ID, + of the calling process to RGID, EGID, and SGID, respectively. */ +extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) + __THROW __wur; +#endif + + +/* Clone the calling process, creating an exact copy. + Return -1 for errors, 0 to the new process, + and the process ID of the new process to the old process. */ +extern __pid_t fork (void) __THROWNL; + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ + || defined __USE_MISC +/* Clone the calling process, but without copying the whole address space. + The calling process is suspended until the new process exits or is + replaced by a call to `execve'. Return -1 for errors, 0 to the new process, + and the process ID of the new process to the old process. */ +extern __pid_t vfork (void) __THROW; +#endif /* Use misc or XPG < 7. */ + +#ifdef __USE_GNU +/* This is similar to fork, however it does not run the atfork handlers + neither reinitialize any internal locks in multithread case. + Different than fork, _Fork is async-signal-safe. */ +extern __pid_t _Fork (void) __THROW; +#endif + + +/* Return the pathname of the terminal FD is open on, or NULL on errors. + The returned storage is good only until the next call to this function. */ +extern char *ttyname (int __fd) __THROW; + +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +extern int ttyname_r (int __fd, char *__buf, size_t __buflen) + __THROW __nonnull ((2)) __wur + __fortified_attr_access (__write_only__, 2, 3); + +/* Return 1 if FD is a valid descriptor associated + with a terminal, zero if not. */ +extern int isatty (int __fd) __THROW; + +#ifdef __USE_MISC +/* Return the index into the active-logins file (utmp) for + the controlling terminal. */ +extern int ttyslot (void) __THROW; +#endif + + +/* Make a link to FROM named TO. */ +extern int link (const char *__from, const char *__to) + __THROW __nonnull ((1, 2)) __wur; + +#ifdef __USE_ATFILE +/* Like link but relative paths in TO and FROM are interpreted relative + to FROMFD and TOFD respectively. */ +extern int linkat (int __fromfd, const char *__from, int __tofd, + const char *__to, int __flags) + __THROW __nonnull ((2, 4)) __wur; +#endif + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K +/* Make a symbolic link to FROM named TO. */ +extern int symlink (const char *__from, const char *__to) + __THROW __nonnull ((1, 2)) __wur; + +/* Read the contents of the symbolic link PATH into no more than + LEN bytes of BUF. The contents are not null-terminated. + Returns the number of characters read, or -1 for errors. */ +extern ssize_t readlink (const char *__restrict __path, + char *__restrict __buf, size_t __len) + __THROW __nonnull ((1, 2)) __wur + __fortified_attr_access (__write_only__, 2, 3); + +#endif /* Use POSIX.1-2001. */ + +#ifdef __USE_ATFILE +/* Like symlink but a relative path in TO is interpreted relative to TOFD. */ +extern int symlinkat (const char *__from, int __tofd, + const char *__to) __THROW __nonnull ((1, 3)) __wur; + +/* Like readlink but a relative PATH is interpreted relative to FD. */ +extern ssize_t readlinkat (int __fd, const char *__restrict __path, + char *__restrict __buf, size_t __len) + __THROW __nonnull ((2, 3)) __wur + __fortified_attr_access (__write_only__, 3, 4); +#endif + +/* Remove the link NAME. */ +extern int unlink (const char *__name) __THROW __nonnull ((1)); + +#ifdef __USE_ATFILE +/* Remove the link NAME relative to FD. */ +extern int unlinkat (int __fd, const char *__name, int __flag) + __THROW __nonnull ((2)); +#endif + +/* Remove the directory PATH. */ +extern int rmdir (const char *__path) __THROW __nonnull ((1)); + + +/* Return the foreground process group ID of FD. */ +extern __pid_t tcgetpgrp (int __fd) __THROW; + +/* Set the foreground process group ID of FD set PGRP_ID. */ +extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW; + + +/* Return the login name of the user. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern char *getlogin (void); +#ifdef __USE_POSIX199506 +/* Return at most NAME_LEN characters of the login name of the user in NAME. + If it cannot be determined or some other error occurred, return the error + code. Otherwise return 0. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int getlogin_r (char *__name, size_t __name_len) __nonnull ((1)) + __fortified_attr_access (__write_only__, 1, 2); +#endif + +#ifdef __USE_MISC +/* Set the login name returned by `getlogin'. */ +extern int setlogin (const char *__name) __THROW __nonnull ((1)); +#endif + + +#ifdef __USE_POSIX2 +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. */ +# include +#endif + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K +/* Put the name of the current host in no more than LEN bytes of NAME. + The result is null-terminated if LEN is large enough for the full + name and the terminator. */ +extern int gethostname (char *__name, size_t __len) __THROW __nonnull ((1)) + __fortified_attr_access (__write_only__, 1, 2); +#endif + + +#if defined __USE_MISC +/* Set the name of the current host to NAME, which is LEN bytes long. + This call is restricted to the super-user. */ +extern int sethostname (const char *__name, size_t __len) + __THROW __nonnull ((1)) __wur __attr_access ((__read_only__, 1, 2)); + +/* Set the current machine's Internet number to ID. + This call is restricted to the super-user. */ +extern int sethostid (long int __id) __THROW __wur; + + +/* Get and set the NIS (aka YP) domain name, if any. + Called just like `gethostname' and `sethostname'. + The NIS domain name is usually the empty string when not using NIS. */ +extern int getdomainname (char *__name, size_t __len) + __THROW __nonnull ((1)) __wur + __fortified_attr_access (__write_only__, 1, 2); +extern int setdomainname (const char *__name, size_t __len) + __THROW __nonnull ((1)) __wur __attr_access ((__read_only__, 1, 2)); + +/* Revoke access permissions to all processes currently communicating + with the control terminal, and then send a SIGHUP signal to the process + group of the control terminal. */ +extern int vhangup (void) __THROW; + +/* Revoke the access of all descriptors currently open on FILE. */ +extern int revoke (const char *__file) __THROW __nonnull ((1)) __wur; + + +/* Enable statistical profiling, writing samples of the PC into at most + SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling + is enabled, the system examines the user PC and increments + SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536]. If SCALE is zero, + disable profiling. Returns zero on success, -1 on error. */ +extern int profil (unsigned short int *__sample_buffer, size_t __size, + size_t __offset, unsigned int __scale) + __THROW __nonnull ((1)); + + +/* Turn accounting on if NAME is an existing file. The system will then write + a record for each process as it terminates, to this file. If NAME is NULL, + turn accounting off. This call is restricted to the super-user. */ +extern int acct (const char *__name) __THROW; + + +/* Successive calls return the shells listed in `/etc/shells'. */ +extern char *getusershell (void) __THROW; +extern void endusershell (void) __THROW; /* Discard cached info. */ +extern void setusershell (void) __THROW; /* Rewind and re-read the file. */ + + +/* Put the program in the background, and dissociate from the controlling + terminal. If NOCHDIR is zero, do `chdir ("/")'. If NOCLOSE is zero, + redirects stdin, stdout, and stderr to /dev/null. */ +extern int daemon (int __nochdir, int __noclose) __THROW __wur; +#endif /* Use misc. */ + + +#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) +/* Make PATH be the root directory (the starting point for absolute paths). + This call is restricted to the super-user. */ +extern int chroot (const char *__path) __THROW __nonnull ((1)) __wur; + +/* Prompt with PROMPT and read a string from the terminal without echoing. + Uses /dev/tty if possible; otherwise stderr and stdin. */ +extern char *getpass (const char *__prompt) __nonnull ((1)); +#endif /* Use misc || X/Open. */ + + +/* Make all changes done to FD actually appear on disk. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int fsync (int __fd); + + +#ifdef __USE_GNU +/* Make all changes done to all files on the file system associated + with FD actually appear on disk. */ +extern int syncfs (int __fd) __THROW; +#endif + + +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED + +/* Return identifier for the current host. */ +extern long int gethostid (void); + +/* Make all changes done to all files actually appear on disk. */ +extern void sync (void) __THROW; + + +# if defined __USE_MISC || !defined __USE_XOPEN2K +/* Return the number of bytes in a page. This is the system's page size, + which is not necessarily the same as the hardware page size. */ +extern int getpagesize (void) __THROW __attribute__ ((__const__)); + + +/* Return the maximum number of file descriptors + the current process could possibly have. */ +extern int getdtablesize (void) __THROW; +# endif + +#endif /* Use misc || X/Open Unix. */ + + +#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 + +/* Truncate FILE to LENGTH bytes. */ +# ifndef __USE_FILE_OFFSET64 +extern int truncate (const char *__file, __off_t __length) + __THROW __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (truncate, + (const char *__file, __off64_t __length), + truncate64) __nonnull ((1)) __wur; +# else +# define truncate truncate64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int truncate64 (const char *__file, __off64_t __length) + __THROW __nonnull ((1)) __wur; +# endif + +#endif /* Use X/Open Unix || POSIX 2008. */ + +#if defined __USE_POSIX199309 \ + || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K + +/* Truncate the file FD is open on to LENGTH bytes. */ +# ifndef __USE_FILE_OFFSET64 +extern int ftruncate (int __fd, __off_t __length) __THROW __wur; +# else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (ftruncate, (int __fd, __off64_t __length), + ftruncate64) __wur; +# else +# define ftruncate ftruncate64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int ftruncate64 (int __fd, __off64_t __length) __THROW __wur; +# endif + +#endif /* Use POSIX.1b || X/Open Unix || XPG6. */ + + +#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \ + || defined __USE_MISC + +/* Set the end of accessible data space (aka "the break") to ADDR. + Returns zero on success and -1 for errors (with errno set). */ +extern int brk (void *__addr) __THROW __wur; + +/* Increase or decrease the end of accessible data space by DELTA bytes. + If successful, returns the address the previous end of data space + (i.e. the beginning of the new space, if DELTA > 0); + returns (void *) -1 for errors (with errno set). */ +extern void *sbrk (intptr_t __delta) __THROW; +#endif + + +#ifdef __USE_MISC +/* Invoke `system call' number SYSNO, passing it the remaining arguments. + This is completely system-dependent, and not often useful. + + In Unix, `syscall' sets `errno' for all errors and most calls return -1 + for errors; in many systems you cannot pass arguments or get return + values for all system calls (`pipe', `fork', and `getppid' typically + among them). + + In Mach, all system calls take normal arguments and always return an + error code (zero for success). */ +extern long int syscall (long int __sysno, ...) __THROW; + +#endif /* Use misc. */ + + +#if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK +/* NOTE: These declarations also appear in ; be sure to keep both + files consistent. Some systems have them there and some here, and some + software depends on the macros being defined without including both. */ + +/* `lockf' is a simpler interface to the locking facilities of `fcntl'. + LEN is always relative to the current file position. + The CMD argument is one of the following. + + This function is a cancellation point and therefore not marked with + __THROW. */ + +# define F_ULOCK 0 /* Unlock a previously locked region. */ +# define F_LOCK 1 /* Lock a region for exclusive use. */ +# define F_TLOCK 2 /* Test and lock a region for exclusive use. */ +# define F_TEST 3 /* Test a region for other processes locks. */ + +# ifndef __USE_FILE_OFFSET64 +extern int lockf (int __fd, int __cmd, __off_t __len) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), + lockf64) __wur; +# else +# define lockf lockf64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur; +# endif +#endif /* Use misc and F_LOCK not already defined. */ + + +#ifdef __USE_GNU + +/* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno' + set to EINTR. */ + +# define TEMP_FAILURE_RETRY(expression) \ + (__extension__ \ + ({ long int __result; \ + do __result = (long int) (expression); \ + while (__result == -1L && errno == EINTR); \ + __result; })) + +/* Copy LENGTH bytes from INFD to OUTFD. */ +ssize_t copy_file_range (int __infd, __off64_t *__pinoff, + int __outfd, __off64_t *__poutoff, + size_t __length, unsigned int __flags); +#endif /* __USE_GNU */ + +#if defined __USE_POSIX199309 || defined __USE_UNIX98 +/* Synchronize at least the data part of a file with the underlying + media. */ +extern int fdatasync (int __fildes); +#endif /* Use POSIX199309 */ + +#ifdef __USE_MISC +/* One-way hash PHRASE, returning a string suitable for storage in the + user database. SALT selects the one-way function to use, and + ensures that no two users' hashes are the same, even if they use + the same passphrase. The return value points to static storage + which will be overwritten by the next call to crypt. + + This declaration is deprecated; applications should include + instead. */ +extern char *crypt (const char *__key, const char *__salt) + __THROW __nonnull ((1, 2)); +#endif + +#ifdef __USE_XOPEN +/* Swab pairs bytes in the first N bytes of the area pointed to by + FROM and copy the result to TO. The value of TO must not be in the + range [FROM - N + 1, FROM - 1]. If N is odd the first byte in FROM + is without partner. */ +extern void swab (const void *__restrict __from, void *__restrict __to, + ssize_t __n) __THROW __nonnull ((1, 2)) + __attr_access ((__read_only__, 1, 3)) + __attr_access ((__write_only__, 2, 3)); +#endif + + +/* Prior to Issue 6, the Single Unix Specification required these + prototypes to appear in this header. They are also found in + . */ +#if defined __USE_XOPEN && !defined __USE_XOPEN2K +/* Return the name of the controlling terminal. */ +extern char *ctermid (char *__s) __THROW; + +/* Return the name of the current user. */ +extern char *cuserid (char *__s); +#endif + + +/* Unix98 requires this function to be declared here. In other + standards it is in . */ +#if defined __USE_UNIX98 && !defined __USE_XOPEN2K +extern int pthread_atfork (void (*__prepare) (void), + void (*__parent) (void), + void (*__child) (void)) __THROW; +#endif + +#ifdef __USE_MISC +/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on + success or -1 on error. */ +int getentropy (void *__buffer, size_t __length) __wur + __attr_access ((__write_only__, 1, 2)); +#endif + +#ifdef __USE_GNU +/* Close all file descriptors in the range FD up to MAX_FD. The flag FLAGS + are define by the CLOSE_RANGE prefix. This function behaves like close + on the range and gaps where the file descriptor is invalid or errors + encountered while closing file descriptors are ignored. Returns 0 on + successor or -1 for failure (and sets errno accordingly). */ +extern int close_range (unsigned int __fd, unsigned int __max_fd, + int __flags) __THROW; +#endif + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +# include +#endif + +/* System-specific extensions. */ +#include + +__END_DECLS + +#endif /* unistd.h */ diff --git a/board/mentalnet/overlay/usr/include/utime.h b/board/mentalnet/overlay/usr/include/utime.h new file mode 100644 index 0000000..bc51642 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/utime.h @@ -0,0 +1,66 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * POSIX Standard: 5.6.6 Set File Access and Modification Times + */ + +#ifndef _UTIME_H +#define _UTIME_H 1 + +#include + +__BEGIN_DECLS + +#include + +#if defined __USE_XOPEN || defined __USE_XOPEN2K +# include +#endif + +/* Structure describing file times. */ +struct utimbuf + { +#ifdef __USE_TIME64_REDIRECTS + __time64_t actime; /* Access time. */ + __time64_t modtime; /* Modification time. */ +#else + __time_t actime; /* Access time. */ + __time_t modtime; /* Modification time. */ +#endif + }; + +/* Set the access and modification times of FILE to those given in + *FILE_TIMES. If FILE_TIMES is NULL, set them to the current time. */ +#ifndef __USE_TIME64_REDIRECTS +extern int utime (const char *__file, + const struct utimbuf *__file_times) + __THROW __nonnull ((1)); + +#else +# ifdef __REDIRECT_NTH +extern int __REDIRECT_NTH (utime, (const char *__file, + const struct utimbuf *__file_times), + __utime64); +# else +# define utime __utime64 +# endif +#endif + +__END_DECLS + +#endif /* utime.h */ diff --git a/board/mentalnet/overlay/usr/include/utmp.h b/board/mentalnet/overlay/usr/include/utmp.h new file mode 100644 index 0000000..ae9d3ca --- /dev/null +++ b/board/mentalnet/overlay/usr/include/utmp.h @@ -0,0 +1,96 @@ +/* Copyright (C) 1993-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _UTMP_H +#define _UTMP_H 1 + +#include + +#include + + +__BEGIN_DECLS + +/* Get system dependent values and data structures. */ +#include + +/* Compatibility names for the strings of the canonical file names. */ +#define UTMP_FILE _PATH_UTMP +#define UTMP_FILENAME _PATH_UTMP +#define WTMP_FILE _PATH_WTMP +#define WTMP_FILENAME _PATH_WTMP + + + +/* Make FD be the controlling terminal, stdin, stdout, and stderr; + then close FD. Returns 0 on success, nonzero on error. */ +extern int login_tty (int __fd) __THROW; + + +/* Write the given entry into utmp and wtmp. */ +extern void login (const struct utmp *__entry) __THROW; + +/* Write the utmp entry to say the user on UT_LINE has logged out. */ +extern int logout (const char *__ut_line) __THROW; + +/* Append to wtmp an entry for the current time and the given info. */ +extern void logwtmp (const char *__ut_line, const char *__ut_name, + const char *__ut_host) __THROW; + +/* Append entry UTMP to the wtmp-like file WTMP_FILE. */ +extern void updwtmp (const char *__wtmp_file, const struct utmp *__utmp) + __THROW; + +/* Change name of the utmp file to be examined. */ +extern int utmpname (const char *__file) __THROW; + +/* Read next entry from a utmp-like file. */ +extern struct utmp *getutent (void) __THROW; + +/* Reset the input stream to the beginning of the file. */ +extern void setutent (void) __THROW; + +/* Close the current open file. */ +extern void endutent (void) __THROW; + +/* Search forward from the current point in the utmp file until the + next entry with a ut_type matching ID->ut_type. */ +extern struct utmp *getutid (const struct utmp *__id) __THROW; + +/* Search forward from the current point in the utmp file until the + next entry with a ut_line matching LINE->ut_line. */ +extern struct utmp *getutline (const struct utmp *__line) __THROW; + +/* Write out entry pointed to by UTMP_PTR into the utmp file. */ +extern struct utmp *pututline (const struct utmp *__utmp_ptr) __THROW; + + +#ifdef __USE_MISC +/* Reentrant versions of the file for handling utmp files. */ +extern int getutent_r (struct utmp *__buffer, struct utmp **__result) __THROW; + +extern int getutid_r (const struct utmp *__id, struct utmp *__buffer, + struct utmp **__result) __THROW; + +extern int getutline_r (const struct utmp *__line, + struct utmp *__buffer, struct utmp **__result) __THROW; + +#endif /* Use misc. */ + +__END_DECLS + +#endif /* utmp.h */ diff --git a/board/mentalnet/overlay/usr/include/utmpx.h b/board/mentalnet/overlay/usr/include/utmpx.h new file mode 100644 index 0000000..3d0ba6c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/utmpx.h @@ -0,0 +1,125 @@ +/* Copyright (C) 1997-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _UTMPX_H +#define _UTMPX_H 1 + +#include +#include + +/* Required according to Unix98. */ +#ifndef __pid_t_defined +typedef __pid_t pid_t; +# define __pid_t_defined +#endif + +/* Get system dependent values and data structures. */ +#include + +#ifdef __USE_GNU +/* Compatibility names for the strings of the canonical file names. */ +# define UTMPX_FILE _PATH_UTMPX +# define UTMPX_FILENAME _PATH_UTMPX +# define WTMPX_FILE _PATH_WTMPX +# define WTMPX_FILENAME _PATH_WTMPX +#endif + +/* For the getutmp{,x} functions we need the `struct utmp'. */ +#ifdef __USE_GNU +struct utmp; +#endif + + +__BEGIN_DECLS + +/* Open user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void setutxent (void); + +/* Close user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern void endutxent (void); + +/* Get the next entry from the user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *getutxent (void); + +/* Get the user accounting database entry corresponding to ID. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *getutxid (const struct utmpx *__id); + +/* Get the user accounting database entry corresponding to LINE. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *getutxline (const struct utmpx *__line); + +/* Write the entry UTMPX into the user accounting database. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern struct utmpx *pututxline (const struct utmpx *__utmpx); + + +#ifdef __USE_GNU +/* Change name of the utmpx file to be examined. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int utmpxname (const char *__file); + +/* Append entry UTMP to the wtmpx-like file WTMPX_FILE. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void updwtmpx (const char *__wtmpx_file, + const struct utmpx *__utmpx); + + +/* Copy the information in UTMPX to UTMP. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void getutmp (const struct utmpx *__utmpx, + struct utmp *__utmp); + +/* Copy the information in UTMP to UTMPX. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void getutmpx (const struct utmp *__utmp, struct utmpx *__utmpx); +#endif + +__END_DECLS + +#endif /* utmpx.h */ diff --git a/board/mentalnet/overlay/usr/include/values.h b/board/mentalnet/overlay/usr/include/values.h new file mode 100644 index 0000000..ebe88c5 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/values.h @@ -0,0 +1,68 @@ +/* Old compatibility names for and constants. + Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* This interface is obsolete. New programs should use + and/or instead of . */ + +#ifndef _VALUES_H +#define _VALUES_H 1 + +#include + +#include + +#define _TYPEBITS(type) (sizeof (type) * CHAR_BIT) + +#define CHARBITS _TYPEBITS (char) +#define SHORTBITS _TYPEBITS (short int) +#define INTBITS _TYPEBITS (int) +#define LONGBITS _TYPEBITS (long int) +#define PTRBITS _TYPEBITS (char *) +#define DOUBLEBITS _TYPEBITS (double) +#define FLOATBITS _TYPEBITS (float) + +#define MINSHORT SHRT_MIN +#define MININT INT_MIN +#define MINLONG LONG_MIN + +#define MAXSHORT SHRT_MAX +#define MAXINT INT_MAX +#define MAXLONG LONG_MAX + +#define HIBITS MINSHORT +#define HIBITL MINLONG + + +#include + +#define MAXDOUBLE DBL_MAX +#define MAXFLOAT FLT_MAX +#define MINDOUBLE DBL_MIN +#define MINFLOAT FLT_MIN +#define DMINEXP DBL_MIN_EXP +#define FMINEXP FLT_MIN_EXP +#define DMAXEXP DBL_MAX_EXP +#define FMAXEXP FLT_MAX_EXP + + +#ifdef __USE_MISC +/* Some systems define this name instead of CHAR_BIT or CHARBITS. */ +# define BITSPERBYTE CHAR_BIT +#endif + +#endif /* values.h */ diff --git a/board/mentalnet/overlay/usr/include/wait.h b/board/mentalnet/overlay/usr/include/wait.h new file mode 100644 index 0000000..d01b811 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/wait.h @@ -0,0 +1 @@ +#include diff --git a/board/mentalnet/overlay/usr/include/wchar.h b/board/mentalnet/overlay/usr/include/wchar.h new file mode 100644 index 0000000..b31ca2d --- /dev/null +++ b/board/mentalnet/overlay/usr/include/wchar.h @@ -0,0 +1,1075 @@ +/* Copyright (C) 1995-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.24 + * Extended multibyte and wide character utilities + */ + +#ifndef _WCHAR_H +#define _WCHAR_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include + +/* Gather machine dependent type support. */ +#include + +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#include + +#define __need___va_list +#include + +#if defined __USE_XOPEN2K || defined __USE_XOPEN2K8 +# ifdef __GNUC__ +# ifndef _VA_LIST_DEFINED +typedef __gnuc_va_list va_list; +# define _VA_LIST_DEFINED +# endif +# else +# include +# endif +#endif + +#include +#include +#include +#include + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +# include +#endif +#ifdef __USE_XOPEN2K8 +# include +#endif + +/* Tell the caller that we provide correct C++ prototypes. */ +#if defined __cplusplus && __GNUC_PREREQ (4, 4) +# define __CORRECT_ISO_CPP_WCHAR_H_PROTO +#endif + +#ifndef WCHAR_MIN +/* These constants might also be defined in . */ +# define WCHAR_MIN __WCHAR_MIN +# define WCHAR_MAX __WCHAR_MAX +#endif + +#ifndef WEOF +# define WEOF (0xffffffffu) +#endif + +/* All versions of XPG prior to the publication of ISO C99 required + the bulk of 's declarations to appear in this header + (because did not exist prior to C99). In POSIX.1-2001 + those declarations were marked as XSI extensions; in -2008 they + were additionally marked as obsolescent. _GNU_SOURCE mode + anticipates the removal of these declarations in the next revision + of POSIX. */ +#if (defined __USE_XOPEN && !defined __USE_GNU \ + && !(defined __USE_XOPEN2K && !defined __USE_XOPEN2KXSI)) +# include +#endif + +__BEGIN_DECLS + +/* This incomplete type is defined in but needed here because + of `wcsftime'. */ +struct tm; + + +/* Copy SRC to DEST. */ +extern wchar_t *wcscpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src) + __THROW __nonnull ((1, 2)); + +/* Copy no more than N wide-characters of SRC to DEST. */ +extern wchar_t *wcsncpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); + +#ifdef __USE_MISC +/* Copy at most N - 1 characters from SRC to DEST. */ +extern size_t wcslcpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__write_only__, 1, 3)); + +/* Append SRC to DEST, possibly with truncation to keep the total size + below N. */ +extern size_t wcslcat (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)) __attr_access ((__read_write__, 1, 3)); +#endif + +/* Append SRC onto DEST. */ +extern wchar_t *wcscat (wchar_t *__restrict __dest, + const wchar_t *__restrict __src) + __THROW __nonnull ((1, 2)); +/* Append no more than N wide-characters of SRC onto DEST. */ +extern wchar_t *wcsncat (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW __nonnull ((1, 2)); + +/* Compare S1 and S2. */ +extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) + __THROW __attribute_pure__ __nonnull ((1, 2)); +/* Compare N wide-characters of S1 and S2. */ +extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) + __THROW __attribute_pure__ __nonnull ((1, 2)); + +#ifdef __USE_XOPEN2K8 +/* Compare S1 and S2, ignoring case. */ +extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) __THROW; + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, + size_t __n) __THROW; + +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ +extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, + locale_t __loc) __THROW; + +extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, + size_t __n, locale_t __loc) __THROW; +#endif + +/* Compare S1 and S2, both interpreted as appropriate to the + LC_COLLATE category of the current locale. */ +extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW; +/* Transform S2 into array pointed to by S1 such that if wcscmp is + applied to two transformed strings the result is the as applying + `wcscoll' to the original strings. */ +extern size_t wcsxfrm (wchar_t *__restrict __s1, + const wchar_t *__restrict __s2, size_t __n) __THROW; + +#ifdef __USE_XOPEN2K8 +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ + +/* Compare S1 and S2, both interpreted as appropriate to the + LC_COLLATE category of the given locale. */ +extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, + locale_t __loc) __THROW; + +/* Transform S2 into array pointed to by S1 such that if wcscmp is + applied to two transformed strings the result is the as applying + `wcscoll' to the original strings. */ +extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, + size_t __n, locale_t __loc) __THROW; + +/* Duplicate S, returning an identical malloc'd string. */ +extern wchar_t *wcsdup (const wchar_t *__s) __THROW + __attribute_malloc__ __attr_dealloc_free; +#endif + +/* Find the first occurrence of WC in WCS. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcschr") __attribute_pure__; +extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcschr") __attribute_pure__; +#else +extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) + __THROW __attribute_pure__; +#endif +/* Find the last occurrence of WC in WCS. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcsrchr") __attribute_pure__; +extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) + __THROW __asm ("wcsrchr") __attribute_pure__; +#else +extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) + __THROW __attribute_pure__; +#endif + +#ifdef __USE_GNU +/* This function is similar to `wcschr'. But it returns a pointer to + the closing NUL wide character in case C is not found in S. */ +extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) + __THROW __attribute_pure__; +#endif + +/* Return the length of the initial segmet of WCS which + consists entirely of wide characters not in REJECT. */ +extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) + __THROW __attribute_pure__; +/* Return the length of the initial segmet of WCS which + consists entirely of wide characters in ACCEPT. */ +extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) + __THROW __attribute_pure__; +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) + __THROW __asm ("wcspbrk") __attribute_pure__; +extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, + const wchar_t *__accept) + __THROW __asm ("wcspbrk") __attribute_pure__; +#else +extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept) + __THROW __attribute_pure__; +#endif +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) + __THROW __asm ("wcsstr") __attribute_pure__; +extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, + const wchar_t *__needle) + __THROW __asm ("wcsstr") __attribute_pure__; +#else +extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle) + __THROW __attribute_pure__; +#endif + +/* Divide WCS into tokens separated by characters in DELIM. */ +extern wchar_t *wcstok (wchar_t *__restrict __s, + const wchar_t *__restrict __delim, + wchar_t **__restrict __ptr) __THROW; + +/* Return the number of wide characters in S. */ +extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__; + +#ifdef __USE_XOPEN +/* Another name for `wcsstr' from XPG4. */ +# ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) + __THROW __asm ("wcswcs") __attribute_pure__; +extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, + const wchar_t *__needle) + __THROW __asm ("wcswcs") __attribute_pure__; +# else +extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle) + __THROW __attribute_pure__; +# endif +#endif + +#ifdef __USE_XOPEN2K8 +/* Return the number of wide characters in S, but at most MAXLEN. */ +extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) + __THROW __attribute_pure__; +#endif + + +/* Search N wide characters of S for C. */ +#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO +extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) + __THROW __asm ("wmemchr") __attribute_pure__; +extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, + size_t __n) + __THROW __asm ("wmemchr") __attribute_pure__; +#else +extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n) + __THROW __attribute_pure__; +#endif + +/* Compare N wide characters of S1 and S2. */ +extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) + __THROW __attribute_pure__; + +/* Copy N wide characters of SRC to DEST. */ +extern wchar_t *wmemcpy (wchar_t *__restrict __s1, + const wchar_t *__restrict __s2, size_t __n) __THROW; + +/* Copy N wide characters of SRC to DEST, guaranteeing + correct behavior for overlapping strings. */ +extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) + __THROW; + +/* Set N wide characters of S to C. */ +extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) __THROW; + +#ifdef __USE_GNU +/* Copy N wide characters of SRC to DEST and return pointer to following + wide character. */ +extern wchar_t *wmempcpy (wchar_t *__restrict __s1, + const wchar_t *__restrict __s2, size_t __n) + __THROW; +#endif + + +/* Determine whether C constitutes a valid (one-byte) multibyte + character. */ +extern wint_t btowc (int __c) __THROW; + +/* Determine whether C corresponds to a member of the extended + character set whose multibyte representation is a single byte. */ +extern int wctob (wint_t __c) __THROW; + +/* Determine whether PS points to an object representing the initial + state. */ +extern int mbsinit (const mbstate_t *__ps) __THROW __attribute_pure__; + +/* Write wide character representation of multibyte character pointed + to by S to PWC. */ +extern size_t mbrtowc (wchar_t *__restrict __pwc, + const char *__restrict __s, size_t __n, + mbstate_t *__restrict __p) __THROW; + +/* Write multibyte representation of wide character WC to S. */ +extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, + mbstate_t *__restrict __ps) __THROW; + +/* Return number of bytes in multibyte character pointed to by S. */ +extern size_t __mbrlen (const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps) __THROW; +extern size_t mbrlen (const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps) __THROW; + +#ifdef __USE_EXTERN_INLINES +/* Define inline function as optimization. */ + +/* We can use the BTOWC and WCTOB optimizations since we know that all + locales must use ASCII encoding for the values in the ASCII range + and because the wchar_t encoding is always ISO 10646. */ +extern wint_t __btowc_alias (int __c) __asm ("btowc"); +__extern_inline wint_t +__NTH (btowc (int __c)) +{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' + ? (wint_t) __c : __btowc_alias (__c)); } + +extern int __wctob_alias (wint_t __c) __asm ("wctob"); +__extern_inline int +__NTH (wctob (wint_t __wc)) +{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' + ? (int) __wc : __wctob_alias (__wc)); } + +__extern_inline size_t +__NTH (mbrlen (const char *__restrict __s, size_t __n, + mbstate_t *__restrict __ps)) +{ return (__ps != NULL + ? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); } +#endif + +/* Write wide character representation of multibyte character string + SRC to DST. */ +extern size_t mbsrtowcs (wchar_t *__restrict __dst, + const char **__restrict __src, size_t __len, + mbstate_t *__restrict __ps) __THROW; + +/* Write multibyte character representation of wide character string + SRC to DST. */ +extern size_t wcsrtombs (char *__restrict __dst, + const wchar_t **__restrict __src, size_t __len, + mbstate_t *__restrict __ps) __THROW; + + +#ifdef __USE_XOPEN2K8 +/* Write wide character representation of at most NMC bytes of the + multibyte character string SRC to DST. */ +extern size_t mbsnrtowcs (wchar_t *__restrict __dst, + const char **__restrict __src, size_t __nmc, + size_t __len, mbstate_t *__restrict __ps) __THROW; + +/* Write multibyte character representation of at most NWC characters + from the wide character string SRC to DST. */ +extern size_t wcsnrtombs (char *__restrict __dst, + const wchar_t **__restrict __src, + size_t __nwc, size_t __len, + mbstate_t *__restrict __ps) __THROW; +#endif /* use POSIX 2008 */ + + +/* The following functions are extensions found in X/Open CAE. */ +#ifdef __USE_XOPEN +/* Determine number of column positions required for C. */ +extern int wcwidth (wchar_t __c) __THROW; + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +extern int wcswidth (const wchar_t *__s, size_t __n) __THROW; +#endif /* Use X/Open. */ + + +/* Convert initial portion of the wide string NPTR to `double' + representation. */ +extern double wcstod (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; + +#ifdef __USE_ISOC99 +/* Likewise for `float' and `long double' sizes of floating-point numbers. */ +extern float wcstof (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +extern long double wcstold (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +#endif /* C99 */ + +#if __GLIBC_USE (IEC_60559_TYPES_EXT) && __GLIBC_USE (ISOC23) +/* Likewise for `_FloatN' and `_FloatNx' when support is enabled. */ + +# if __HAVE_FLOAT16 +extern _Float16 wcstof16 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT32 +extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT64 +extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT128 +extern _Float128 wcstof128 (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT32X +extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT64X +extern _Float64x wcstof64x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif + +# if __HAVE_FLOAT128X +extern _Float128x wcstof128x (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr) __THROW; +# endif +#endif /* __GLIBC_USE (IEC_60559_TYPES_EXT) && __GLIBC_USE (ISOC23) */ + + +/* Convert initial portion of wide string NPTR to `long int' + representation. */ +extern long int wcstol (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) __THROW; + +/* Convert initial portion of wide string NPTR to `unsigned long int' + representation. */ +extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; + +#ifdef __USE_ISOC99 +/* Convert initial portion of wide string NPTR to `long long int' + representation. */ +__extension__ +extern long long int wcstoll (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; + +/* Convert initial portion of wide string NPTR to `unsigned long long int' + representation. */ +__extension__ +extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) __THROW; +#endif /* ISO C99. */ + +#ifdef __USE_GNU +/* Convert initial portion of wide string NPTR to `long long int' + representation. */ +__extension__ +extern long long int wcstoq (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; + +/* Convert initial portion of wide string NPTR to `unsigned long long int' + representation. */ +__extension__ +extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) __THROW; +#endif /* Use GNU. */ + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +#if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (wcstol, (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstol); +extern unsigned long int __REDIRECT_NTH (wcstoul, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoul); +__extension__ +extern long long int __REDIRECT_NTH (wcstoll, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoll); +__extension__ +extern unsigned long long int __REDIRECT_NTH (wcstoull, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoull); +# ifdef __USE_GNU +__extension__ +extern long long int __REDIRECT_NTH (wcstoq, (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoll); +__extension__ +extern unsigned long long int __REDIRECT_NTH (wcstouq, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base), __isoc23_wcstoull); +# endif +# else +extern long int __isoc23_wcstol (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base) + __THROW; +extern unsigned long int __isoc23_wcstoul (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) + __THROW; +__extension__ +extern long long int __isoc23_wcstoll (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) + __THROW; +__extension__ +extern unsigned long long int __isoc23_wcstoull (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base) + __THROW; +# define wcstol __isoc23_wcstol +# define wcstoul __isoc23_wcstoul +# define wcstoll __isoc23_wcstoll +# define wcstoull __isoc23_wcstoull +# ifdef __USE_GNU +# define wcstoq __isoc23_wcstoll +# define wcstouq __isoc23_wcstoull +# endif +# endif +#endif + +#ifdef __USE_GNU +/* Parallel versions of the functions above which take the locale to + use as an additional parameter. These are GNU extensions inspired + by the POSIX.1-2008 extended locale API. */ +extern long int wcstol_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base, + locale_t __loc) __THROW; + +extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) __THROW; + +__extension__ +extern long long int wcstoll_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) __THROW; + +__extension__ +extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; + +/* Versions of the above functions that handle '0b' and '0B' prefixes + in base 0 or 2. */ +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern long int __REDIRECT_NTH (wcstol_l, (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstol_l); +extern unsigned long int __REDIRECT_NTH (wcstoul_l, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstoul_l); +__extension__ +extern long long int __REDIRECT_NTH (wcstoll_l, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstoll_l); +__extension__ +extern unsigned long long int __REDIRECT_NTH (wcstoull_l, + (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc), + __isoc23_wcstoull_l); +# else +extern long int __isoc23_wcstol_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base, + locale_t __loc) __THROW; +extern unsigned long int __isoc23_wcstoul_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; +__extension__ +extern long long int __isoc23_wcstoll_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; +__extension__ +extern unsigned long long int __isoc23_wcstoull_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, locale_t __loc) + __THROW; +# define wcstol_l __isoc23_wcstol_l +# define wcstoul_l __isoc23_wcstoul_l +# define wcstoll_l __isoc23_wcstoll_l +# define wcstoull_l __isoc23_wcstoull_l +# endif +# endif + +extern double wcstod_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, locale_t __loc) + __THROW; + +extern float wcstof_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, locale_t __loc) + __THROW; + +extern long double wcstold_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; + +# if __HAVE_FLOAT16 +extern _Float16 wcstof16_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT32 +extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT64 +extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT128 +extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT32X +extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT64X +extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif + +# if __HAVE_FLOAT128X +extern _Float128x wcstof128x_l (const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + locale_t __loc) __THROW; +# endif +#endif /* use GNU */ + + +#ifdef __USE_XOPEN2K8 +/* Copy SRC to DEST, returning the address of the terminating L'\0' in + DEST. */ +extern wchar_t *wcpcpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src) __THROW; + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +extern wchar_t *wcpncpy (wchar_t *__restrict __dest, + const wchar_t *__restrict __src, size_t __n) + __THROW; +#endif + + +/* Wide character I/O functions. */ + +#if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2) +# ifndef __attr_dealloc_fclose +# if defined __has_builtin +# if __has_builtin (__builtin_fclose) +/* If the attribute macro hasn't been defined yet (by ) and + fclose is a built-in, use it. */ +# define __attr_dealloc_fclose __attr_dealloc (__builtin_fclose, 1) +# endif +# endif +# endif +# ifndef __attr_dealloc_fclose +# define __attr_dealloc_fclose /* empty */ +# endif + +/* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces + a wide character string. */ +extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW + __attribute_malloc__ __attr_dealloc_fclose; +#endif + +#if defined __USE_ISOC95 || defined __USE_UNIX98 + +/* Select orientation for stream. */ +extern int fwide (__FILE *__fp, int __mode) __THROW; + + +/* Write formatted output to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fwprintf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */; +/* Write formatted output to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int wprintf (const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */; +/* Write formatted output of at most N characters to S. */ +extern int swprintf (wchar_t *__restrict __s, size_t __n, + const wchar_t *__restrict __format, ...) + __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */; + +/* Write formatted output to S from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfwprintf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */; +/* Write formatted output to stdout from argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vwprintf (const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */; +/* Write formatted output of at most N character to S from argument + list ARG. */ +extern int vswprintf (wchar_t *__restrict __s, size_t __n, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */; + + +/* Read formatted input from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +/* Read formatted input from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int wscanf (const wchar_t *__restrict __format, ...) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +/* Read formatted input from S. */ +extern int swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; + +/* For historical reasons, the C99-compliant versions of the scanf + functions are at alternative names. When __LDBL_COMPAT or + __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in + bits/wchar-ldbl.h. */ +# if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...), + __isoc23_fwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...), + __isoc23_wscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + ...), __isoc23_swscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +# else +extern int __isoc23_fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...); +extern int __isoc23_wscanf (const wchar_t *__restrict __format, ...); +extern int __isoc23_swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW; +# define fwscanf __isoc23_fwscanf +# define wscanf __isoc23_wscanf +# define swscanf __isoc23_swscanf +# endif +# else +# ifdef __REDIRECT +extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...), + __isoc99_fwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...), + __isoc99_wscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */; +extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + ...), __isoc99_swscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; +# else +extern int __isoc99_fwscanf (__FILE *__restrict __stream, + const wchar_t *__restrict __format, ...); +extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...); +extern int __isoc99_swscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, ...) + __THROW; +# define fwscanf __isoc99_fwscanf +# define wscanf __isoc99_wscanf +# define swscanf __isoc99_swscanf +# endif +# endif +# endif + +#endif /* Use ISO C95, C99 and Unix98. */ + +#ifdef __USE_ISOC99 +/* Read formatted input from S into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +/* Read formatted input from stdin into argument list ARG. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +/* Read formatted input from S into argument list ARG. */ +extern int vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) + __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; + +/* Same redirection as above for the v*wscanf family. */ +# if !__GLIBC_USE (DEPRECATED_SCANF) \ + && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ + && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) \ + && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0 +# if __GLIBC_USE (C23_STRTOL) +# ifdef __REDIRECT +extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vfwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vwscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc23_vswscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +# else +extern int __isoc23_vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc23_vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfwscanf __isoc23_vfwscanf +# define vwscanf __isoc23_vwscanf +# define vswscanf __isoc23_vswscanf +# endif +# else +# ifdef __REDIRECT +extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc99_vfwscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc99_vwscanf) + /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */; +extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg), __isoc99_vswscanf) + /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; +# else +extern int __isoc99_vfwscanf (__FILE *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc99_vwscanf (const wchar_t *__restrict __format, + __gnuc_va_list __arg); +extern int __isoc99_vswscanf (const wchar_t *__restrict __s, + const wchar_t *__restrict __format, + __gnuc_va_list __arg) __THROW; +# define vfwscanf __isoc99_vfwscanf +# define vwscanf __isoc99_vwscanf +# define vswscanf __isoc99_vswscanf +# endif +# endif +# endif + +#endif /* Use ISO C99. */ + + +/* Read a character from STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern wint_t fgetwc (__FILE *__stream); +extern wint_t getwc (__FILE *__stream); + +/* Read a character from stdin. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wint_t getwchar (void); + + +/* Write a character to STREAM. + + These functions are possible cancellation points and therefore not + marked with __THROW. */ +extern wint_t fputwc (wchar_t __wc, __FILE *__stream); +extern wint_t putwc (wchar_t __wc, __FILE *__stream); + +/* Write a character to stdout. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wint_t putwchar (wchar_t __wc); + + +/* Get a newline-terminated wide character string of finite length + from STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, + __FILE *__restrict __stream); + +/* Write a string to STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern int fputws (const wchar_t *__restrict __ws, + __FILE *__restrict __stream); + + +/* Push a character back onto the input buffer of STREAM. + + This function is a possible cancellation point and therefore not + marked with __THROW. */ +extern wint_t ungetwc (wint_t __wc, __FILE *__stream); + + +#ifdef __USE_GNU +/* These are defined to be equivalent to the `char' functions defined + in POSIX.1:1996. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern wint_t getwc_unlocked (__FILE *__stream); +extern wint_t getwchar_unlocked (void); + +/* This is the wide character version of a GNU extension. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern wint_t fgetwc_unlocked (__FILE *__stream); + +/* Faster version when locking is not necessary. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); + +/* These are defined to be equivalent to the `char' functions defined + in POSIX.1:1996. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); +extern wint_t putwchar_unlocked (wchar_t __wc); + + +/* This function does the same as `fgetws' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, + __FILE *__restrict __stream); + +/* This function does the same as `fputws' but does not lock the stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int fputws_unlocked (const wchar_t *__restrict __ws, + __FILE *__restrict __stream); +#endif + + +/* Format TP into S according to FORMAT. + Write no more than MAXSIZE wide characters and return the number + of wide characters written, or 0 if it would exceed MAXSIZE. */ +extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, + const wchar_t *__restrict __format, + const struct tm *__restrict __tp) __THROW; + +# ifdef __USE_GNU +/* Similar to `wcsftime' but takes the information from + the provided locale and not the global locale. */ +extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, + const wchar_t *__restrict __format, + const struct tm *__restrict __tp, + locale_t __loc) __THROW; +# endif + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Declare all functions from bits/wchar2-decl.h first. */ +# include +#endif + +/* The following headers provide asm redirections. These redirections must + appear before the first usage of these functions, e.g. in bits/wchar.h. */ +#if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# include +#endif + +#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function +/* Now include the function definitions and redirects too. */ +# include +#endif + +__END_DECLS + +#endif /* wchar.h */ diff --git a/board/mentalnet/overlay/usr/include/wctype.h b/board/mentalnet/overlay/usr/include/wctype.h new file mode 100644 index 0000000..321ae13 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/wctype.h @@ -0,0 +1,148 @@ +/* Copyright (C) 1996-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* + * ISO C99 Standard: 7.25 + * Wide character classification and mapping utilities + */ + +#ifndef _WCTYPE_H +#define _WCTYPE_H 1 + +#include +#include +#include + +/* Constant expression of type `wint_t' whose value does not correspond + to any member of the extended character set. */ +#ifndef WEOF +# define WEOF (0xffffffffu) +#endif + +/* Some definitions from this header also appear in in + Unix98 mode. */ +#include + +/* + * Extensible wide-character mapping functions: 7.15.3.2. + */ + +__BEGIN_DECLS + +/* Scalar type that can hold values which represent locale-specific + character mappings. */ +typedef const __int32_t *wctrans_t; + +/* Construct value that describes a mapping between wide characters + identified by the string argument PROPERTY. */ +extern wctrans_t wctrans (const char *__property) __THROW; + +/* Map the wide character WC using the mapping described by DESC. */ +extern wint_t towctrans (wint_t __wc, wctrans_t __desc) __THROW; + +# ifdef __USE_XOPEN2K8 +/* POSIX.1-2008 extended locale interface (see locale.h). */ +# include + +/* Test for any wide character for which `iswalpha' or `iswdigit' is + true. */ +extern int iswalnum_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character for which `iswupper' or 'iswlower' is + true, or any wide character that is one of a locale-specific set of + wide-characters for which none of `iswcntrl', `iswdigit', + `iswpunct', or `iswspace' is true. */ +extern int iswalpha_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any control wide character. */ +extern int iswcntrl_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a decimal-digit + character. */ +extern int iswdigit_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character for which `iswprint' is true and + `iswspace' is false. */ +extern int iswgraph_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a lowercase letter + or is one of a locale-specific set of wide characters for which + none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ +extern int iswlower_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any printing wide character. */ +extern int iswprint_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any printing wide character that is one of a + locale-specific et of wide characters for which neither `iswspace' + nor `iswalnum' is true. */ +extern int iswpunct_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a locale-specific + set of wide characters for which none of `iswalnum', `iswgraph', or + `iswpunct' is true. */ +extern int iswspace_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to an uppercase letter + or is one of a locale-specific set of wide character for which none + of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ +extern int iswupper_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a hexadecimal-digit + character equivalent to that performed be the functions described + in the previous subclause. */ +extern int iswxdigit_l (wint_t __wc, locale_t __locale) __THROW; + +/* Test for any wide character that corresponds to a standard blank + wide character or a locale-specific set of wide characters for + which `iswalnum' is false. */ +extern int iswblank_l (wint_t __wc, locale_t __locale) __THROW; + +/* Construct value that describes a class of wide characters identified + by the string argument PROPERTY. */ +extern wctype_t wctype_l (const char *__property, locale_t __locale) + __THROW; + +/* Determine whether the wide-character WC has the property described by + DESC. */ +extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale) + __THROW; + +/* + * Wide-character case-mapping functions. + */ + +/* Converts an uppercase letter to the corresponding lowercase letter. */ +extern wint_t towlower_l (wint_t __wc, locale_t __locale) __THROW; + +/* Converts an lowercase letter to the corresponding uppercase letter. */ +extern wint_t towupper_l (wint_t __wc, locale_t __locale) __THROW; + +/* Construct value that describes a mapping between wide characters + identified by the string argument PROPERTY. */ +extern wctrans_t wctrans_l (const char *__property, locale_t __locale) + __THROW; + +/* Map the wide character WC using the mapping described by DESC. */ +extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, + locale_t __locale) __THROW; + +# endif /* Use POSIX 2008. */ + +__END_DECLS + +#endif /* wctype.h */ diff --git a/board/mentalnet/overlay/usr/include/wordexp.h b/board/mentalnet/overlay/usr/include/wordexp.h new file mode 100644 index 0000000..d13d796 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/wordexp.h @@ -0,0 +1,70 @@ +/* Copyright (C) 1991-2025 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _WORDEXP_H +#define _WORDEXP_H 1 + +#include +#define __need_size_t +#include + +__BEGIN_DECLS + +/* Bits set in the FLAGS argument to `wordexp'. */ +enum + { + WRDE_DOOFFS = (1 << 0), /* Insert PWORDEXP->we_offs NULLs. */ + WRDE_APPEND = (1 << 1), /* Append to results of a previous call. */ + WRDE_NOCMD = (1 << 2), /* Don't do command substitution. */ + WRDE_REUSE = (1 << 3), /* Reuse storage in PWORDEXP. */ + WRDE_SHOWERR = (1 << 4), /* Don't redirect stderr to /dev/null. */ + WRDE_UNDEF = (1 << 5), /* Error for expanding undefined variables. */ + __WRDE_FLAGS = (WRDE_DOOFFS | WRDE_APPEND | WRDE_NOCMD + | WRDE_REUSE | WRDE_SHOWERR | WRDE_UNDEF) + }; + +/* Structure describing a word-expansion run. */ +typedef struct + { + size_t we_wordc; /* Count of words matched. */ + char **we_wordv; /* List of expanded words. */ + size_t we_offs; /* Slots to reserve in `we_wordv'. */ + } wordexp_t; + +/* Possible nonzero return values from `wordexp'. */ +enum + { +#ifdef __USE_XOPEN + WRDE_NOSYS = -1, /* Never used since we support `wordexp'. */ +#endif + WRDE_NOSPACE = 1, /* Ran out of memory. */ + WRDE_BADCHAR, /* A metachar appears in the wrong place. */ + WRDE_BADVAL, /* Undefined var reference with WRDE_UNDEF. */ + WRDE_CMDSUB, /* Command substitution with WRDE_NOCMD. */ + WRDE_SYNTAX /* Shell syntax error. */ + }; + +/* Do word expansion of WORDS into PWORDEXP. */ +extern int wordexp (const char *__restrict __words, + wordexp_t *__restrict __pwordexp, int __flags); + +/* Free the storage allocated by a `wordexp' call. */ +extern void wordfree (wordexp_t *__wordexp) __THROW; + +__END_DECLS + +#endif /* wordexp.h */ diff --git a/board/mentalnet/overlay/usr/include/xtables-version.h b/board/mentalnet/overlay/usr/include/xtables-version.h new file mode 100644 index 0000000..ed31ad8 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/xtables-version.h @@ -0,0 +1,2 @@ +#define XTABLES_VERSION "libxtables.so.12" +#define XTABLES_VERSION_CODE 12 diff --git a/board/mentalnet/overlay/usr/include/xtables.h b/board/mentalnet/overlay/usr/include/xtables.h new file mode 100644 index 0000000..9fdd829 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/xtables.h @@ -0,0 +1,708 @@ +#ifndef _XTABLES_H +#define _XTABLES_H + +/* + * Changing any structs/functions may incur a needed change + * in libxtables_vcurrent/vage too. + */ + +#include /* PF_* */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef IPPROTO_SCTP +#define IPPROTO_SCTP 132 +#endif +#ifndef IPPROTO_DCCP +#define IPPROTO_DCCP 33 +#endif +#ifndef IPPROTO_MH +# define IPPROTO_MH 135 +#endif +#ifndef IPPROTO_UDPLITE +#define IPPROTO_UDPLITE 136 +#endif + +#include + +struct in_addr; + +/* + * .size is here so that there is a somewhat reasonable check + * against the chosen .type. + */ +#define XTOPT_POINTER(stype, member) \ + .ptroff = offsetof(stype, member), \ + .size = sizeof(((stype *)NULL)->member) +#define XTOPT_TABLEEND {.name = NULL} + +/** + * Select the format the input has to conform to, as well as the target type + * (area pointed to with XTOPT_POINTER). Note that the storing is not always + * uniform. @cb->val will be populated with as much as there is space, i.e. + * exactly 2 items for ranges, but the target area can receive more values + * (e.g. in case of ranges), or less values (e.g. %XTTYPE_HOSTMASK). + * + * %XTTYPE_NONE: option takes no argument + * %XTTYPE_UINT*: standard integer + * %XTTYPE_UINT*RC: colon-separated range of standard integers + * %XTTYPE_DOUBLE: double-precision floating point number + * %XTTYPE_STRING: arbitrary string + * %XTTYPE_TOSMASK: 8-bit TOS value with optional mask + * %XTTYPE_MARKMASK32: 32-bit mark with optional mask + * %XTTYPE_SYSLOGLEVEL: syslog level by name or number + * %XTTYPE_HOST: one host or address (ptr: union nf_inet_addr) + * %XTTYPE_HOSTMASK: one host or address, with an optional prefix length + * %XTTYPE_PROTOCOL: protocol number/name from /etc/protocols (ptr: uint8_t) + * %XTTYPE_PORT: 16-bit port name or number (supports %XTOPT_NBO) + * %XTTYPE_PORTRC: colon-separated port range (names acceptable), + * (supports %XTOPT_NBO) + * %XTTYPE_PLEN: prefix length + * %XTTYPE_PLENMASK: prefix length (ptr: union nf_inet_addr) + * %XTTYPE_ETHERMAC: Ethernet MAC address in hex form + * %XTTYPE_ETHERMACMASK: Ethernet MAC address in hex form with optional mask + */ +enum xt_option_type { + XTTYPE_NONE, + XTTYPE_UINT8, + XTTYPE_UINT16, + XTTYPE_UINT32, + XTTYPE_UINT64, + XTTYPE_UINT8RC, + XTTYPE_UINT16RC, + XTTYPE_UINT32RC, + XTTYPE_UINT64RC, + XTTYPE_DOUBLE, + XTTYPE_STRING, + XTTYPE_TOSMASK, + XTTYPE_MARKMASK32, + XTTYPE_SYSLOGLEVEL, + XTTYPE_HOST, + XTTYPE_HOSTMASK, + XTTYPE_PROTOCOL, + XTTYPE_PORT, + XTTYPE_PORTRC, + XTTYPE_PLEN, + XTTYPE_PLENMASK, + XTTYPE_ETHERMAC, + XTTYPE_ETHERMACMASK, +}; + +/** + * %XTOPT_INVERT: option is invertible (usable with !) + * %XTOPT_MAND: option is mandatory + * %XTOPT_MULTI: option may be specified multiple times + * %XTOPT_PUT: store value into memory at @ptroff + * %XTOPT_NBO: store value in network-byte order + * (only certain XTTYPEs recognize this) + */ +enum xt_option_flags { + XTOPT_INVERT = 1 << 0, + XTOPT_MAND = 1 << 1, + XTOPT_MULTI = 1 << 2, + XTOPT_PUT = 1 << 3, + XTOPT_NBO = 1 << 4, +}; + +/** + * @name: name of option + * @type: type of input and validation method, see %XTTYPE_* + * @id: unique number (within extension) for option, 0-31 + * @excl: bitmask of flags that cannot be used with this option + * @also: bitmask of flags that must be used with this option + * @flags: bitmask of option flags, see %XTOPT_* + * @ptroff: offset into private structure for member + * @size: size of the item pointed to by @ptroff; this is a safeguard + * @min: lowest allowed value (for singular integral types) + * @max: highest allowed value (for singular integral types) + * @base: assumed base of parsed value for integer types (default 0) + */ +struct xt_option_entry { + const char *name; + enum xt_option_type type; + unsigned int id, excl, also, flags; + unsigned int ptroff; + size_t size; + unsigned int min, max, base; +}; + +/** + * @arg: input from command line + * @ext_name: name of extension currently being processed + * @entry: current option being processed + * @data: per-extension kernel data block + * @xflags: options of the extension that have been used + * @invert: whether option was used with ! + * @nvals: number of results in uXX_multi + * @val: parsed result + * @udata: per-extension private scratch area + * (cf. xtables_{match,target}->udata_size) + */ +struct xt_option_call { + const char *arg, *ext_name; + const struct xt_option_entry *entry; + void *data; + unsigned int xflags; + bool invert; + uint8_t nvals; + union { + uint8_t u8, u8_range[2], syslog_level, protocol; + uint16_t u16, u16_range[2], port, port_range[2]; + uint32_t u32, u32_range[2]; + uint64_t u64, u64_range[2]; + double dbl; + struct { + union nf_inet_addr haddr, hmask; + uint8_t hlen; + }; + struct { + uint8_t tos_value, tos_mask; + }; + struct { + uint32_t mark, mask; + }; + struct { + uint8_t ethermac[ETH_ALEN], ethermacmask[ETH_ALEN]; + }; + } val; + /* Wished for a world where the ones below were gone: */ + union { + struct xt_entry_match **match; + struct xt_entry_target **target; + }; + void *xt_entry; + void *udata; +}; + +/** + * @ext_name: name of extension currently being processed + * @data: per-extension (kernel) data block + * @udata: per-extension private scratch area + * (cf. xtables_{match,target}->udata_size) + * @xflags: options of the extension that have been used + */ +struct xt_fcheck_call { + const char *ext_name; + void *data, *udata; + unsigned int xflags; +}; + +/** + * A "linear"/linked-list based name<->id map, for files similar to + * /etc/iproute2/. + */ +struct xtables_lmap { + char *name; + int id; + struct xtables_lmap *next; +}; + +enum xtables_ext_flags { + XTABLES_EXT_ALIAS = 1 << 0, + XTABLES_EXT_WATCHER = 1 << 1, +}; + +struct xt_xlate; + +struct xt_xlate_mt_params { + const void *ip; + const struct xt_entry_match *match; + int numeric; + bool escape_quotes; /* not used anymore, retained for ABI */ +}; + +struct xt_xlate_tg_params { + const void *ip; + const struct xt_entry_target *target; + int numeric; + bool escape_quotes; /* not used anymore, retained for ABI */ +}; + +/* Include file for additions: new matches and targets. */ +struct xtables_match { + /* + * ABI/API version this module requires. Must be first member, + * as the rest of this struct may be subject to ABI changes. + */ + const char *version; + + struct xtables_match *next; + + const char *name; + const char *real_name; + + /* Revision of match (0 by default). */ + uint8_t revision; + + /* Extension flags */ + uint8_t ext_flags; + + uint16_t family; + + /* Size of match data. */ + size_t size; + + /* Size of match data relevant for userspace comparison purposes */ + size_t userspacesize; + + /* Function which prints out usage message. */ + void (*help)(void); + + /* Initialize the match. */ + void (*init)(struct xt_entry_match *m); + + /* Function which parses command options; returns true if it + ate an option */ + /* entry is struct ipt_entry for example */ + int (*parse)(int c, char **argv, int invert, unsigned int *flags, + const void *entry, + struct xt_entry_match **match); + + /* Final check; exit if not ok. */ + void (*final_check)(unsigned int flags); + + /* Prints out the match iff non-NULL: put space at end */ + /* ip is struct ipt_ip * for example */ + void (*print)(const void *ip, + const struct xt_entry_match *match, int numeric); + + /* Saves the match info in parsable form to stdout. */ + /* ip is struct ipt_ip * for example */ + void (*save)(const void *ip, const struct xt_entry_match *match); + + /* Print match name or alias */ + const char *(*alias)(const struct xt_entry_match *match); + + /* Pointer to list of extra command-line options */ + const struct option *extra_opts; + + /* New parser */ + void (*x6_parse)(struct xt_option_call *); + void (*x6_fcheck)(struct xt_fcheck_call *); + const struct xt_option_entry *x6_options; + + /* Translate iptables to nft */ + int (*xlate)(struct xt_xlate *xl, + const struct xt_xlate_mt_params *params); + + /* Size of per-extension instance extra "global" scratch space */ + size_t udata_size; + + /* Ignore these men behind the curtain: */ + void *udata; + unsigned int option_offset; + struct xt_entry_match *m; + unsigned int mflags; + unsigned int loaded; /* simulate loading so options are merged properly */ +}; + +struct xtables_target { + /* + * ABI/API version this module requires. Must be first member, + * as the rest of this struct may be subject to ABI changes. + */ + const char *version; + + struct xtables_target *next; + + + const char *name; + + /* Real target behind this, if any. */ + const char *real_name; + + /* Revision of target (0 by default). */ + uint8_t revision; + + /* Extension flags */ + uint8_t ext_flags; + + uint16_t family; + + + /* Size of target data. */ + size_t size; + + /* Size of target data relevant for userspace comparison purposes */ + size_t userspacesize; + + /* Function which prints out usage message. */ + void (*help)(void); + + /* Initialize the target. */ + void (*init)(struct xt_entry_target *t); + + /* Function which parses command options; returns true if it + ate an option */ + /* entry is struct ipt_entry for example */ + int (*parse)(int c, char **argv, int invert, unsigned int *flags, + const void *entry, + struct xt_entry_target **targetinfo); + + /* Final check; exit if not ok. */ + void (*final_check)(unsigned int flags); + + /* Prints out the target iff non-NULL: put space at end */ + void (*print)(const void *ip, + const struct xt_entry_target *target, int numeric); + + /* Saves the targinfo in parsable form to stdout. */ + void (*save)(const void *ip, + const struct xt_entry_target *target); + + /* Print target name or alias */ + const char *(*alias)(const struct xt_entry_target *target); + + /* Pointer to list of extra command-line options */ + const struct option *extra_opts; + + /* New parser */ + void (*x6_parse)(struct xt_option_call *); + void (*x6_fcheck)(struct xt_fcheck_call *); + const struct xt_option_entry *x6_options; + + /* Translate iptables to nft */ + int (*xlate)(struct xt_xlate *xl, + const struct xt_xlate_tg_params *params); + + size_t udata_size; + + /* Ignore these men behind the curtain: */ + void *udata; + unsigned int option_offset; + struct xt_entry_target *t; + unsigned int tflags; + unsigned int used; + unsigned int loaded; /* simulate loading so options are merged properly */ +}; + +struct xtables_rule_match { + struct xtables_rule_match *next; + struct xtables_match *match; + /* Multiple matches of the same type: the ones before + the current one are completed from parsing point of view */ + bool completed; +}; + +/** + * struct xtables_pprot - + * + * A few hardcoded protocols for 'all' and in case the user has no + * /etc/protocols. + */ +struct xtables_pprot { + const char *name; + uint8_t num; +}; + +enum xtables_tryload { + XTF_DONT_LOAD, + XTF_DURING_LOAD, + XTF_TRY_LOAD, + XTF_LOAD_MUST_SUCCEED, +}; + +enum xtables_exittype { + OTHER_PROBLEM = 1, + PARAMETER_PROBLEM, + VERSION_PROBLEM, + RESOURCE_PROBLEM, + XTF_ONLY_ONCE, + XTF_NO_INVERT, + XTF_BAD_VALUE, + XTF_ONE_ACTION, +}; + +struct xtables_globals +{ + unsigned int option_offset; + const char *program_name, *program_version; + struct option *orig_opts; + struct option *opts; + void (*exit_err)(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3))); + int (*compat_rev)(const char *name, uint8_t rev, int opt); +}; + +#define XT_GETOPT_TABLEEND {.name = NULL, .has_arg = false} + +/* + * enum op- + * + * For writing clean nftables translations code + */ +enum xt_op { + XT_OP_EQ, + XT_OP_NEQ, + XT_OP_MAX, +}; + +#ifdef __cplusplus +extern "C" { +#endif + +extern const char *xtables_modprobe_program; +extern struct xtables_match *xtables_matches; +extern struct xtables_target *xtables_targets; + +extern void xtables_init(void); +extern void xtables_fini(void); +extern void xtables_set_nfproto(uint8_t); +extern void *xtables_calloc(size_t, size_t); +extern void *xtables_malloc(size_t); +extern void *xtables_realloc(void *, size_t); +char *xtables_strdup(const char *); + +extern int xtables_insmod(const char *, const char *, bool); +extern int xtables_load_ko(const char *, bool); +extern int xtables_set_params(struct xtables_globals *xtp); +extern void xtables_free_opts(int reset_offset); +extern struct option *xtables_merge_options(struct option *origopts, + struct option *oldopts, const struct option *newopts, + unsigned int *option_offset); + +extern int xtables_init_all(struct xtables_globals *xtp, uint8_t nfproto); +extern struct xtables_match *xtables_find_match(const char *name, + enum xtables_tryload, struct xtables_rule_match **match); +extern struct xtables_match *xtables_find_match_revision(const char *name, + enum xtables_tryload tryload, struct xtables_match *match, + int revision); +extern struct xtables_target *xtables_find_target(const char *name, + enum xtables_tryload); +struct xtables_target *xtables_find_target_revision(const char *name, + enum xtables_tryload tryload, struct xtables_target *target, + int revision); +extern int xtables_compatible_revision(const char *name, uint8_t revision, + int opt); + +extern void xtables_rule_matches_free(struct xtables_rule_match **matches); + +/* Your shared library should call one of these. */ +extern void xtables_register_match(struct xtables_match *me); +extern void xtables_register_matches(struct xtables_match *, unsigned int); +extern void xtables_register_target(struct xtables_target *me); +extern void xtables_register_targets(struct xtables_target *, unsigned int); + +extern bool xtables_strtoul(const char *, char **, uintmax_t *, + uintmax_t, uintmax_t); +extern bool xtables_strtoui(const char *, char **, unsigned int *, + unsigned int, unsigned int); +extern int xtables_service_to_port(const char *name, const char *proto); +extern uint16_t xtables_parse_port(const char *port, const char *proto); +extern void +xtables_parse_interface(const char *arg, char *vianame, unsigned char *mask); + +/* this is a special 64bit data type that is 8-byte aligned */ +#define aligned_u64 uint64_t __attribute__((aligned(8))) + +extern struct xtables_globals *xt_params; +#define xtables_error (xt_params->exit_err) + +extern void xtables_param_act(unsigned int, const char *, ...); + +extern const char *xtables_ipaddr_to_numeric(const struct in_addr *); +extern const char *xtables_ipaddr_to_anyname(const struct in_addr *); +extern const char *xtables_ipmask_to_numeric(const struct in_addr *); +extern struct in_addr *xtables_numeric_to_ipaddr(const char *); +extern struct in_addr *xtables_numeric_to_ipmask(const char *); +extern int xtables_ipmask_to_cidr(const struct in_addr *); +extern void xtables_ipparse_any(const char *, struct in_addr **, + struct in_addr *, unsigned int *); +extern void xtables_ipparse_multiple(const char *, struct in_addr **, + struct in_addr **, unsigned int *); + +extern struct in6_addr *xtables_numeric_to_ip6addr(const char *); +extern const char *xtables_ip6addr_to_numeric(const struct in6_addr *); +extern const char *xtables_ip6addr_to_anyname(const struct in6_addr *); +extern const char *xtables_ip6mask_to_numeric(const struct in6_addr *); +extern int xtables_ip6mask_to_cidr(const struct in6_addr *); +extern void xtables_ip6parse_any(const char *, struct in6_addr **, + struct in6_addr *, unsigned int *); +extern void xtables_ip6parse_multiple(const char *, struct in6_addr **, + struct in6_addr **, unsigned int *); + +/* Absolute file name for network data base files. */ +#define XT_PATH_ETHERTYPES "/etc/ethertypes" + +struct xt_ethertypeent { + char *e_name; /* Official ethernet type name. */ + char **e_aliases; /* Alias list. */ + int e_ethertype; /* Ethernet type number. */ +}; + +extern struct xt_ethertypeent *xtables_getethertypebyname(const char *name); +extern struct xt_ethertypeent *xtables_getethertypebynumber(int ethertype); + +/** + * Print the specified value to standard output, quoting dangerous + * characters if required. + */ +extern void xtables_save_string(const char *value); + +#define FMT_NUMERIC 0x0001 +#define FMT_NOCOUNTS 0x0002 +#define FMT_KILOMEGAGIGA 0x0004 +#define FMT_OPTIONS 0x0008 +#define FMT_NOTABLE 0x0010 +#define FMT_NOTARGET 0x0020 +#define FMT_VIA 0x0040 +#define FMT_NONEWLINE 0x0080 +#define FMT_LINENUMBERS 0x0100 +#define FMT_EBT_SAVE 0x0200 +#define FMT_C_COUNTS 0x0400 + +#define FMT_PRINT_RULE (FMT_NOCOUNTS | FMT_OPTIONS | FMT_VIA \ + | FMT_NUMERIC | FMT_NOTABLE) +#define FMT(tab,notab) ((format) & FMT_NOTABLE ? (notab) : (tab)) + +extern void xtables_print_num(uint64_t number, unsigned int format); +extern int xtables_parse_mac_and_mask(const char *from, void *to, void *mask); +extern int xtables_print_well_known_mac_and_mask(const void *mac, + const void *mask); +extern void xtables_print_mac(const unsigned char *macaddress); +extern void xtables_print_mac_and_mask(const unsigned char *mac, + const unsigned char *mask); + +extern void xtables_parse_val_mask(struct xt_option_call *cb, + unsigned int *val, unsigned int *mask, + const struct xtables_lmap *lmap); + +static inline void xtables_parse_mark_mask(struct xt_option_call *cb, + unsigned int *mark, + unsigned int *mask) +{ + xtables_parse_val_mask(cb, mark, mask, NULL); +} + +extern void xtables_print_val_mask(unsigned int val, unsigned int mask, + const struct xtables_lmap *lmap); + +static inline void xtables_print_mark_mask(unsigned int mark, + unsigned int mask) +{ + xtables_print_val_mask(mark, mask, NULL); +} + +extern const struct xtables_pprot xtables_chain_protos[]; +extern uint16_t xtables_parse_protocol(const char *s); + +/* kernel revision handling */ +extern int kernel_version; +extern void get_kernel_version(void); +#define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z) +#define LINUX_VERSION_MAJOR(x) (((x)>>16) & 0xFF) +#define LINUX_VERSION_MINOR(x) (((x)>> 8) & 0xFF) +#define LINUX_VERSION_PATCH(x) ( (x) & 0xFF) + +/* xtoptions.c */ +extern void xtables_option_metavalidate(const char *, + const struct xt_option_entry *); +extern struct option *xtables_options_xfrm(struct option *, struct option *, + const struct xt_option_entry *, + unsigned int *); +extern void xtables_option_parse(struct xt_option_call *); +extern void xtables_option_tpcall(unsigned int, char **, bool, + struct xtables_target *, void *); +extern void xtables_option_mpcall(unsigned int, char **, bool, + struct xtables_match *, void *); +extern void xtables_option_tfcall(struct xtables_target *); +extern void xtables_option_mfcall(struct xtables_match *); +extern void xtables_options_fcheck(const char *, unsigned int, + const struct xt_option_entry *); + +extern struct xtables_lmap *xtables_lmap_init(const char *); +extern void xtables_lmap_free(struct xtables_lmap *); +extern int xtables_lmap_name2id(const struct xtables_lmap *, const char *); +extern const char *xtables_lmap_id2name(const struct xtables_lmap *, int); + +/* xlate infrastructure */ +struct xt_xlate *xt_xlate_alloc(int size); +void xt_xlate_free(struct xt_xlate *xl); +void xt_xlate_add(struct xt_xlate *xl, const char *fmt, ...) __attribute__((format(printf,2,3))); +void xt_xlate_add_nospc(struct xt_xlate *xl, const char *fmt, ...) __attribute__((format(printf,2,3))); +#define xt_xlate_rule_add xt_xlate_add +#define xt_xlate_rule_add_nospc xt_xlate_add_nospc +void xt_xlate_set_add(struct xt_xlate *xl, const char *fmt, ...) __attribute__((format(printf,2,3))); +void xt_xlate_set_add_nospc(struct xt_xlate *xl, const char *fmt, ...) __attribute__((format(printf,2,3))); +void xt_xlate_add_comment(struct xt_xlate *xl, const char *comment); +const char *xt_xlate_get_comment(struct xt_xlate *xl); +void xl_xlate_set_family(struct xt_xlate *xl, uint8_t family); +uint8_t xt_xlate_get_family(struct xt_xlate *xl); +const char *xt_xlate_get(struct xt_xlate *xl); +#define xt_xlate_rule_get xt_xlate_get +const char *xt_xlate_set_get(struct xt_xlate *xl); + +/* informed target lookups */ +void xtables_announce_chain(const char *name); + +#ifdef XTABLES_INTERNAL + +/* Shipped modules rely on this... */ + +# ifndef ARRAY_SIZE +# define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) +# endif + +#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS) +# ifdef _INIT +# undef _init +# define _init _INIT +# endif + extern void init_extensions(void); + extern void init_extensions4(void); + extern void init_extensions6(void); + extern void init_extensionsa(void); + extern void init_extensionsb(void); +#else +# define _init __attribute__((constructor)) _INIT +# define EMPTY_FUNC_DEF(x) static inline void x(void) {} + EMPTY_FUNC_DEF(init_extensions) + EMPTY_FUNC_DEF(init_extensions4) + EMPTY_FUNC_DEF(init_extensions6) + EMPTY_FUNC_DEF(init_extensionsa) + EMPTY_FUNC_DEF(init_extensionsb) +# undef EMPTY_FUNC_DEF +#endif + +extern void _init(void); + +/** + * xtables_afinfo - protocol family dependent information + * @kmod: kernel module basename (e.g. "ip_tables") + * @proc_exists: file which exists in procfs when module already loaded + * @libprefix: prefix of .so library name (e.g. "libipt_") + * @family: nfproto family + * @ipproto: used by setsockopt (e.g. IPPROTO_IP) + * @so_rev_match: optname to check revision support of match + * @so_rev_target: optname to check revision support of target + */ +struct xtables_afinfo { + const char *kmod; + const char *proc_exists; + const char *libprefix; + uint8_t family; + uint8_t ipproto; + int so_rev_match; + int so_rev_target; +}; + +extern const struct xtables_afinfo *afinfo; + +/* base offset of merged extensions' consecutive options */ +#define XT_OPTION_OFFSET_SCALE 256 + +#endif /* XTABLES_INTERNAL */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XTABLES_H */ diff --git a/board/mentalnet/overlay/usr/include/xxh3.h b/board/mentalnet/overlay/usr/include/xxh3.h new file mode 100644 index 0000000..7e3ce68 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/xxh3.h @@ -0,0 +1,55 @@ +/* + * xxHash - Extremely Fast Hash algorithm + * Development source file for `xxh3` + * Copyright (C) 2019-2021 Yann Collet + * + * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at: + * - xxHash homepage: https://www.xxhash.com + * - xxHash source repository: https://github.com/Cyan4973/xxHash + */ + +/* + * Note: This file used to host the source code of XXH3_* variants. + * during the development period. + * The source code is now properly integrated within xxhash.h. + * + * xxh3.h is no longer useful, + * but it is still provided for compatibility with source code + * which used to include it directly. + * + * Programs are now highly discouraged to include xxh3.h. + * Include `xxhash.h` instead, which is the officially supported interface. + * + * In the future, xxh3.h will start to generate warnings, then errors, + * then it will be removed from source package and from include directory. + */ + +/* Simulate the same impact as including the old xxh3.h source file */ + +#define XXH_INLINE_ALL +#include "xxhash.h" diff --git a/board/mentalnet/overlay/usr/include/xxhash.h b/board/mentalnet/overlay/usr/include/xxhash.h new file mode 100644 index 0000000..78fc2e8 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/xxhash.h @@ -0,0 +1,7238 @@ +/* + * xxHash - Extremely Fast Hash algorithm + * Header File + * Copyright (C) 2012-2023 Yann Collet + * + * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at: + * - xxHash homepage: https://www.xxhash.com + * - xxHash source repository: https://github.com/Cyan4973/xxHash + */ + +/*! + * @mainpage xxHash + * + * xxHash is an extremely fast non-cryptographic hash algorithm, working at RAM speed + * limits. + * + * It is proposed in four flavors, in three families: + * 1. @ref XXH32_family + * - Classic 32-bit hash function. Simple, compact, and runs on almost all + * 32-bit and 64-bit systems. + * 2. @ref XXH64_family + * - Classic 64-bit adaptation of XXH32. Just as simple, and runs well on most + * 64-bit systems (but _not_ 32-bit systems). + * 3. @ref XXH3_family + * - Modern 64-bit and 128-bit hash function family which features improved + * strength and performance across the board, especially on smaller data. + * It benefits greatly from SIMD and 64-bit without requiring it. + * + * Benchmarks + * --- + * The reference system uses an Intel i7-9700K CPU, and runs Ubuntu x64 20.04. + * The open source benchmark program is compiled with clang v10.0 using -O3 flag. + * + * | Hash Name | ISA ext | Width | Large Data Speed | Small Data Velocity | + * | -------------------- | ------- | ----: | ---------------: | ------------------: | + * | XXH3_64bits() | @b AVX2 | 64 | 59.4 GB/s | 133.1 | + * | MeowHash | AES-NI | 128 | 58.2 GB/s | 52.5 | + * | XXH3_128bits() | @b AVX2 | 128 | 57.9 GB/s | 118.1 | + * | CLHash | PCLMUL | 64 | 37.1 GB/s | 58.1 | + * | XXH3_64bits() | @b SSE2 | 64 | 31.5 GB/s | 133.1 | + * | XXH3_128bits() | @b SSE2 | 128 | 29.6 GB/s | 118.1 | + * | RAM sequential read | | N/A | 28.0 GB/s | N/A | + * | ahash | AES-NI | 64 | 22.5 GB/s | 107.2 | + * | City64 | | 64 | 22.0 GB/s | 76.6 | + * | T1ha2 | | 64 | 22.0 GB/s | 99.0 | + * | City128 | | 128 | 21.7 GB/s | 57.7 | + * | FarmHash | AES-NI | 64 | 21.3 GB/s | 71.9 | + * | XXH64() | | 64 | 19.4 GB/s | 71.0 | + * | SpookyHash | | 64 | 19.3 GB/s | 53.2 | + * | Mum | | 64 | 18.0 GB/s | 67.0 | + * | CRC32C | SSE4.2 | 32 | 13.0 GB/s | 57.9 | + * | XXH32() | | 32 | 9.7 GB/s | 71.9 | + * | City32 | | 32 | 9.1 GB/s | 66.0 | + * | Blake3* | @b AVX2 | 256 | 4.4 GB/s | 8.1 | + * | Murmur3 | | 32 | 3.9 GB/s | 56.1 | + * | SipHash* | | 64 | 3.0 GB/s | 43.2 | + * | Blake3* | @b SSE2 | 256 | 2.4 GB/s | 8.1 | + * | HighwayHash | | 64 | 1.4 GB/s | 6.0 | + * | FNV64 | | 64 | 1.2 GB/s | 62.7 | + * | Blake2* | | 256 | 1.1 GB/s | 5.1 | + * | SHA1* | | 160 | 0.8 GB/s | 5.6 | + * | MD5* | | 128 | 0.6 GB/s | 7.8 | + * @note + * - Hashes which require a specific ISA extension are noted. SSE2 is also noted, + * even though it is mandatory on x64. + * - Hashes with an asterisk are cryptographic. Note that MD5 is non-cryptographic + * by modern standards. + * - Small data velocity is a rough average of algorithm's efficiency for small + * data. For more accurate information, see the wiki. + * - More benchmarks and strength tests are found on the wiki: + * https://github.com/Cyan4973/xxHash/wiki + * + * Usage + * ------ + * All xxHash variants use a similar API. Changing the algorithm is a trivial + * substitution. + * + * @pre + * For functions which take an input and length parameter, the following + * requirements are assumed: + * - The range from [`input`, `input + length`) is valid, readable memory. + * - The only exception is if the `length` is `0`, `input` may be `NULL`. + * - For C++, the objects must have the *TriviallyCopyable* property, as the + * functions access bytes directly as if it was an array of `unsigned char`. + * + * @anchor single_shot_example + * **Single Shot** + * + * These functions are stateless functions which hash a contiguous block of memory, + * immediately returning the result. They are the easiest and usually the fastest + * option. + * + * XXH32(), XXH64(), XXH3_64bits(), XXH3_128bits() + * + * @code{.c} + * #include + * #include "xxhash.h" + * + * // Example for a function which hashes a null terminated string with XXH32(). + * XXH32_hash_t hash_string(const char* string, XXH32_hash_t seed) + * { + * // NULL pointers are only valid if the length is zero + * size_t length = (string == NULL) ? 0 : strlen(string); + * return XXH32(string, length, seed); + * } + * @endcode + * + * + * @anchor streaming_example + * **Streaming** + * + * These groups of functions allow incremental hashing of unknown size, even + * more than what would fit in a size_t. + * + * XXH32_reset(), XXH64_reset(), XXH3_64bits_reset(), XXH3_128bits_reset() + * + * @code{.c} + * #include + * #include + * #include "xxhash.h" + * // Example for a function which hashes a FILE incrementally with XXH3_64bits(). + * XXH64_hash_t hashFile(FILE* f) + * { + * // Allocate a state struct. Do not just use malloc() or new. + * XXH3_state_t* state = XXH3_createState(); + * assert(state != NULL && "Out of memory!"); + * // Reset the state to start a new hashing session. + * XXH3_64bits_reset(state); + * char buffer[4096]; + * size_t count; + * // Read the file in chunks + * while ((count = fread(buffer, 1, sizeof(buffer), f)) != 0) { + * // Run update() as many times as necessary to process the data + * XXH3_64bits_update(state, buffer, count); + * } + * // Retrieve the finalized hash. This will not change the state. + * XXH64_hash_t result = XXH3_64bits_digest(state); + * // Free the state. Do not use free(). + * XXH3_freeState(state); + * return result; + * } + * @endcode + * + * Streaming functions generate the xxHash value from an incremental input. + * This method is slower than single-call functions, due to state management. + * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized. + * + * An XXH state must first be allocated using `XXH*_createState()`. + * + * Start a new hash by initializing the state with a seed using `XXH*_reset()`. + * + * Then, feed the hash state by calling `XXH*_update()` as many times as necessary. + * + * The function returns an error code, with 0 meaning OK, and any other value + * meaning there is an error. + * + * Finally, a hash value can be produced anytime, by using `XXH*_digest()`. + * This function returns the nn-bits hash as an int or long long. + * + * It's still possible to continue inserting input into the hash state after a + * digest, and generate new hash values later on by invoking `XXH*_digest()`. + * + * When done, release the state using `XXH*_freeState()`. + * + * + * @anchor canonical_representation_example + * **Canonical Representation** + * + * The default return values from XXH functions are unsigned 32, 64 and 128 bit + * integers. + * This the simplest and fastest format for further post-processing. + * + * However, this leaves open the question of what is the order on the byte level, + * since little and big endian conventions will store the same number differently. + * + * The canonical representation settles this issue by mandating big-endian + * convention, the same convention as human-readable numbers (large digits first). + * + * When writing hash values to storage, sending them over a network, or printing + * them, it's highly recommended to use the canonical representation to ensure + * portability across a wider range of systems, present and future. + * + * The following functions allow transformation of hash values to and from + * canonical format. + * + * XXH32_canonicalFromHash(), XXH32_hashFromCanonical(), + * XXH64_canonicalFromHash(), XXH64_hashFromCanonical(), + * XXH128_canonicalFromHash(), XXH128_hashFromCanonical(), + * + * @code{.c} + * #include + * #include "xxhash.h" + * + * // Example for a function which prints XXH32_hash_t in human readable format + * void printXxh32(XXH32_hash_t hash) + * { + * XXH32_canonical_t cano; + * XXH32_canonicalFromHash(&cano, hash); + * size_t i; + * for(i = 0; i < sizeof(cano.digest); ++i) { + * printf("%02x", cano.digest[i]); + * } + * printf("\n"); + * } + * + * // Example for a function which converts XXH32_canonical_t to XXH32_hash_t + * XXH32_hash_t convertCanonicalToXxh32(XXH32_canonical_t cano) + * { + * XXH32_hash_t hash = XXH32_hashFromCanonical(&cano); + * return hash; + * } + * @endcode + * + * + * @file xxhash.h + * xxHash prototypes and implementation + */ + +#if defined (__cplusplus) +extern "C" { +#endif + +/* **************************** + * INLINE mode + ******************************/ +/*! + * @defgroup public Public API + * Contains details on the public xxHash functions. + * @{ + */ +#ifdef XXH_DOXYGEN +/*! + * @brief Gives access to internal state declaration, required for static allocation. + * + * Incompatible with dynamic linking, due to risks of ABI changes. + * + * Usage: + * @code{.c} + * #define XXH_STATIC_LINKING_ONLY + * #include "xxhash.h" + * @endcode + */ +# define XXH_STATIC_LINKING_ONLY +/* Do not undef XXH_STATIC_LINKING_ONLY for Doxygen */ + +/*! + * @brief Gives access to internal definitions. + * + * Usage: + * @code{.c} + * #define XXH_STATIC_LINKING_ONLY + * #define XXH_IMPLEMENTATION + * #include "xxhash.h" + * @endcode + */ +# define XXH_IMPLEMENTATION +/* Do not undef XXH_IMPLEMENTATION for Doxygen */ + +/*! + * @brief Exposes the implementation and marks all functions as `inline`. + * + * Use these build macros to inline xxhash into the target unit. + * Inlining improves performance on small inputs, especially when the length is + * expressed as a compile-time constant: + * + * https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html + * + * It also keeps xxHash symbols private to the unit, so they are not exported. + * + * Usage: + * @code{.c} + * #define XXH_INLINE_ALL + * #include "xxhash.h" + * @endcode + * Do not compile and link xxhash.o as a separate object, as it is not useful. + */ +# define XXH_INLINE_ALL +# undef XXH_INLINE_ALL +/*! + * @brief Exposes the implementation without marking functions as inline. + */ +# define XXH_PRIVATE_API +# undef XXH_PRIVATE_API +/*! + * @brief Emulate a namespace by transparently prefixing all symbols. + * + * If you want to include _and expose_ xxHash functions from within your own + * library, but also want to avoid symbol collisions with other libraries which + * may also include xxHash, you can use @ref XXH_NAMESPACE to automatically prefix + * any public symbol from xxhash library with the value of @ref XXH_NAMESPACE + * (therefore, avoid empty or numeric values). + * + * Note that no change is required within the calling program as long as it + * includes `xxhash.h`: Regular symbol names will be automatically translated + * by this header. + */ +# define XXH_NAMESPACE /* YOUR NAME HERE */ +# undef XXH_NAMESPACE +#endif + +#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \ + && !defined(XXH_INLINE_ALL_31684351384) + /* this section should be traversed only once */ +# define XXH_INLINE_ALL_31684351384 + /* give access to the advanced API, required to compile implementations */ +# undef XXH_STATIC_LINKING_ONLY /* avoid macro redef */ +# define XXH_STATIC_LINKING_ONLY + /* make all functions private */ +# undef XXH_PUBLIC_API +# if defined(__GNUC__) +# define XXH_PUBLIC_API static __inline __attribute__((__unused__)) +# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +# define XXH_PUBLIC_API static inline +# elif defined(_MSC_VER) +# define XXH_PUBLIC_API static __inline +# else + /* note: this version may generate warnings for unused static functions */ +# define XXH_PUBLIC_API static +# endif + + /* + * This part deals with the special case where a unit wants to inline xxHash, + * but "xxhash.h" has previously been included without XXH_INLINE_ALL, + * such as part of some previously included *.h header file. + * Without further action, the new include would just be ignored, + * and functions would effectively _not_ be inlined (silent failure). + * The following macros solve this situation by prefixing all inlined names, + * avoiding naming collision with previous inclusions. + */ + /* Before that, we unconditionally #undef all symbols, + * in case they were already defined with XXH_NAMESPACE. + * They will then be redefined for XXH_INLINE_ALL + */ +# undef XXH_versionNumber + /* XXH32 */ +# undef XXH32 +# undef XXH32_createState +# undef XXH32_freeState +# undef XXH32_reset +# undef XXH32_update +# undef XXH32_digest +# undef XXH32_copyState +# undef XXH32_canonicalFromHash +# undef XXH32_hashFromCanonical + /* XXH64 */ +# undef XXH64 +# undef XXH64_createState +# undef XXH64_freeState +# undef XXH64_reset +# undef XXH64_update +# undef XXH64_digest +# undef XXH64_copyState +# undef XXH64_canonicalFromHash +# undef XXH64_hashFromCanonical + /* XXH3_64bits */ +# undef XXH3_64bits +# undef XXH3_64bits_withSecret +# undef XXH3_64bits_withSeed +# undef XXH3_64bits_withSecretandSeed +# undef XXH3_createState +# undef XXH3_freeState +# undef XXH3_copyState +# undef XXH3_64bits_reset +# undef XXH3_64bits_reset_withSeed +# undef XXH3_64bits_reset_withSecret +# undef XXH3_64bits_update +# undef XXH3_64bits_digest +# undef XXH3_generateSecret + /* XXH3_128bits */ +# undef XXH128 +# undef XXH3_128bits +# undef XXH3_128bits_withSeed +# undef XXH3_128bits_withSecret +# undef XXH3_128bits_reset +# undef XXH3_128bits_reset_withSeed +# undef XXH3_128bits_reset_withSecret +# undef XXH3_128bits_reset_withSecretandSeed +# undef XXH3_128bits_update +# undef XXH3_128bits_digest +# undef XXH128_isEqual +# undef XXH128_cmp +# undef XXH128_canonicalFromHash +# undef XXH128_hashFromCanonical + /* Finally, free the namespace itself */ +# undef XXH_NAMESPACE + + /* employ the namespace for XXH_INLINE_ALL */ +# define XXH_NAMESPACE XXH_INLINE_ + /* + * Some identifiers (enums, type names) are not symbols, + * but they must nonetheless be renamed to avoid redeclaration. + * Alternative solution: do not redeclare them. + * However, this requires some #ifdefs, and has a more dispersed impact. + * Meanwhile, renaming can be achieved in a single place. + */ +# define XXH_IPREF(Id) XXH_NAMESPACE ## Id +# define XXH_OK XXH_IPREF(XXH_OK) +# define XXH_ERROR XXH_IPREF(XXH_ERROR) +# define XXH_errorcode XXH_IPREF(XXH_errorcode) +# define XXH32_canonical_t XXH_IPREF(XXH32_canonical_t) +# define XXH64_canonical_t XXH_IPREF(XXH64_canonical_t) +# define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t) +# define XXH32_state_s XXH_IPREF(XXH32_state_s) +# define XXH32_state_t XXH_IPREF(XXH32_state_t) +# define XXH64_state_s XXH_IPREF(XXH64_state_s) +# define XXH64_state_t XXH_IPREF(XXH64_state_t) +# define XXH3_state_s XXH_IPREF(XXH3_state_s) +# define XXH3_state_t XXH_IPREF(XXH3_state_t) +# define XXH128_hash_t XXH_IPREF(XXH128_hash_t) + /* Ensure the header is parsed again, even if it was previously included */ +# undef XXHASH_H_5627135585666179 +# undef XXHASH_H_STATIC_13879238742 +#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */ + +/* **************************************************************** + * Stable API + *****************************************************************/ +#ifndef XXHASH_H_5627135585666179 +#define XXHASH_H_5627135585666179 1 + +/*! @brief Marks a global symbol. */ +#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API) +# if defined(_WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT)) +# ifdef XXH_EXPORT +# define XXH_PUBLIC_API __declspec(dllexport) +# elif XXH_IMPORT +# define XXH_PUBLIC_API __declspec(dllimport) +# endif +# else +# define XXH_PUBLIC_API /* do nothing */ +# endif +#endif + +#ifdef XXH_NAMESPACE +# define XXH_CAT(A,B) A##B +# define XXH_NAME2(A,B) XXH_CAT(A,B) +# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) +/* XXH32 */ +# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) +# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) +# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) +# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) +# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) +# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) +# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) +# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) +# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) +/* XXH64 */ +# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) +# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) +# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) +# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) +# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) +# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) +# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) +# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) +# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) +/* XXH3_64bits */ +# define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits) +# define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret) +# define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed) +# define XXH3_64bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecretandSeed) +# define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState) +# define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState) +# define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState) +# define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset) +# define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed) +# define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret) +# define XXH3_64bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecretandSeed) +# define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update) +# define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest) +# define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret) +# define XXH3_generateSecret_fromSeed XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret_fromSeed) +/* XXH3_128bits */ +# define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128) +# define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits) +# define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed) +# define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret) +# define XXH3_128bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecretandSeed) +# define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset) +# define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed) +# define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret) +# define XXH3_128bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecretandSeed) +# define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update) +# define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest) +# define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual) +# define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp) +# define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash) +# define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical) +#endif + + +/* ************************************* +* Compiler specifics +***************************************/ + +/* specific declaration modes for Windows */ +#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API) +# if defined(_WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT)) +# ifdef XXH_EXPORT +# define XXH_PUBLIC_API __declspec(dllexport) +# elif XXH_IMPORT +# define XXH_PUBLIC_API __declspec(dllimport) +# endif +# else +# define XXH_PUBLIC_API /* do nothing */ +# endif +#endif + +#if defined (__GNUC__) +# define XXH_CONSTF __attribute__((__const__)) +# define XXH_PUREF __attribute__((__pure__)) +# define XXH_MALLOCF __attribute__((__malloc__)) +#else +# define XXH_CONSTF /* disable */ +# define XXH_PUREF +# define XXH_MALLOCF +#endif + +/* ************************************* +* Version +***************************************/ +#define XXH_VERSION_MAJOR 0 +#define XXH_VERSION_MINOR 8 +#define XXH_VERSION_RELEASE 3 +/*! @brief Version number, encoded as two digits each */ +#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) + +/*! + * @brief Obtains the xxHash version. + * + * This is mostly useful when xxHash is compiled as a shared library, + * since the returned value comes from the library, as opposed to header file. + * + * @return @ref XXH_VERSION_NUMBER of the invoked library. + */ +XXH_PUBLIC_API XXH_CONSTF unsigned XXH_versionNumber (void); + + +/* **************************** +* Common basic types +******************************/ +#include /* size_t */ +/*! + * @brief Exit code for the streaming API. + */ +typedef enum { + XXH_OK = 0, /*!< OK */ + XXH_ERROR /*!< Error */ +} XXH_errorcode; + + +/*-********************************************************************** +* 32-bit hash +************************************************************************/ +#if defined(XXH_DOXYGEN) /* Don't show include */ +/*! + * @brief An unsigned 32-bit integer. + * + * Not necessarily defined to `uint32_t` but functionally equivalent. + */ +typedef uint32_t XXH32_hash_t; + +#elif !defined (__VMS) \ + && (defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# ifdef _AIX +# include +# else +# include +# endif + typedef uint32_t XXH32_hash_t; + +#else +# include +# if UINT_MAX == 0xFFFFFFFFUL + typedef unsigned int XXH32_hash_t; +# elif ULONG_MAX == 0xFFFFFFFFUL + typedef unsigned long XXH32_hash_t; +# else +# error "unsupported platform: need a 32-bit type" +# endif +#endif + +/*! + * @} + * + * @defgroup XXH32_family XXH32 family + * @ingroup public + * Contains functions used in the classic 32-bit xxHash algorithm. + * + * @note + * XXH32 is useful for older platforms, with no or poor 64-bit performance. + * Note that the @ref XXH3_family provides competitive speed for both 32-bit + * and 64-bit systems, and offers true 64/128 bit hash results. + * + * @see @ref XXH64_family, @ref XXH3_family : Other xxHash families + * @see @ref XXH32_impl for implementation details + * @{ + */ + +/*! + * @brief Calculates the 32-bit hash of @p input using xxHash32. + * + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * @param seed The 32-bit seed to alter the hash's output predictably. + * + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return The calculated 32-bit xxHash32 value. + * + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed); + +#ifndef XXH_NO_STREAM +/*! + * @typedef struct XXH32_state_s XXH32_state_t + * @brief The opaque state struct for the XXH32 streaming API. + * + * @see XXH32_state_s for details. + * @see @ref streaming_example "Streaming Example" + */ +typedef struct XXH32_state_s XXH32_state_t; + +/*! + * @brief Allocates an @ref XXH32_state_t. + * + * @return An allocated pointer of @ref XXH32_state_t on success. + * @return `NULL` on failure. + * + * @note Must be freed with XXH32_freeState(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_MALLOCF XXH32_state_t* XXH32_createState(void); +/*! + * @brief Frees an @ref XXH32_state_t. + * + * @param statePtr A pointer to an @ref XXH32_state_t allocated with @ref XXH32_createState(). + * + * @return @ref XXH_OK. + * + * @note @p statePtr must be allocated with XXH32_createState(). + * + * @see @ref streaming_example "Streaming Example" + * + */ +XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); +/*! + * @brief Copies one @ref XXH32_state_t to another. + * + * @param dst_state The state to copy to. + * @param src_state The state to copy from. + * @pre + * @p dst_state and @p src_state must not be `NULL` and must not overlap. + */ +XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); + +/*! + * @brief Resets an @ref XXH32_state_t to begin a new hash. + * + * @param statePtr The state struct to reset. + * @param seed The 32-bit seed to alter the hash result predictably. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note This function resets and seeds a state. Call it before @ref XXH32_update(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, XXH32_hash_t seed); + +/*! + * @brief Consumes a block of @p input to an @ref XXH32_state_t. + * + * @param statePtr The state struct to update. + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * + * @pre + * @p statePtr must not be `NULL`. + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note Call this to incrementally consume blocks of data. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length); + +/*! + * @brief Returns the calculated hash value from an @ref XXH32_state_t. + * + * @param statePtr The state struct to calculate the hash from. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return The calculated 32-bit xxHash32 value from that state. + * + * @note + * Calling XXH32_digest() will not affect @p statePtr, so you can update, + * digest, and update again. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr); +#endif /* !XXH_NO_STREAM */ + +/******* Canonical representation *******/ + +/*! + * @brief Canonical (big endian) representation of @ref XXH32_hash_t. + */ +typedef struct { + unsigned char digest[4]; /*!< Hash bytes, big endian */ +} XXH32_canonical_t; + +/*! + * @brief Converts an @ref XXH32_hash_t to a big endian @ref XXH32_canonical_t. + * + * @param dst The @ref XXH32_canonical_t pointer to be stored to. + * @param hash The @ref XXH32_hash_t to be converted. + * + * @pre + * @p dst must not be `NULL`. + * + * @see @ref canonical_representation_example "Canonical Representation Example" + */ +XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); + +/*! + * @brief Converts an @ref XXH32_canonical_t to a native @ref XXH32_hash_t. + * + * @param src The @ref XXH32_canonical_t to convert. + * + * @pre + * @p src must not be `NULL`. + * + * @return The converted hash. + * + * @see @ref canonical_representation_example "Canonical Representation Example" + */ +XXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); + + +/*! @cond Doxygen ignores this part */ +#ifdef __has_attribute +# define XXH_HAS_ATTRIBUTE(x) __has_attribute(x) +#else +# define XXH_HAS_ATTRIBUTE(x) 0 +#endif +/*! @endcond */ + +/*! @cond Doxygen ignores this part */ +/* + * C23 __STDC_VERSION__ number hasn't been specified yet. For now + * leave as `201711L` (C17 + 1). + * TODO: Update to correct value when its been specified. + */ +#define XXH_C23_VN 201711L +/*! @endcond */ + +/*! @cond Doxygen ignores this part */ +/* C-language Attributes are added in C23. */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= XXH_C23_VN) && defined(__has_c_attribute) +# define XXH_HAS_C_ATTRIBUTE(x) __has_c_attribute(x) +#else +# define XXH_HAS_C_ATTRIBUTE(x) 0 +#endif +/*! @endcond */ + +/*! @cond Doxygen ignores this part */ +#if defined(__cplusplus) && defined(__has_cpp_attribute) +# define XXH_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define XXH_HAS_CPP_ATTRIBUTE(x) 0 +#endif +/*! @endcond */ + +/*! @cond Doxygen ignores this part */ +/* + * Define XXH_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute + * introduced in CPP17 and C23. + * CPP17 : https://en.cppreference.com/w/cpp/language/attributes/fallthrough + * C23 : https://en.cppreference.com/w/c/language/attributes/fallthrough + */ +#if XXH_HAS_C_ATTRIBUTE(fallthrough) || XXH_HAS_CPP_ATTRIBUTE(fallthrough) +# define XXH_FALLTHROUGH [[fallthrough]] +#elif XXH_HAS_ATTRIBUTE(__fallthrough__) +# define XXH_FALLTHROUGH __attribute__ ((__fallthrough__)) +#else +# define XXH_FALLTHROUGH /* fallthrough */ +#endif +/*! @endcond */ + +/*! @cond Doxygen ignores this part */ +/* + * Define XXH_NOESCAPE for annotated pointers in public API. + * https://clang.llvm.org/docs/AttributeReference.html#noescape + * As of writing this, only supported by clang. + */ +#if XXH_HAS_ATTRIBUTE(noescape) +# define XXH_NOESCAPE __attribute__((__noescape__)) +#else +# define XXH_NOESCAPE +#endif +/*! @endcond */ + + +/*! + * @} + * @ingroup public + * @{ + */ + +#ifndef XXH_NO_LONG_LONG +/*-********************************************************************** +* 64-bit hash +************************************************************************/ +#if defined(XXH_DOXYGEN) /* don't include */ +/*! + * @brief An unsigned 64-bit integer. + * + * Not necessarily defined to `uint64_t` but functionally equivalent. + */ +typedef uint64_t XXH64_hash_t; +#elif !defined (__VMS) \ + && (defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# ifdef _AIX +# include +# else +# include +# endif + typedef uint64_t XXH64_hash_t; +#else +# include +# if defined(__LP64__) && ULONG_MAX == 0xFFFFFFFFFFFFFFFFULL + /* LP64 ABI says uint64_t is unsigned long */ + typedef unsigned long XXH64_hash_t; +# else + /* the following type must have a width of 64-bit */ + typedef unsigned long long XXH64_hash_t; +# endif +#endif + +/*! + * @} + * + * @defgroup XXH64_family XXH64 family + * @ingroup public + * @{ + * Contains functions used in the classic 64-bit xxHash algorithm. + * + * @note + * XXH3 provides competitive speed for both 32-bit and 64-bit systems, + * and offers true 64/128 bit hash results. + * It provides better speed for systems with vector processing capabilities. + */ + +/*! + * @brief Calculates the 64-bit hash of @p input using xxHash64. + * + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * @param seed The 64-bit seed to alter the hash's output predictably. + * + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return The calculated 64-bit xxHash64 value. + * + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64(XXH_NOESCAPE const void* input, size_t length, XXH64_hash_t seed); + +/******* Streaming *******/ +#ifndef XXH_NO_STREAM +/*! + * @brief The opaque state struct for the XXH64 streaming API. + * + * @see XXH64_state_s for details. + * @see @ref streaming_example "Streaming Example" + */ +typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ + +/*! + * @brief Allocates an @ref XXH64_state_t. + * + * @return An allocated pointer of @ref XXH64_state_t on success. + * @return `NULL` on failure. + * + * @note Must be freed with XXH64_freeState(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_MALLOCF XXH64_state_t* XXH64_createState(void); + +/*! + * @brief Frees an @ref XXH64_state_t. + * + * @param statePtr A pointer to an @ref XXH64_state_t allocated with @ref XXH64_createState(). + * + * @return @ref XXH_OK. + * + * @note @p statePtr must be allocated with XXH64_createState(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); + +/*! + * @brief Copies one @ref XXH64_state_t to another. + * + * @param dst_state The state to copy to. + * @param src_state The state to copy from. + * @pre + * @p dst_state and @p src_state must not be `NULL` and must not overlap. + */ +XXH_PUBLIC_API void XXH64_copyState(XXH_NOESCAPE XXH64_state_t* dst_state, const XXH64_state_t* src_state); + +/*! + * @brief Resets an @ref XXH64_state_t to begin a new hash. + * + * @param statePtr The state struct to reset. + * @param seed The 64-bit seed to alter the hash result predictably. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note This function resets and seeds a state. Call it before @ref XXH64_update(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH_NOESCAPE XXH64_state_t* statePtr, XXH64_hash_t seed); + +/*! + * @brief Consumes a block of @p input to an @ref XXH64_state_t. + * + * @param statePtr The state struct to update. + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * + * @pre + * @p statePtr must not be `NULL`. + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note Call this to incrementally consume blocks of data. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH_NOESCAPE XXH64_state_t* statePtr, XXH_NOESCAPE const void* input, size_t length); + +/*! + * @brief Returns the calculated hash value from an @ref XXH64_state_t. + * + * @param statePtr The state struct to calculate the hash from. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return The calculated 64-bit xxHash64 value from that state. + * + * @note + * Calling XXH64_digest() will not affect @p statePtr, so you can update, + * digest, and update again. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64_digest (XXH_NOESCAPE const XXH64_state_t* statePtr); +#endif /* !XXH_NO_STREAM */ +/******* Canonical representation *******/ + +/*! + * @brief Canonical (big endian) representation of @ref XXH64_hash_t. + */ +typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t; + +/*! + * @brief Converts an @ref XXH64_hash_t to a big endian @ref XXH64_canonical_t. + * + * @param dst The @ref XXH64_canonical_t pointer to be stored to. + * @param hash The @ref XXH64_hash_t to be converted. + * + * @pre + * @p dst must not be `NULL`. + * + * @see @ref canonical_representation_example "Canonical Representation Example" + */ +XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH_NOESCAPE XXH64_canonical_t* dst, XXH64_hash_t hash); + +/*! + * @brief Converts an @ref XXH64_canonical_t to a native @ref XXH64_hash_t. + * + * @param src The @ref XXH64_canonical_t to convert. + * + * @pre + * @p src must not be `NULL`. + * + * @return The converted hash. + * + * @see @ref canonical_representation_example "Canonical Representation Example" + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64_hashFromCanonical(XXH_NOESCAPE const XXH64_canonical_t* src); + +#ifndef XXH_NO_XXH3 + +/*! + * @} + * ************************************************************************ + * @defgroup XXH3_family XXH3 family + * @ingroup public + * @{ + * + * XXH3 is a more recent hash algorithm featuring: + * - Improved speed for both small and large inputs + * - True 64-bit and 128-bit outputs + * - SIMD acceleration + * - Improved 32-bit viability + * + * Speed analysis methodology is explained here: + * + * https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html + * + * Compared to XXH64, expect XXH3 to run approximately + * ~2x faster on large inputs and >3x faster on small ones, + * exact differences vary depending on platform. + * + * XXH3's speed benefits greatly from SIMD and 64-bit arithmetic, + * but does not require it. + * Most 32-bit and 64-bit targets that can run XXH32 smoothly can run XXH3 + * at competitive speeds, even without vector support. Further details are + * explained in the implementation. + * + * XXH3 has a fast scalar implementation, but it also includes accelerated SIMD + * implementations for many common platforms: + * - AVX512 + * - AVX2 + * - SSE2 + * - ARM NEON + * - WebAssembly SIMD128 + * - POWER8 VSX + * - s390x ZVector + * This can be controlled via the @ref XXH_VECTOR macro, but it automatically + * selects the best version according to predefined macros. For the x86 family, an + * automatic runtime dispatcher is included separately in @ref xxh_x86dispatch.c. + * + * XXH3 implementation is portable: + * it has a generic C90 formulation that can be compiled on any platform, + * all implementations generate exactly the same hash value on all platforms. + * Starting from v0.8.0, it's also labelled "stable", meaning that + * any future version will also generate the same hash value. + * + * XXH3 offers 2 variants, _64bits and _128bits. + * + * When only 64 bits are needed, prefer invoking the _64bits variant, as it + * reduces the amount of mixing, resulting in faster speed on small inputs. + * It's also generally simpler to manipulate a scalar return type than a struct. + * + * The API supports one-shot hashing, streaming mode, and custom secrets. + */ + +/*! + * @ingroup tuning + * @brief Possible values for @ref XXH_VECTOR. + * + * Unless set explicitly, determined automatically. + */ +# define XXH_SCALAR 0 /*!< Portable scalar version */ +# define XXH_SSE2 1 /*!< SSE2 for Pentium 4, Opteron, all x86_64. */ +# define XXH_AVX2 2 /*!< AVX2 for Haswell and Bulldozer */ +# define XXH_AVX512 3 /*!< AVX512 for Skylake and Icelake */ +# define XXH_NEON 4 /*!< NEON for most ARMv7-A, all AArch64, and WASM SIMD128 */ +# define XXH_VSX 5 /*!< VSX and ZVector for POWER8/z13 (64-bit) */ +# define XXH_SVE 6 /*!< SVE for some ARMv8-A and ARMv9-A */ +# define XXH_LSX 7 /*!< LSX (128-bit SIMD) for LoongArch64 */ + + +/*-********************************************************************** +* XXH3 64-bit variant +************************************************************************/ + +/*! + * @brief Calculates 64-bit unseeded variant of XXH3 hash of @p input. + * + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return The calculated 64-bit XXH3 hash value. + * + * @note + * This is equivalent to @ref XXH3_64bits_withSeed() with a seed of `0`, however + * it may have slightly better performance due to constant propagation of the + * defaults. + * + * @see + * XXH3_64bits_withSeed(), XXH3_64bits_withSecret(): other seeding variants + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits(XXH_NOESCAPE const void* input, size_t length); + +/*! + * @brief Calculates 64-bit seeded variant of XXH3 hash of @p input. + * + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * @param seed The 64-bit seed to alter the hash result predictably. + * + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return The calculated 64-bit XXH3 hash value. + * + * @note + * seed == 0 produces the same results as @ref XXH3_64bits(). + * + * This variant generates a custom secret on the fly based on default secret + * altered using the @p seed value. + * + * While this operation is decently fast, note that it's not completely free. + * + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_withSeed(XXH_NOESCAPE const void* input, size_t length, XXH64_hash_t seed); + +/*! + * The bare minimum size for a custom secret. + * + * @see + * XXH3_64bits_withSecret(), XXH3_64bits_reset_withSecret(), + * XXH3_128bits_withSecret(), XXH3_128bits_reset_withSecret(). + */ +#define XXH3_SECRET_SIZE_MIN 136 + +/*! + * @brief Calculates 64-bit variant of XXH3 with a custom "secret". + * + * @param data The block of data to be hashed, at least @p len bytes in size. + * @param len The length of @p data, in bytes. + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * + * @return The calculated 64-bit XXH3 hash value. + * + * @pre + * The memory between @p data and @p data + @p len must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p data may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * It's possible to provide any blob of bytes as a "secret" to generate the hash. + * This makes it more difficult for an external actor to prepare an intentional collision. + * The main condition is that @p secretSize *must* be large enough (>= @ref XXH3_SECRET_SIZE_MIN). + * However, the quality of the secret impacts the dispersion of the hash algorithm. + * Therefore, the secret _must_ look like a bunch of random bytes. + * Avoid "trivial" or structured data such as repeated sequences or a text document. + * Whenever in doubt about the "randomness" of the blob of bytes, + * consider employing @ref XXH3_generateSecret() instead (see below). + * It will generate a proper high entropy secret derived from the blob of bytes. + * Another advantage of using XXH3_generateSecret() is that + * it guarantees that all bits within the initial blob of bytes + * will impact every bit of the output. + * This is not necessarily the case when using the blob of bytes directly + * because, when hashing _small_ inputs, only a portion of the secret is employed. + * + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_withSecret(XXH_NOESCAPE const void* data, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize); + + +/******* Streaming *******/ +#ifndef XXH_NO_STREAM +/* + * Streaming requires state maintenance. + * This operation costs memory and CPU. + * As a consequence, streaming is slower than one-shot hashing. + * For better performance, prefer one-shot functions whenever applicable. + */ + +/*! + * @brief The opaque state struct for the XXH3 streaming API. + * + * @see XXH3_state_s for details. + * @see @ref streaming_example "Streaming Example" + */ +typedef struct XXH3_state_s XXH3_state_t; +XXH_PUBLIC_API XXH_MALLOCF XXH3_state_t* XXH3_createState(void); +XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr); + +/*! + * @brief Copies one @ref XXH3_state_t to another. + * + * @param dst_state The state to copy to. + * @param src_state The state to copy from. + * @pre + * @p dst_state and @p src_state must not be `NULL` and must not overlap. + */ +XXH_PUBLIC_API void XXH3_copyState(XXH_NOESCAPE XXH3_state_t* dst_state, XXH_NOESCAPE const XXH3_state_t* src_state); + +/*! + * @brief Resets an @ref XXH3_state_t to begin a new hash. + * + * @param statePtr The state struct to reset. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note + * - This function resets `statePtr` and generate a secret with default parameters. + * - Call this function before @ref XXH3_64bits_update(). + * - Digest will be equivalent to `XXH3_64bits()`. + * + * @see @ref streaming_example "Streaming Example" + * + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr); + +/*! + * @brief Resets an @ref XXH3_state_t with 64-bit seed to begin a new hash. + * + * @param statePtr The state struct to reset. + * @param seed The 64-bit seed to alter the hash result predictably. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note + * - This function resets `statePtr` and generate a secret from `seed`. + * - Call this function before @ref XXH3_64bits_update(). + * - Digest will be equivalent to `XXH3_64bits_withSeed()`. + * + * @see @ref streaming_example "Streaming Example" + * + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed); + +/*! + * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash. + * + * @param statePtr The state struct to reset. + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note + * `secret` is referenced, it _must outlive_ the hash streaming session. + * + * Similar to one-shot API, `secretSize` must be >= @ref XXH3_SECRET_SIZE_MIN, + * and the quality of produced hash values depends on secret's entropy + * (secret's content should look like a bunch of random bytes). + * When in doubt about the randomness of a candidate `secret`, + * consider employing `XXH3_generateSecret()` instead (see below). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize); + +/*! + * @brief Consumes a block of @p input to an @ref XXH3_state_t. + * + * @param statePtr The state struct to update. + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * + * @pre + * @p statePtr must not be `NULL`. + * @pre + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note Call this to incrementally consume blocks of data. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* input, size_t length); + +/*! + * @brief Returns the calculated XXH3 64-bit hash value from an @ref XXH3_state_t. + * + * @param statePtr The state struct to calculate the hash from. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return The calculated XXH3 64-bit hash value from that state. + * + * @note + * Calling XXH3_64bits_digest() will not affect @p statePtr, so you can update, + * digest, and update again. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_digest (XXH_NOESCAPE const XXH3_state_t* statePtr); +#endif /* !XXH_NO_STREAM */ + +/* note : canonical representation of XXH3 is the same as XXH64 + * since they both produce XXH64_hash_t values */ + + +/*-********************************************************************** +* XXH3 128-bit variant +************************************************************************/ + +/*! + * @brief The return value from 128-bit hashes. + * + * Stored in little endian order, although the fields themselves are in native + * endianness. + */ +typedef struct { + XXH64_hash_t low64; /*!< `value & 0xFFFFFFFFFFFFFFFF` */ + XXH64_hash_t high64; /*!< `value >> 64` */ +} XXH128_hash_t; + +/*! + * @brief Calculates 128-bit unseeded variant of XXH3 of @p data. + * + * @param data The block of data to be hashed, at least @p length bytes in size. + * @param len The length of @p data, in bytes. + * + * @return The calculated 128-bit variant of XXH3 value. + * + * The 128-bit variant of XXH3 has more strength, but it has a bit of overhead + * for shorter inputs. + * + * This is equivalent to @ref XXH3_128bits_withSeed() with a seed of `0`, however + * it may have slightly better performance due to constant propagation of the + * defaults. + * + * @see XXH3_128bits_withSeed(), XXH3_128bits_withSecret(): other seeding variants + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits(XXH_NOESCAPE const void* data, size_t len); +/*! @brief Calculates 128-bit seeded variant of XXH3 hash of @p data. + * + * @param data The block of data to be hashed, at least @p length bytes in size. + * @param len The length of @p data, in bytes. + * @param seed The 64-bit seed to alter the hash result predictably. + * + * @return The calculated 128-bit variant of XXH3 value. + * + * @note + * seed == 0 produces the same results as @ref XXH3_64bits(). + * + * This variant generates a custom secret on the fly based on default secret + * altered using the @p seed value. + * + * While this operation is decently fast, note that it's not completely free. + * + * @see XXH3_128bits(), XXH3_128bits_withSecret(): other seeding variants + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_withSeed(XXH_NOESCAPE const void* data, size_t len, XXH64_hash_t seed); +/*! + * @brief Calculates 128-bit variant of XXH3 with a custom "secret". + * + * @param data The block of data to be hashed, at least @p len bytes in size. + * @param len The length of @p data, in bytes. + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * + * @return The calculated 128-bit variant of XXH3 value. + * + * It's possible to provide any blob of bytes as a "secret" to generate the hash. + * This makes it more difficult for an external actor to prepare an intentional collision. + * The main condition is that @p secretSize *must* be large enough (>= @ref XXH3_SECRET_SIZE_MIN). + * However, the quality of the secret impacts the dispersion of the hash algorithm. + * Therefore, the secret _must_ look like a bunch of random bytes. + * Avoid "trivial" or structured data such as repeated sequences or a text document. + * Whenever in doubt about the "randomness" of the blob of bytes, + * consider employing @ref XXH3_generateSecret() instead (see below). + * It will generate a proper high entropy secret derived from the blob of bytes. + * Another advantage of using XXH3_generateSecret() is that + * it guarantees that all bits within the initial blob of bytes + * will impact every bit of the output. + * This is not necessarily the case when using the blob of bytes directly + * because, when hashing _small_ inputs, only a portion of the secret is employed. + * + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_withSecret(XXH_NOESCAPE const void* data, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize); + +/******* Streaming *******/ +#ifndef XXH_NO_STREAM +/* + * Streaming requires state maintenance. + * This operation costs memory and CPU. + * As a consequence, streaming is slower than one-shot hashing. + * For better performance, prefer one-shot functions whenever applicable. + * + * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits(). + * Use already declared XXH3_createState() and XXH3_freeState(). + * + * All reset and streaming functions have same meaning as their 64-bit counterpart. + */ + +/*! + * @brief Resets an @ref XXH3_state_t to begin a new hash. + * + * @param statePtr The state struct to reset. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note + * - This function resets `statePtr` and generate a secret with default parameters. + * - Call it before @ref XXH3_128bits_update(). + * - Digest will be equivalent to `XXH3_128bits()`. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr); + +/*! + * @brief Resets an @ref XXH3_state_t with 64-bit seed to begin a new hash. + * + * @param statePtr The state struct to reset. + * @param seed The 64-bit seed to alter the hash result predictably. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note + * - This function resets `statePtr` and generate a secret from `seed`. + * - Call it before @ref XXH3_128bits_update(). + * - Digest will be equivalent to `XXH3_128bits_withSeed()`. + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed); +/*! + * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash. + * + * @param statePtr The state struct to reset. + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * `secret` is referenced, it _must outlive_ the hash streaming session. + * Similar to one-shot API, `secretSize` must be >= @ref XXH3_SECRET_SIZE_MIN, + * and the quality of produced hash values depends on secret's entropy + * (secret's content should look like a bunch of random bytes). + * When in doubt about the randomness of a candidate `secret`, + * consider employing `XXH3_generateSecret()` instead (see below). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize); + +/*! + * @brief Consumes a block of @p input to an @ref XXH3_state_t. + * + * Call this to incrementally consume blocks of data. + * + * @param statePtr The state struct to update. + * @param input The block of data to be hashed, at least @p length bytes in size. + * @param length The length of @p input, in bytes. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @note + * The memory between @p input and @p input + @p length must be valid, + * readable, contiguous memory. However, if @p length is `0`, @p input may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + */ +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* input, size_t length); + +/*! + * @brief Returns the calculated XXH3 128-bit hash value from an @ref XXH3_state_t. + * + * @param statePtr The state struct to calculate the hash from. + * + * @pre + * @p statePtr must not be `NULL`. + * + * @return The calculated XXH3 128-bit hash value from that state. + * + * @note + * Calling XXH3_128bits_digest() will not affect @p statePtr, so you can update, + * digest, and update again. + * + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_digest (XXH_NOESCAPE const XXH3_state_t* statePtr); +#endif /* !XXH_NO_STREAM */ + +/* Following helper functions make it possible to compare XXH128_hast_t values. + * Since XXH128_hash_t is a structure, this capability is not offered by the language. + * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */ + +/*! + * @brief Check equality of two XXH128_hash_t values + * + * @param h1 The 128-bit hash value. + * @param h2 Another 128-bit hash value. + * + * @return `1` if `h1` and `h2` are equal. + * @return `0` if they are not. + */ +XXH_PUBLIC_API XXH_PUREF int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2); + +/*! + * @brief Compares two @ref XXH128_hash_t + * + * This comparator is compatible with stdlib's `qsort()`/`bsearch()`. + * + * @param h128_1 Left-hand side value + * @param h128_2 Right-hand side value + * + * @return >0 if @p h128_1 > @p h128_2 + * @return =0 if @p h128_1 == @p h128_2 + * @return <0 if @p h128_1 < @p h128_2 + */ +XXH_PUBLIC_API XXH_PUREF int XXH128_cmp(XXH_NOESCAPE const void* h128_1, XXH_NOESCAPE const void* h128_2); + + +/******* Canonical representation *******/ +typedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t; + + +/*! + * @brief Converts an @ref XXH128_hash_t to a big endian @ref XXH128_canonical_t. + * + * @param dst The @ref XXH128_canonical_t pointer to be stored to. + * @param hash The @ref XXH128_hash_t to be converted. + * + * @pre + * @p dst must not be `NULL`. + * @see @ref canonical_representation_example "Canonical Representation Example" + */ +XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH_NOESCAPE XXH128_canonical_t* dst, XXH128_hash_t hash); + +/*! + * @brief Converts an @ref XXH128_canonical_t to a native @ref XXH128_hash_t. + * + * @param src The @ref XXH128_canonical_t to convert. + * + * @pre + * @p src must not be `NULL`. + * + * @return The converted hash. + * @see @ref canonical_representation_example "Canonical Representation Example" + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH128_hashFromCanonical(XXH_NOESCAPE const XXH128_canonical_t* src); + + +#endif /* !XXH_NO_XXH3 */ +#endif /* XXH_NO_LONG_LONG */ + +/*! + * @} + */ +#endif /* XXHASH_H_5627135585666179 */ + + + +#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) +#define XXHASH_H_STATIC_13879238742 +/* **************************************************************************** + * This section contains declarations which are not guaranteed to remain stable. + * They may change in future versions, becoming incompatible with a different + * version of the library. + * These declarations should only be used with static linking. + * Never use them in association with dynamic linking! + ***************************************************************************** */ + +/* + * These definitions are only present to allow static allocation + * of XXH states, on stack or in a struct, for example. + * Never **ever** access their members directly. + */ + +/*! + * @internal + * @brief Structure for XXH32 streaming API. + * + * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY, + * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is + * an opaque type. This allows fields to safely be changed. + * + * Typedef'd to @ref XXH32_state_t. + * Do not access the members of this struct directly. + * @see XXH64_state_s, XXH3_state_s + */ +struct XXH32_state_s { + XXH32_hash_t total_len_32; /*!< Total length hashed, modulo 2^32 */ + XXH32_hash_t large_len; /*!< Whether the hash is >= 16 (handles @ref total_len_32 overflow) */ + XXH32_hash_t acc[4]; /*!< Accumulator lanes */ + unsigned char buffer[16]; /*!< Internal buffer for partial reads. */ + XXH32_hash_t bufferedSize; /*!< Amount of data in @ref buffer */ + XXH32_hash_t reserved; /*!< Reserved field. Do not read nor write to it. */ +}; /* typedef'd to XXH32_state_t */ + + +#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */ + +/*! + * @internal + * @brief Structure for XXH64 streaming API. + * + * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY, + * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is + * an opaque type. This allows fields to safely be changed. + * + * Typedef'd to @ref XXH64_state_t. + * Do not access the members of this struct directly. + * @see XXH32_state_s, XXH3_state_s + */ +struct XXH64_state_s { + XXH64_hash_t total_len; /*!< Total length hashed. This is always 64-bit. */ + XXH64_hash_t acc[4]; /*!< Accumulator lanes */ + unsigned char buffer[32]; /*!< Internal buffer for partial reads.. */ + XXH32_hash_t bufferedSize; /*!< Amount of data in @ref buffer */ + XXH32_hash_t reserved32; /*!< Reserved field, needed for padding anyways*/ + XXH64_hash_t reserved64; /*!< Reserved field. Do not read or write to it. */ +}; /* typedef'd to XXH64_state_t */ + +#ifndef XXH_NO_XXH3 + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* >= C11 */ +# define XXH_ALIGN(n) _Alignas(n) +#elif defined(__cplusplus) && (__cplusplus >= 201103L) /* >= C++11 */ +/* In C++ alignas() is a keyword */ +# define XXH_ALIGN(n) alignas(n) +#elif defined(__GNUC__) +# define XXH_ALIGN(n) __attribute__ ((aligned(n))) +#elif defined(_MSC_VER) +# define XXH_ALIGN(n) __declspec(align(n)) +#else +# define XXH_ALIGN(n) /* disabled */ +#endif + +/* Old GCC versions only accept the attribute after the type in structures. */ +#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \ + && ! (defined(__cplusplus) && (__cplusplus >= 201103L)) /* >= C++11 */ \ + && defined(__GNUC__) +# define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align) +#else +# define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type +#endif + +/*! + * @brief The size of the internal XXH3 buffer. + * + * This is the optimal update size for incremental hashing. + * + * @see XXH3_64b_update(), XXH3_128b_update(). + */ +#define XXH3_INTERNALBUFFER_SIZE 256 + +/*! + * @internal + * @brief Default size of the secret buffer (and @ref XXH3_kSecret). + * + * This is the size used in @ref XXH3_kSecret and the seeded functions. + * + * Not to be confused with @ref XXH3_SECRET_SIZE_MIN. + */ +#define XXH3_SECRET_DEFAULT_SIZE 192 + +/*! + * @internal + * @brief Structure for XXH3 streaming API. + * + * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY, + * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. + * Otherwise it is an opaque type. + * Never use this definition in combination with dynamic library. + * This allows fields to safely be changed in the future. + * + * @note ** This structure has a strict alignment requirement of 64 bytes!! ** + * Do not allocate this with `malloc()` or `new`, + * it will not be sufficiently aligned. + * Use @ref XXH3_createState() and @ref XXH3_freeState(), or stack allocation. + * + * Typedef'd to @ref XXH3_state_t. + * Do never access the members of this struct directly. + * + * @see XXH3_INITSTATE() for stack initialization. + * @see XXH3_createState(), XXH3_freeState(). + * @see XXH32_state_s, XXH64_state_s + */ +struct XXH3_state_s { + XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]); + /*!< The 8 accumulators. See @ref XXH32_state_s::v and @ref XXH64_state_s::v */ + XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]); + /*!< Used to store a custom secret generated from a seed. */ + XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]); + /*!< The internal buffer. @see XXH32_state_s::mem32 */ + XXH32_hash_t bufferedSize; + /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */ + XXH32_hash_t useSeed; + /*!< Reserved field. Needed for padding on 64-bit. */ + size_t nbStripesSoFar; + /*!< Number or stripes processed. */ + XXH64_hash_t totalLen; + /*!< Total length hashed. 64-bit even on 32-bit targets. */ + size_t nbStripesPerBlock; + /*!< Number of stripes per block. */ + size_t secretLimit; + /*!< Size of @ref customSecret or @ref extSecret */ + XXH64_hash_t seed; + /*!< Seed for _withSeed variants. Must be zero otherwise, @see XXH3_INITSTATE() */ + XXH64_hash_t reserved64; + /*!< Reserved field. */ + const unsigned char* extSecret; + /*!< Reference to an external secret for the _withSecret variants, NULL + * for other variants. */ + /* note: there may be some padding at the end due to alignment on 64 bytes */ +}; /* typedef'd to XXH3_state_t */ + +#undef XXH_ALIGN_MEMBER + +/*! + * @brief Initializes a stack-allocated `XXH3_state_s`. + * + * When the @ref XXH3_state_t structure is merely emplaced on stack, + * it should be initialized with XXH3_INITSTATE() or a memset() + * in case its first reset uses XXH3_NNbits_reset_withSeed(). + * This init can be omitted if the first reset uses default or _withSecret mode. + * This operation isn't necessary when the state is created with XXH3_createState(). + * Note that this doesn't prepare the state for a streaming operation, + * it's still necessary to use XXH3_NNbits_reset*() afterwards. + */ +#define XXH3_INITSTATE(XXH3_state_ptr) \ + do { \ + XXH3_state_t* tmp_xxh3_state_ptr = (XXH3_state_ptr); \ + tmp_xxh3_state_ptr->seed = 0; \ + tmp_xxh3_state_ptr->extSecret = NULL; \ + } while(0) + + +/*! + * @brief Calculates the 128-bit hash of @p data using XXH3. + * + * @param data The block of data to be hashed, at least @p len bytes in size. + * @param len The length of @p data, in bytes. + * @param seed The 64-bit seed to alter the hash's output predictably. + * + * @pre + * The memory between @p data and @p data + @p len must be valid, + * readable, contiguous memory. However, if @p len is `0`, @p data may be + * `NULL`. In C++, this also must be *TriviallyCopyable*. + * + * @return The calculated 128-bit XXH3 value. + * + * @see @ref single_shot_example "Single Shot Example" for an example. + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH128(XXH_NOESCAPE const void* data, size_t len, XXH64_hash_t seed); + + +/* === Experimental API === */ +/* Symbols defined below must be considered tied to a specific library version. */ + +/*! + * @brief Derive a high-entropy secret from any user-defined content, named customSeed. + * + * @param secretBuffer A writable buffer for derived high-entropy secret data. + * @param secretSize Size of secretBuffer, in bytes. Must be >= XXH3_SECRET_SIZE_MIN. + * @param customSeed A user-defined content. + * @param customSeedSize Size of customSeed, in bytes. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * The generated secret can be used in combination with `*_withSecret()` functions. + * The `_withSecret()` variants are useful to provide a higher level of protection + * than 64-bit seed, as it becomes much more difficult for an external actor to + * guess how to impact the calculation logic. + * + * The function accepts as input a custom seed of any length and any content, + * and derives from it a high-entropy secret of length @p secretSize into an + * already allocated buffer @p secretBuffer. + * + * The generated secret can then be used with any `*_withSecret()` variant. + * The functions @ref XXH3_128bits_withSecret(), @ref XXH3_64bits_withSecret(), + * @ref XXH3_128bits_reset_withSecret() and @ref XXH3_64bits_reset_withSecret() + * are part of this list. They all accept a `secret` parameter + * which must be large enough for implementation reasons (>= @ref XXH3_SECRET_SIZE_MIN) + * _and_ feature very high entropy (consist of random-looking bytes). + * These conditions can be a high bar to meet, so @ref XXH3_generateSecret() can + * be employed to ensure proper quality. + * + * @p customSeed can be anything. It can have any size, even small ones, + * and its content can be anything, even "poor entropy" sources such as a bunch + * of zeroes. The resulting `secret` will nonetheless provide all required qualities. + * + * @pre + * - @p secretSize must be >= @ref XXH3_SECRET_SIZE_MIN + * - When @p customSeedSize > 0, supplying NULL as customSeed is undefined behavior. + * + * Example code: + * @code{.c} + * #include + * #include + * #include + * #define XXH_STATIC_LINKING_ONLY // expose unstable API + * #include "xxhash.h" + * // Hashes argv[2] using the entropy from argv[1]. + * int main(int argc, char* argv[]) + * { + * char secret[XXH3_SECRET_SIZE_MIN]; + * if (argv != 3) { return 1; } + * XXH3_generateSecret(secret, sizeof(secret), argv[1], strlen(argv[1])); + * XXH64_hash_t h = XXH3_64bits_withSecret( + * argv[2], strlen(argv[2]), + * secret, sizeof(secret) + * ); + * printf("%016llx\n", (unsigned long long) h); + * } + * @endcode + */ +XXH_PUBLIC_API XXH_errorcode XXH3_generateSecret(XXH_NOESCAPE void* secretBuffer, size_t secretSize, XXH_NOESCAPE const void* customSeed, size_t customSeedSize); + +/*! + * @brief Generate the same secret as the _withSeed() variants. + * + * @param secretBuffer A writable buffer of @ref XXH3_SECRET_DEFAULT_SIZE bytes + * @param seed The 64-bit seed to alter the hash result predictably. + * + * The generated secret can be used in combination with + *`*_withSecret()` and `_withSecretandSeed()` variants. + * + * Example C++ `std::string` hash class: + * @code{.cpp} + * #include + * #define XXH_STATIC_LINKING_ONLY // expose unstable API + * #include "xxhash.h" + * // Slow, seeds each time + * class HashSlow { + * XXH64_hash_t seed; + * public: + * HashSlow(XXH64_hash_t s) : seed{s} {} + * size_t operator()(const std::string& x) const { + * return size_t{XXH3_64bits_withSeed(x.c_str(), x.length(), seed)}; + * } + * }; + * // Fast, caches the seeded secret for future uses. + * class HashFast { + * unsigned char secret[XXH3_SECRET_DEFAULT_SIZE]; + * public: + * HashFast(XXH64_hash_t s) { + * XXH3_generateSecret_fromSeed(secret, seed); + * } + * size_t operator()(const std::string& x) const { + * return size_t{ + * XXH3_64bits_withSecret(x.c_str(), x.length(), secret, sizeof(secret)) + * }; + * } + * }; + * @endcode + */ +XXH_PUBLIC_API void XXH3_generateSecret_fromSeed(XXH_NOESCAPE void* secretBuffer, XXH64_hash_t seed); + +/*! + * @brief Maximum size of "short" key in bytes. + */ +#define XXH3_MIDSIZE_MAX 240 + +/*! + * @brief Calculates 64/128-bit seeded variant of XXH3 hash of @p data. + * + * @param data The block of data to be hashed, at least @p len bytes in size. + * @param len The length of @p data, in bytes. + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * @param seed The 64-bit seed to alter the hash result predictably. + * + * These variants generate hash values using either: + * - @p seed for "short" keys (< @ref XXH3_MIDSIZE_MAX = 240 bytes) + * - @p secret for "large" keys (>= @ref XXH3_MIDSIZE_MAX). + * + * This generally benefits speed, compared to `_withSeed()` or `_withSecret()`. + * `_withSeed()` has to generate the secret on the fly for "large" keys. + * It's fast, but can be perceptible for "not so large" keys (< 1 KB). + * `_withSecret()` has to generate the masks on the fly for "small" keys, + * which requires more instructions than _withSeed() variants. + * Therefore, _withSecretandSeed variant combines the best of both worlds. + * + * When @p secret has been generated by XXH3_generateSecret_fromSeed(), + * this variant produces *exactly* the same results as `_withSeed()` variant, + * hence offering only a pure speed benefit on "large" input, + * by skipping the need to regenerate the secret for every large input. + * + * Another usage scenario is to hash the secret to a 64-bit hash value, + * for example with XXH3_64bits(), which then becomes the seed, + * and then employ both the seed and the secret in _withSecretandSeed(). + * On top of speed, an added benefit is that each bit in the secret + * has a 50% chance to swap each bit in the output, via its impact to the seed. + * + * This is not guaranteed when using the secret directly in "small data" scenarios, + * because only portions of the secret are employed for small data. + */ +XXH_PUBLIC_API XXH_PUREF XXH64_hash_t +XXH3_64bits_withSecretandSeed(XXH_NOESCAPE const void* data, size_t len, + XXH_NOESCAPE const void* secret, size_t secretSize, + XXH64_hash_t seed); + +/*! + * @brief Calculates 128-bit seeded variant of XXH3 hash of @p data. + * + * @param data The memory segment to be hashed, at least @p len bytes in size. + * @param length The length of @p data, in bytes. + * @param secret The secret used to alter hash result predictably. + * @param secretSize The length of @p secret, in bytes (must be >= XXH3_SECRET_SIZE_MIN) + * @param seed64 The 64-bit seed to alter the hash result predictably. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @see XXH3_64bits_withSecretandSeed(): contract is the same. + */ +XXH_PUBLIC_API XXH_PUREF XXH128_hash_t +XXH3_128bits_withSecretandSeed(XXH_NOESCAPE const void* input, size_t length, + XXH_NOESCAPE const void* secret, size_t secretSize, + XXH64_hash_t seed64); + +#ifndef XXH_NO_STREAM +/*! + * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash. + * + * @param statePtr A pointer to an @ref XXH3_state_t allocated with @ref XXH3_createState(). + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * @param seed64 The 64-bit seed to alter the hash result predictably. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @see XXH3_64bits_withSecretandSeed(). Contract is identical. + */ +XXH_PUBLIC_API XXH_errorcode +XXH3_64bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr, + XXH_NOESCAPE const void* secret, size_t secretSize, + XXH64_hash_t seed64); + +/*! + * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash. + * + * @param statePtr A pointer to an @ref XXH3_state_t allocated with @ref XXH3_createState(). + * @param secret The secret data. + * @param secretSize The length of @p secret, in bytes. + * @param seed64 The 64-bit seed to alter the hash result predictably. + * + * @return @ref XXH_OK on success. + * @return @ref XXH_ERROR on failure. + * + * @see XXH3_64bits_withSecretandSeed(). Contract is identical. + * + * Note: there was a bug in an earlier version of this function (<= v0.8.2) + * that would make it generate an incorrect hash value + * when @p seed == 0 and @p length < XXH3_MIDSIZE_MAX + * and @p secret is different from XXH3_generateSecret_fromSeed(). + * As stated in the contract, the correct hash result must be + * the same as XXH3_128bits_withSeed() when @p length <= XXH3_MIDSIZE_MAX. + * Results generated by this older version are wrong, hence not comparable. + */ +XXH_PUBLIC_API XXH_errorcode +XXH3_128bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr, + XXH_NOESCAPE const void* secret, size_t secretSize, + XXH64_hash_t seed64); + +#endif /* !XXH_NO_STREAM */ + +#endif /* !XXH_NO_XXH3 */ +#endif /* XXH_NO_LONG_LONG */ +#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) +# define XXH_IMPLEMENTATION +#endif + +#endif /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */ + + +/* ======================================================================== */ +/* ======================================================================== */ +/* ======================================================================== */ + + +/*-********************************************************************** + * xxHash implementation + *-********************************************************************** + * xxHash's implementation used to be hosted inside xxhash.c. + * + * However, inlining requires implementation to be visible to the compiler, + * hence be included alongside the header. + * Previously, implementation was hosted inside xxhash.c, + * which was then #included when inlining was activated. + * This construction created issues with a few build and install systems, + * as it required xxhash.c to be stored in /include directory. + * + * xxHash implementation is now directly integrated within xxhash.h. + * As a consequence, xxhash.c is no longer needed in /include. + * + * xxhash.c is still available and is still useful. + * In a "normal" setup, when xxhash is not inlined, + * xxhash.h only exposes the prototypes and public symbols, + * while xxhash.c can be built into an object file xxhash.o + * which can then be linked into the final binary. + ************************************************************************/ + +#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \ + || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387) +# define XXH_IMPLEM_13a8737387 + +/* ************************************* +* Tuning parameters +***************************************/ + +/*! + * @defgroup tuning Tuning parameters + * @{ + * + * Various macros to control xxHash's behavior. + */ +#ifdef XXH_DOXYGEN +/*! + * @brief Define this to disable 64-bit code. + * + * Useful if only using the @ref XXH32_family and you have a strict C90 compiler. + */ +# define XXH_NO_LONG_LONG +# undef XXH_NO_LONG_LONG /* don't actually */ +/*! + * @brief Controls how unaligned memory is accessed. + * + * By default, access to unaligned memory is controlled by `memcpy()`, which is + * safe and portable. + * + * Unfortunately, on some target/compiler combinations, the generated assembly + * is sub-optimal. + * + * The below switch allow selection of a different access method + * in the search for improved performance. + * + * @par Possible options: + * + * - `XXH_FORCE_MEMORY_ACCESS=0` (default): `memcpy` + * @par + * Use `memcpy()`. Safe and portable. Note that most modern compilers will + * eliminate the function call and treat it as an unaligned access. + * + * - `XXH_FORCE_MEMORY_ACCESS=1`: `__attribute__((aligned(1)))` + * @par + * Depends on compiler extensions and is therefore not portable. + * This method is safe _if_ your compiler supports it, + * and *generally* as fast or faster than `memcpy`. + * + * - `XXH_FORCE_MEMORY_ACCESS=2`: Direct cast + * @par + * Casts directly and dereferences. This method doesn't depend on the + * compiler, but it violates the C standard as it directly dereferences an + * unaligned pointer. It can generate buggy code on targets which do not + * support unaligned memory accesses, but in some circumstances, it's the + * only known way to get the most performance. + * + * - `XXH_FORCE_MEMORY_ACCESS=3`: Byteshift + * @par + * Also portable. This can generate the best code on old compilers which don't + * inline small `memcpy()` calls, and it might also be faster on big-endian + * systems which lack a native byteswap instruction. However, some compilers + * will emit literal byteshifts even if the target supports unaligned access. + * + * + * @warning + * Methods 1 and 2 rely on implementation-defined behavior. Use these with + * care, as what works on one compiler/platform/optimization level may cause + * another to read garbage data or even crash. + * + * See https://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html for details. + * + * Prefer these methods in priority order (0 > 3 > 1 > 2) + */ +# define XXH_FORCE_MEMORY_ACCESS 0 + +/*! + * @def XXH_SIZE_OPT + * @brief Controls how much xxHash optimizes for size. + * + * xxHash, when compiled, tends to result in a rather large binary size. This + * is mostly due to heavy usage to forced inlining and constant folding of the + * @ref XXH3_family to increase performance. + * + * However, some developers prefer size over speed. This option can + * significantly reduce the size of the generated code. When using the `-Os` + * or `-Oz` options on GCC or Clang, this is defined to 1 by default, + * otherwise it is defined to 0. + * + * Most of these size optimizations can be controlled manually. + * + * This is a number from 0-2. + * - `XXH_SIZE_OPT` == 0: Default. xxHash makes no size optimizations. Speed + * comes first. + * - `XXH_SIZE_OPT` == 1: Default for `-Os` and `-Oz`. xxHash is more + * conservative and disables hacks that increase code size. It implies the + * options @ref XXH_NO_INLINE_HINTS == 1, @ref XXH_FORCE_ALIGN_CHECK == 0, + * and @ref XXH3_NEON_LANES == 8 if they are not already defined. + * - `XXH_SIZE_OPT` == 2: xxHash tries to make itself as small as possible. + * Performance may cry. For example, the single shot functions just use the + * streaming API. + */ +# define XXH_SIZE_OPT 0 + +/*! + * @def XXH_FORCE_ALIGN_CHECK + * @brief If defined to non-zero, adds a special path for aligned inputs (XXH32() + * and XXH64() only). + * + * This is an important performance trick for architectures without decent + * unaligned memory access performance. + * + * It checks for input alignment, and when conditions are met, uses a "fast + * path" employing direct 32-bit/64-bit reads, resulting in _dramatically + * faster_ read speed. + * + * The check costs one initial branch per hash, which is generally negligible, + * but not zero. + * + * Moreover, it's not useful to generate an additional code path if memory + * access uses the same instruction for both aligned and unaligned + * addresses (e.g. x86 and aarch64). + * + * In these cases, the alignment check can be removed by setting this macro to 0. + * Then the code will always use unaligned memory access. + * Align check is automatically disabled on x86, x64, ARM64, and some ARM chips + * which are platforms known to offer good unaligned memory accesses performance. + * + * It is also disabled by default when @ref XXH_SIZE_OPT >= 1. + * + * This option does not affect XXH3 (only XXH32 and XXH64). + */ +# define XXH_FORCE_ALIGN_CHECK 0 + +/*! + * @def XXH_NO_INLINE_HINTS + * @brief When non-zero, sets all functions to `static`. + * + * By default, xxHash tries to force the compiler to inline almost all internal + * functions. + * + * This can usually improve performance due to reduced jumping and improved + * constant folding, but significantly increases the size of the binary which + * might not be favorable. + * + * Additionally, sometimes the forced inlining can be detrimental to performance, + * depending on the architecture. + * + * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the + * compiler full control on whether to inline or not. + * + * When not optimizing (-O0), using `-fno-inline` with GCC or Clang, or if + * @ref XXH_SIZE_OPT >= 1, this will automatically be defined. + */ +# define XXH_NO_INLINE_HINTS 0 + +/*! + * @def XXH3_INLINE_SECRET + * @brief Determines whether to inline the XXH3 withSecret code. + * + * When the secret size is known, the compiler can improve the performance + * of XXH3_64bits_withSecret() and XXH3_128bits_withSecret(). + * + * However, if the secret size is not known, it doesn't have any benefit. This + * happens when xxHash is compiled into a global symbol. Therefore, if + * @ref XXH_INLINE_ALL is *not* defined, this will be defined to 0. + * + * Additionally, this defaults to 0 on GCC 12+, which has an issue with function pointers + * that are *sometimes* force inline on -Og, and it is impossible to automatically + * detect this optimization level. + */ +# define XXH3_INLINE_SECRET 0 + +/*! + * @def XXH32_ENDJMP + * @brief Whether to use a jump for `XXH32_finalize`. + * + * For performance, `XXH32_finalize` uses multiple branches in the finalizer. + * This is generally preferable for performance, + * but depending on exact architecture, a jmp may be preferable. + * + * This setting is only possibly making a difference for very small inputs. + */ +# define XXH32_ENDJMP 0 + +/*! + * @internal + * @brief Redefines old internal names. + * + * For compatibility with code that uses xxHash's internals before the names + * were changed to improve namespacing. There is no other reason to use this. + */ +# define XXH_OLD_NAMES +# undef XXH_OLD_NAMES /* don't actually use, it is ugly. */ + +/*! + * @def XXH_NO_STREAM + * @brief Disables the streaming API. + * + * When xxHash is not inlined and the streaming functions are not used, disabling + * the streaming functions can improve code size significantly, especially with + * the @ref XXH3_family which tends to make constant folded copies of itself. + */ +# define XXH_NO_STREAM +# undef XXH_NO_STREAM /* don't actually */ +#endif /* XXH_DOXYGEN */ +/*! + * @} + */ + +#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ + /* prefer __packed__ structures (method 1) for GCC + * < ARMv7 with unaligned access (e.g. Raspbian armhf) still uses byte shifting, so we use memcpy + * which for some reason does unaligned loads. */ +# if defined(__GNUC__) && !(defined(__ARM_ARCH) && __ARM_ARCH < 7 && defined(__ARM_FEATURE_UNALIGNED)) +# define XXH_FORCE_MEMORY_ACCESS 1 +# endif +#endif + +#ifndef XXH_SIZE_OPT + /* default to 1 for -Os or -Oz */ +# if (defined(__GNUC__) || defined(__clang__)) && defined(__OPTIMIZE_SIZE__) +# define XXH_SIZE_OPT 1 +# else +# define XXH_SIZE_OPT 0 +# endif +#endif + +#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ + /* don't check on sizeopt, x86, aarch64, or arm when unaligned access is available */ +# if XXH_SIZE_OPT >= 1 || \ + defined(__i386) || defined(__x86_64__) || defined(__aarch64__) || defined(__ARM_FEATURE_UNALIGNED) \ + || defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) || defined(_M_ARM) /* visual */ +# define XXH_FORCE_ALIGN_CHECK 0 +# else +# define XXH_FORCE_ALIGN_CHECK 1 +# endif +#endif + +#ifndef XXH_NO_INLINE_HINTS +# if XXH_SIZE_OPT >= 1 || defined(__NO_INLINE__) /* -O0, -fno-inline */ +# define XXH_NO_INLINE_HINTS 1 +# else +# define XXH_NO_INLINE_HINTS 0 +# endif +#endif + +#ifndef XXH3_INLINE_SECRET +# if (defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 12) \ + || !defined(XXH_INLINE_ALL) +# define XXH3_INLINE_SECRET 0 +# else +# define XXH3_INLINE_SECRET 1 +# endif +#endif + +#ifndef XXH32_ENDJMP +/* generally preferable for performance */ +# define XXH32_ENDJMP 0 +#endif + +/*! + * @defgroup impl Implementation + * @{ + */ + + +/* ************************************* +* Includes & Memory related functions +***************************************/ +#if defined(XXH_NO_STREAM) +/* nothing */ +#elif defined(XXH_NO_STDLIB) + +/* When requesting to disable any mention of stdlib, + * the library loses the ability to invoked malloc / free. + * In practice, it means that functions like `XXH*_createState()` + * will always fail, and return NULL. + * This flag is useful in situations where + * xxhash.h is integrated into some kernel, embedded or limited environment + * without access to dynamic allocation. + */ + +static XXH_CONSTF void* XXH_malloc(size_t s) { (void)s; return NULL; } +static void XXH_free(void* p) { (void)p; } + +#else + +/* + * Modify the local functions below should you wish to use + * different memory routines for malloc() and free() + */ +#include + +/*! + * @internal + * @brief Modify this function to use a different routine than malloc(). + */ +static XXH_MALLOCF void* XXH_malloc(size_t s) { return malloc(s); } + +/*! + * @internal + * @brief Modify this function to use a different routine than free(). + */ +static void XXH_free(void* p) { free(p); } + +#endif /* XXH_NO_STDLIB */ + +#include + +/*! + * @internal + * @brief Modify this function to use a different routine than memcpy(). + */ +static void* XXH_memcpy(void* dest, const void* src, size_t size) +{ + return memcpy(dest,src,size); +} + +#include /* ULLONG_MAX */ + + +/* ************************************* +* Compiler Specific Options +***************************************/ +#ifdef _MSC_VER /* Visual Studio warning fix */ +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ +#endif + +#if XXH_NO_INLINE_HINTS /* disable inlining hints */ +# if defined(__GNUC__) || defined(__clang__) +# define XXH_FORCE_INLINE static __attribute__((__unused__)) +# else +# define XXH_FORCE_INLINE static +# endif +# define XXH_NO_INLINE static +/* enable inlining hints */ +#elif defined(__GNUC__) || defined(__clang__) +# define XXH_FORCE_INLINE static __inline__ __attribute__((__always_inline__, __unused__)) +# define XXH_NO_INLINE static __attribute__((__noinline__)) +#elif defined(_MSC_VER) /* Visual Studio */ +# define XXH_FORCE_INLINE static __forceinline +# define XXH_NO_INLINE static __declspec(noinline) +#elif defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99 */ +# define XXH_FORCE_INLINE static inline +# define XXH_NO_INLINE static +#else +# define XXH_FORCE_INLINE static +# define XXH_NO_INLINE static +#endif + +#if defined(XXH_INLINE_ALL) +# define XXH_STATIC XXH_FORCE_INLINE +#else +# define XXH_STATIC static +#endif + +#if XXH3_INLINE_SECRET +# define XXH3_WITH_SECRET_INLINE XXH_FORCE_INLINE +#else +# define XXH3_WITH_SECRET_INLINE XXH_NO_INLINE +#endif + +#if ((defined(sun) || defined(__sun)) && __cplusplus) /* Solaris includes __STDC_VERSION__ with C++. Tested with GCC 5.5 */ +# define XXH_RESTRICT /* disable */ +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */ +# define XXH_RESTRICT restrict +#elif (defined (__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))) \ + || (defined (__clang__)) \ + || (defined (_MSC_VER) && (_MSC_VER >= 1400)) \ + || (defined (__INTEL_COMPILER) && (__INTEL_COMPILER >= 1300)) +/* + * There are a LOT more compilers that recognize __restrict but this + * covers the major ones. + */ +# define XXH_RESTRICT __restrict +#else +# define XXH_RESTRICT /* disable */ +#endif + +/* ************************************* +* Debug +***************************************/ +/*! + * @ingroup tuning + * @def XXH_DEBUGLEVEL + * @brief Sets the debugging level. + * + * XXH_DEBUGLEVEL is expected to be defined externally, typically via the + * compiler's command line options. The value must be a number. + */ +#ifndef XXH_DEBUGLEVEL +# ifdef DEBUGLEVEL /* backwards compat */ +# define XXH_DEBUGLEVEL DEBUGLEVEL +# else +# define XXH_DEBUGLEVEL 0 +# endif +#endif + +#if (XXH_DEBUGLEVEL>=1) +# include /* note: can still be disabled with NDEBUG */ +# define XXH_ASSERT(c) assert(c) +#else +# if defined(__INTEL_COMPILER) +# define XXH_ASSERT(c) XXH_ASSUME((unsigned char) (c)) +# else +# define XXH_ASSERT(c) XXH_ASSUME(c) +# endif +#endif + +/* note: use after variable declarations */ +#ifndef XXH_STATIC_ASSERT +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */ +# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { _Static_assert((c),m); } while(0) +# elif defined(__cplusplus) && (__cplusplus >= 201103L) /* C++11 */ +# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0) +# else +# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { struct xxh_sa { char x[(c) ? 1 : -1]; }; } while(0) +# endif +# define XXH_STATIC_ASSERT(c) XXH_STATIC_ASSERT_WITH_MESSAGE((c),#c) +#endif + +/*! + * @internal + * @def XXH_COMPILER_GUARD(var) + * @brief Used to prevent unwanted optimizations for @p var. + * + * It uses an empty GCC inline assembly statement with a register constraint + * which forces @p var into a general purpose register (eg eax, ebx, ecx + * on x86) and marks it as modified. + * + * This is used in a few places to avoid unwanted autovectorization (e.g. + * XXH32_round()). All vectorization we want is explicit via intrinsics, + * and _usually_ isn't wanted elsewhere. + * + * We also use it to prevent unwanted constant folding for AArch64 in + * XXH3_initCustomSecret_scalar(). + */ +#if defined(__GNUC__) || defined(__clang__) +# define XXH_COMPILER_GUARD(var) __asm__("" : "+r" (var)) +#else +# define XXH_COMPILER_GUARD(var) ((void)0) +#endif + +/* Specifically for NEON vectors which use the "w" constraint, on + * Clang. */ +#if defined(__clang__) && defined(__ARM_ARCH) && !defined(__wasm__) +# define XXH_COMPILER_GUARD_CLANG_NEON(var) __asm__("" : "+w" (var)) +#else +# define XXH_COMPILER_GUARD_CLANG_NEON(var) ((void)0) +#endif + +/* ************************************* +* Basic Types +***************************************/ +#if !defined (__VMS) \ + && (defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# ifdef _AIX +# include +# else +# include +# endif + typedef uint8_t xxh_u8; +#else + typedef unsigned char xxh_u8; +#endif +typedef XXH32_hash_t xxh_u32; + +#ifdef XXH_OLD_NAMES +# warning "XXH_OLD_NAMES is planned to be removed starting v0.9. If the program depends on it, consider moving away from it by employing newer type names directly" +# define BYTE xxh_u8 +# define U8 xxh_u8 +# define U32 xxh_u32 +#endif + +/* *** Memory access *** */ + +/*! + * @internal + * @fn xxh_u32 XXH_read32(const void* ptr) + * @brief Reads an unaligned 32-bit integer from @p ptr in native endianness. + * + * Affected by @ref XXH_FORCE_MEMORY_ACCESS. + * + * @param ptr The pointer to read from. + * @return The 32-bit native endian integer from the bytes at @p ptr. + */ + +/*! + * @internal + * @fn xxh_u32 XXH_readLE32(const void* ptr) + * @brief Reads an unaligned 32-bit little endian integer from @p ptr. + * + * Affected by @ref XXH_FORCE_MEMORY_ACCESS. + * + * @param ptr The pointer to read from. + * @return The 32-bit little endian integer from the bytes at @p ptr. + */ + +/*! + * @internal + * @fn xxh_u32 XXH_readBE32(const void* ptr) + * @brief Reads an unaligned 32-bit big endian integer from @p ptr. + * + * Affected by @ref XXH_FORCE_MEMORY_ACCESS. + * + * @param ptr The pointer to read from. + * @return The 32-bit big endian integer from the bytes at @p ptr. + */ + +/*! + * @internal + * @fn xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align) + * @brief Like @ref XXH_readLE32(), but has an option for aligned reads. + * + * Affected by @ref XXH_FORCE_MEMORY_ACCESS. + * Note that when @ref XXH_FORCE_ALIGN_CHECK == 0, the @p align parameter is + * always @ref XXH_alignment::XXH_unaligned. + * + * @param ptr The pointer to read from. + * @param align Whether @p ptr is aligned. + * @pre + * If @p align == @ref XXH_alignment::XXH_aligned, @p ptr must be 4 byte + * aligned. + * @return The 32-bit little endian integer from the bytes at @p ptr. + */ + +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) +/* + * Manual byteshift. Best for old compilers which don't inline memcpy. + * We actually directly use XXH_readLE32 and XXH_readBE32. + */ +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) + +/* + * Force direct memory access. Only works on CPU which support unaligned memory + * access in hardware. + */ +static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; } + +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) + +/* + * __attribute__((aligned(1))) is supported by gcc and clang. Originally the + * documentation claimed that it only increased the alignment, but actually it + * can decrease it on gcc, clang, and icc: + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69502, + * https://gcc.godbolt.org/z/xYez1j67Y. + */ +#ifdef XXH_OLD_NAMES +typedef union { xxh_u32 u32; } __attribute__((__packed__)) unalign; +#endif +static xxh_u32 XXH_read32(const void* ptr) +{ + typedef __attribute__((__aligned__(1))) xxh_u32 xxh_unalign32; + return *((const xxh_unalign32*)ptr); +} + +#else + +/* + * Portable and safe solution. Generally efficient. + * see: https://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html + */ +static xxh_u32 XXH_read32(const void* memPtr) +{ + xxh_u32 val; + XXH_memcpy(&val, memPtr, sizeof(val)); + return val; +} + +#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ + + +/* *** Endianness *** */ + +/*! + * @ingroup tuning + * @def XXH_CPU_LITTLE_ENDIAN + * @brief Whether the target is little endian. + * + * Defined to 1 if the target is little endian, or 0 if it is big endian. + * It can be defined externally, for example on the compiler command line. + * + * If it is not defined, + * a runtime check (which is usually constant folded) is used instead. + * + * @note + * This is not necessarily defined to an integer constant. + * + * @see XXH_isLittleEndian() for the runtime check. + */ +#ifndef XXH_CPU_LITTLE_ENDIAN +/* + * Try to detect endianness automatically, to avoid the nonstandard behavior + * in `XXH_isLittleEndian()` + */ +# if defined(_WIN32) /* Windows is always little endian */ \ + || defined(__LITTLE_ENDIAN__) \ + || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define XXH_CPU_LITTLE_ENDIAN 1 +# elif defined(__BIG_ENDIAN__) \ + || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +# define XXH_CPU_LITTLE_ENDIAN 0 +# else +/*! + * @internal + * @brief Runtime check for @ref XXH_CPU_LITTLE_ENDIAN. + * + * Most compilers will constant fold this. + */ +static int XXH_isLittleEndian(void) +{ + /* + * Portable and well-defined behavior. + * Don't use static: it is detrimental to performance. + */ + const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 }; + return one.c[0]; +} +# define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() +# endif +#endif + + + + +/* **************************************** +* Compiler-specific Functions and Macros +******************************************/ +#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) + +#ifdef __has_builtin +# define XXH_HAS_BUILTIN(x) __has_builtin(x) +#else +# define XXH_HAS_BUILTIN(x) 0 +#endif + + + +/* + * C23 and future versions have standard "unreachable()". + * Once it has been implemented reliably we can add it as an + * additional case: + * + * ``` + * #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= XXH_C23_VN) + * # include + * # ifdef unreachable + * # define XXH_UNREACHABLE() unreachable() + * # endif + * #endif + * ``` + * + * Note C++23 also has std::unreachable() which can be detected + * as follows: + * ``` + * #if defined(__cpp_lib_unreachable) && (__cpp_lib_unreachable >= 202202L) + * # include + * # define XXH_UNREACHABLE() std::unreachable() + * #endif + * ``` + * NB: `__cpp_lib_unreachable` is defined in the `` header. + * We don't use that as including `` in `extern "C"` blocks + * doesn't work on GCC12 + */ + +#if XXH_HAS_BUILTIN(__builtin_unreachable) +# define XXH_UNREACHABLE() __builtin_unreachable() + +#elif defined(_MSC_VER) +# define XXH_UNREACHABLE() __assume(0) + +#else +# define XXH_UNREACHABLE() +#endif + +#if XXH_HAS_BUILTIN(__builtin_assume) +# define XXH_ASSUME(c) __builtin_assume(c) +#else +# define XXH_ASSUME(c) if (!(c)) { XXH_UNREACHABLE(); } +#endif + +/*! + * @internal + * @def XXH_rotl32(x,r) + * @brief 32-bit rotate left. + * + * @param x The 32-bit integer to be rotated. + * @param r The number of bits to rotate. + * @pre + * @p r > 0 && @p r < 32 + * @note + * @p x and @p r may be evaluated multiple times. + * @return The rotated result. + */ +#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \ + && XXH_HAS_BUILTIN(__builtin_rotateleft64) +# define XXH_rotl32 __builtin_rotateleft32 +# define XXH_rotl64 __builtin_rotateleft64 +#elif XXH_HAS_BUILTIN(__builtin_stdc_rotate_left) +# define XXH_rotl32 __builtin_stdc_rotate_left +# define XXH_rotl64 __builtin_stdc_rotate_left +/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */ +#elif defined(_MSC_VER) +# define XXH_rotl32(x,r) _rotl(x,r) +# define XXH_rotl64(x,r) _rotl64(x,r) +#else +# define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) +# define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r)))) +#endif + +/*! + * @internal + * @fn xxh_u32 XXH_swap32(xxh_u32 x) + * @brief A 32-bit byteswap. + * + * @param x The 32-bit integer to byteswap. + * @return @p x, byteswapped. + */ +#if defined(_MSC_VER) /* Visual Studio */ +# define XXH_swap32 _byteswap_ulong +#elif XXH_GCC_VERSION >= 403 +# define XXH_swap32 __builtin_bswap32 +#else +static xxh_u32 XXH_swap32 (xxh_u32 x) +{ + return ((x << 24) & 0xff000000 ) | + ((x << 8) & 0x00ff0000 ) | + ((x >> 8) & 0x0000ff00 ) | + ((x >> 24) & 0x000000ff ); +} +#endif + + +/* *************************** +* Memory reads +*****************************/ + +/*! + * @internal + * @brief Enum to indicate whether a pointer is aligned. + */ +typedef enum { + XXH_aligned, /*!< Aligned */ + XXH_unaligned /*!< Possibly unaligned */ +} XXH_alignment; + +/* + * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. + * + * This is ideal for older compilers which don't inline memcpy. + */ +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) + +XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr) +{ + const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; + return bytePtr[0] + | ((xxh_u32)bytePtr[1] << 8) + | ((xxh_u32)bytePtr[2] << 16) + | ((xxh_u32)bytePtr[3] << 24); +} + +XXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr) +{ + const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; + return bytePtr[3] + | ((xxh_u32)bytePtr[2] << 8) + | ((xxh_u32)bytePtr[1] << 16) + | ((xxh_u32)bytePtr[0] << 24); +} + +#else +XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) +{ + return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr)); +} + +static xxh_u32 XXH_readBE32(const void* ptr) +{ + return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr); +} +#endif + +XXH_FORCE_INLINE xxh_u32 +XXH_readLE32_align(const void* ptr, XXH_alignment align) +{ + if (align==XXH_unaligned) { + return XXH_readLE32(ptr); + } else { + return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr); + } +} + + +/* ************************************* +* Misc +***************************************/ +/*! @ingroup public */ +XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; } + + +/* ******************************************************************* +* 32-bit hash functions +*********************************************************************/ +/*! + * @} + * @defgroup XXH32_impl XXH32 implementation + * @ingroup impl + * + * Details on the XXH32 implementation. + * @{ + */ + /* #define instead of static const, to be used as initializers */ +#define XXH_PRIME32_1 0x9E3779B1U /*!< 0b10011110001101110111100110110001 */ +#define XXH_PRIME32_2 0x85EBCA77U /*!< 0b10000101111010111100101001110111 */ +#define XXH_PRIME32_3 0xC2B2AE3DU /*!< 0b11000010101100101010111000111101 */ +#define XXH_PRIME32_4 0x27D4EB2FU /*!< 0b00100111110101001110101100101111 */ +#define XXH_PRIME32_5 0x165667B1U /*!< 0b00010110010101100110011110110001 */ + +#ifdef XXH_OLD_NAMES +# define PRIME32_1 XXH_PRIME32_1 +# define PRIME32_2 XXH_PRIME32_2 +# define PRIME32_3 XXH_PRIME32_3 +# define PRIME32_4 XXH_PRIME32_4 +# define PRIME32_5 XXH_PRIME32_5 +#endif + +/*! + * @internal + * @brief Normal stripe processing routine. + * + * This shuffles the bits so that any bit from @p input impacts several bits in + * @p acc. + * + * @param acc The accumulator lane. + * @param input The stripe of input to mix. + * @return The mixed accumulator lane. + */ +static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input) +{ + acc += input * XXH_PRIME32_2; + acc = XXH_rotl32(acc, 13); + acc *= XXH_PRIME32_1; +#if (defined(__SSE4_1__) || defined(__aarch64__) || defined(__wasm_simd128__)) && !defined(XXH_ENABLE_AUTOVECTORIZE) + /* + * UGLY HACK: + * A compiler fence is used to prevent GCC and Clang from + * autovectorizing the XXH32 loop (pragmas and attributes don't work for some + * reason) without globally disabling SSE4.1. + * + * The reason we want to avoid vectorization is because despite working on + * 4 integers at a time, there are multiple factors slowing XXH32 down on + * SSE4: + * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on + * newer chips!) making it slightly slower to multiply four integers at + * once compared to four integers independently. Even when pmulld was + * fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE + * just to multiply unless doing a long operation. + * + * - Four instructions are required to rotate, + * movqda tmp, v // not required with VEX encoding + * pslld tmp, 13 // tmp <<= 13 + * psrld v, 19 // x >>= 19 + * por v, tmp // x |= tmp + * compared to one for scalar: + * roll v, 13 // reliably fast across the board + * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason + * + * - Instruction level parallelism is actually more beneficial here because + * the SIMD actually serializes this operation: While v1 is rotating, v2 + * can load data, while v3 can multiply. SSE forces them to operate + * together. + * + * This is also enabled on AArch64, as Clang is *very aggressive* in vectorizing + * the loop. NEON is only faster on the A53, and with the newer cores, it is less + * than half the speed. + * + * Additionally, this is used on WASM SIMD128 because it JITs to the same + * SIMD instructions and has the same issue. + */ + XXH_COMPILER_GUARD(acc); +#endif + return acc; +} + +/*! + * @internal + * @brief Mixes all bits to finalize the hash. + * + * The final mix ensures that all input bits have a chance to impact any bit in + * the output digest, resulting in an unbiased distribution. + * + * @param hash The hash to avalanche. + * @return The avalanched hash. + */ +static xxh_u32 XXH32_avalanche(xxh_u32 hash) +{ + hash ^= hash >> 15; + hash *= XXH_PRIME32_2; + hash ^= hash >> 13; + hash *= XXH_PRIME32_3; + hash ^= hash >> 16; + return hash; +} + +#define XXH_get32bits(p) XXH_readLE32_align(p, align) + +/*! + * @internal + * @brief Sets up the initial accumulator state for XXH32(). + */ +XXH_FORCE_INLINE void +XXH32_initAccs(xxh_u32 *acc, xxh_u32 seed) +{ + XXH_ASSERT(acc != NULL); + acc[0] = seed + XXH_PRIME32_1 + XXH_PRIME32_2; + acc[1] = seed + XXH_PRIME32_2; + acc[2] = seed + 0; + acc[3] = seed - XXH_PRIME32_1; +} + +/*! + * @internal + * @brief Consumes a block of data for XXH32(). + * + * @return the end input pointer. + */ +XXH_FORCE_INLINE const xxh_u8 * +XXH32_consumeLong( + xxh_u32 *XXH_RESTRICT acc, + xxh_u8 const *XXH_RESTRICT input, + size_t len, + XXH_alignment align +) +{ + const xxh_u8* const bEnd = input + len; + const xxh_u8* const limit = bEnd - 15; + XXH_ASSERT(acc != NULL); + XXH_ASSERT(input != NULL); + XXH_ASSERT(len >= 16); + do { + acc[0] = XXH32_round(acc[0], XXH_get32bits(input)); input += 4; + acc[1] = XXH32_round(acc[1], XXH_get32bits(input)); input += 4; + acc[2] = XXH32_round(acc[2], XXH_get32bits(input)); input += 4; + acc[3] = XXH32_round(acc[3], XXH_get32bits(input)); input += 4; + } while (input < limit); + + return input; +} + +/*! + * @internal + * @brief Merges the accumulator lanes together for XXH32() + */ +XXH_FORCE_INLINE XXH_PUREF xxh_u32 +XXH32_mergeAccs(const xxh_u32 *acc) +{ + XXH_ASSERT(acc != NULL); + return XXH_rotl32(acc[0], 1) + XXH_rotl32(acc[1], 7) + + XXH_rotl32(acc[2], 12) + XXH_rotl32(acc[3], 18); +} + +/*! + * @internal + * @brief Processes the last 0-15 bytes of @p ptr. + * + * There may be up to 15 bytes remaining to consume from the input. + * This final stage will digest them to ensure that all input bytes are present + * in the final mix. + * + * @param hash The hash to finalize. + * @param ptr The pointer to the remaining input. + * @param len The remaining length, modulo 16. + * @param align Whether @p ptr is aligned. + * @return The finalized hash. + * @see XXH64_finalize(). + */ +static XXH_PUREF xxh_u32 +XXH32_finalize(xxh_u32 hash, const xxh_u8* ptr, size_t len, XXH_alignment align) +{ +#define XXH_PROCESS1 do { \ + hash += (*ptr++) * XXH_PRIME32_5; \ + hash = XXH_rotl32(hash, 11) * XXH_PRIME32_1; \ +} while (0) + +#define XXH_PROCESS4 do { \ + hash += XXH_get32bits(ptr) * XXH_PRIME32_3; \ + ptr += 4; \ + hash = XXH_rotl32(hash, 17) * XXH_PRIME32_4; \ +} while (0) + + if (ptr==NULL) XXH_ASSERT(len == 0); + + /* Compact rerolled version; generally faster */ + if (!XXH32_ENDJMP) { + len &= 15; + while (len >= 4) { + XXH_PROCESS4; + len -= 4; + } + while (len > 0) { + XXH_PROCESS1; + --len; + } + return XXH32_avalanche(hash); + } else { + switch(len&15) /* or switch(bEnd - p) */ { + case 12: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 8: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 4: XXH_PROCESS4; + return XXH32_avalanche(hash); + + case 13: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 9: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 5: XXH_PROCESS4; + XXH_PROCESS1; + return XXH32_avalanche(hash); + + case 14: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 10: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 6: XXH_PROCESS4; + XXH_PROCESS1; + XXH_PROCESS1; + return XXH32_avalanche(hash); + + case 15: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 11: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 7: XXH_PROCESS4; + XXH_FALLTHROUGH; /* fallthrough */ + case 3: XXH_PROCESS1; + XXH_FALLTHROUGH; /* fallthrough */ + case 2: XXH_PROCESS1; + XXH_FALLTHROUGH; /* fallthrough */ + case 1: XXH_PROCESS1; + XXH_FALLTHROUGH; /* fallthrough */ + case 0: return XXH32_avalanche(hash); + } + XXH_ASSERT(0); + return hash; /* reaching this point is deemed impossible */ + } +} + +#ifdef XXH_OLD_NAMES +# define PROCESS1 XXH_PROCESS1 +# define PROCESS4 XXH_PROCESS4 +#else +# undef XXH_PROCESS1 +# undef XXH_PROCESS4 +#endif + +/*! + * @internal + * @brief The implementation for @ref XXH32(). + * + * @param input , len , seed Directly passed from @ref XXH32(). + * @param align Whether @p input is aligned. + * @return The calculated hash. + */ +XXH_FORCE_INLINE XXH_PUREF xxh_u32 +XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align) +{ + xxh_u32 h32; + + if (input==NULL) XXH_ASSERT(len == 0); + + if (len>=16) { + xxh_u32 acc[4]; + XXH32_initAccs(acc, seed); + + input = XXH32_consumeLong(acc, input, len, align); + + h32 = XXH32_mergeAccs(acc); + } else { + h32 = seed + XXH_PRIME32_5; + } + + h32 += (xxh_u32)len; + + return XXH32_finalize(h32, input, len&15, align); +} + +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed) +{ +#if !defined(XXH_NO_STREAM) && XXH_SIZE_OPT >= 2 + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ + XXH32_state_t state; + XXH32_reset(&state, seed); + XXH32_update(&state, (const xxh_u8*)input, len); + return XXH32_digest(&state); +#else + if (XXH_FORCE_ALIGN_CHECK) { + if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */ + return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); + } } + + return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); +#endif +} + + + +/******* Hash streaming *******/ +#ifndef XXH_NO_STREAM +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) +{ + return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); +} +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) +{ + XXH_free(statePtr); + return XXH_OK; +} + +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState) +{ + XXH_memcpy(dstState, srcState, sizeof(*dstState)); +} + +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed) +{ + XXH_ASSERT(statePtr != NULL); + memset(statePtr, 0, sizeof(*statePtr)); + XXH32_initAccs(statePtr->acc, seed); + return XXH_OK; +} + + +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH_errorcode +XXH32_update(XXH32_state_t* state, const void* input, size_t len) +{ + if (input==NULL) { + XXH_ASSERT(len == 0); + return XXH_OK; + } + + state->total_len_32 += (XXH32_hash_t)len; + state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16)); + + XXH_ASSERT(state->bufferedSize < sizeof(state->buffer)); + if (len < sizeof(state->buffer) - state->bufferedSize) { /* fill in tmp buffer */ + XXH_memcpy(state->buffer + state->bufferedSize, input, len); + state->bufferedSize += (XXH32_hash_t)len; + return XXH_OK; + } + + { const xxh_u8* xinput = (const xxh_u8*)input; + const xxh_u8* const bEnd = xinput + len; + + if (state->bufferedSize) { /* non-empty buffer: complete first */ + XXH_memcpy(state->buffer + state->bufferedSize, xinput, sizeof(state->buffer) - state->bufferedSize); + xinput += sizeof(state->buffer) - state->bufferedSize; + /* then process one round */ + (void)XXH32_consumeLong(state->acc, state->buffer, sizeof(state->buffer), XXH_aligned); + state->bufferedSize = 0; + } + + XXH_ASSERT(xinput <= bEnd); + if ((size_t)(bEnd - xinput) >= sizeof(state->buffer)) { + /* Process the remaining data */ + xinput = XXH32_consumeLong(state->acc, xinput, (size_t)(bEnd - xinput), XXH_unaligned); + } + + if (xinput < bEnd) { + /* Copy the leftover to the tmp buffer */ + XXH_memcpy(state->buffer, xinput, (size_t)(bEnd-xinput)); + state->bufferedSize = (unsigned)(bEnd-xinput); + } + } + + return XXH_OK; +} + + +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state) +{ + xxh_u32 h32; + + if (state->large_len) { + h32 = XXH32_mergeAccs(state->acc); + } else { + h32 = state->acc[2] /* == seed */ + XXH_PRIME32_5; + } + + h32 += state->total_len_32; + + return XXH32_finalize(h32, state->buffer, state->bufferedSize, XXH_aligned); +} +#endif /* !XXH_NO_STREAM */ + +/******* Canonical representation *******/ + +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) +{ + XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash); + XXH_memcpy(dst, &hash, sizeof(*dst)); +} +/*! @ingroup XXH32_family */ +XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src) +{ + return XXH_readBE32(src); +} + + +#ifndef XXH_NO_LONG_LONG + +/* ******************************************************************* +* 64-bit hash functions +*********************************************************************/ +/*! + * @} + * @ingroup impl + * @{ + */ +/******* Memory access *******/ + +typedef XXH64_hash_t xxh_u64; + +#ifdef XXH_OLD_NAMES +# define U64 xxh_u64 +#endif + +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) +/* + * Manual byteshift. Best for old compilers which don't inline memcpy. + * We actually directly use XXH_readLE64 and XXH_readBE64. + */ +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) + +/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ +static xxh_u64 XXH_read64(const void* memPtr) +{ + return *(const xxh_u64*) memPtr; +} + +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) + +/* + * __attribute__((aligned(1))) is supported by gcc and clang. Originally the + * documentation claimed that it only increased the alignment, but actually it + * can decrease it on gcc, clang, and icc: + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69502, + * https://gcc.godbolt.org/z/xYez1j67Y. + */ +#ifdef XXH_OLD_NAMES +typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((__packed__)) unalign64; +#endif +static xxh_u64 XXH_read64(const void* ptr) +{ + typedef __attribute__((__aligned__(1))) xxh_u64 xxh_unalign64; + return *((const xxh_unalign64*)ptr); +} + +#else + +/* + * Portable and safe solution. Generally efficient. + * see: https://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html + */ +static xxh_u64 XXH_read64(const void* memPtr) +{ + xxh_u64 val; + XXH_memcpy(&val, memPtr, sizeof(val)); + return val; +} + +#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ + +#if defined(_MSC_VER) /* Visual Studio */ +# define XXH_swap64 _byteswap_uint64 +#elif XXH_GCC_VERSION >= 403 +# define XXH_swap64 __builtin_bswap64 +#else +static xxh_u64 XXH_swap64(xxh_u64 x) +{ + return ((x << 56) & 0xff00000000000000ULL) | + ((x << 40) & 0x00ff000000000000ULL) | + ((x << 24) & 0x0000ff0000000000ULL) | + ((x << 8) & 0x000000ff00000000ULL) | + ((x >> 8) & 0x00000000ff000000ULL) | + ((x >> 24) & 0x0000000000ff0000ULL) | + ((x >> 40) & 0x000000000000ff00ULL) | + ((x >> 56) & 0x00000000000000ffULL); +} +#endif + + +/* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */ +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) + +XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr) +{ + const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; + return bytePtr[0] + | ((xxh_u64)bytePtr[1] << 8) + | ((xxh_u64)bytePtr[2] << 16) + | ((xxh_u64)bytePtr[3] << 24) + | ((xxh_u64)bytePtr[4] << 32) + | ((xxh_u64)bytePtr[5] << 40) + | ((xxh_u64)bytePtr[6] << 48) + | ((xxh_u64)bytePtr[7] << 56); +} + +XXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr) +{ + const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; + return bytePtr[7] + | ((xxh_u64)bytePtr[6] << 8) + | ((xxh_u64)bytePtr[5] << 16) + | ((xxh_u64)bytePtr[4] << 24) + | ((xxh_u64)bytePtr[3] << 32) + | ((xxh_u64)bytePtr[2] << 40) + | ((xxh_u64)bytePtr[1] << 48) + | ((xxh_u64)bytePtr[0] << 56); +} + +#else +XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) +{ + return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr)); +} + +static xxh_u64 XXH_readBE64(const void* ptr) +{ + return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr); +} +#endif + +XXH_FORCE_INLINE xxh_u64 +XXH_readLE64_align(const void* ptr, XXH_alignment align) +{ + if (align==XXH_unaligned) + return XXH_readLE64(ptr); + else + return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr); +} + + +/******* xxh64 *******/ +/*! + * @} + * @defgroup XXH64_impl XXH64 implementation + * @ingroup impl + * + * Details on the XXH64 implementation. + * @{ + */ +/* #define rather that static const, to be used as initializers */ +#define XXH_PRIME64_1 0x9E3779B185EBCA87ULL /*!< 0b1001111000110111011110011011000110000101111010111100101010000111 */ +#define XXH_PRIME64_2 0xC2B2AE3D27D4EB4FULL /*!< 0b1100001010110010101011100011110100100111110101001110101101001111 */ +#define XXH_PRIME64_3 0x165667B19E3779F9ULL /*!< 0b0001011001010110011001111011000110011110001101110111100111111001 */ +#define XXH_PRIME64_4 0x85EBCA77C2B2AE63ULL /*!< 0b1000010111101011110010100111011111000010101100101010111001100011 */ +#define XXH_PRIME64_5 0x27D4EB2F165667C5ULL /*!< 0b0010011111010100111010110010111100010110010101100110011111000101 */ + +#ifdef XXH_OLD_NAMES +# define PRIME64_1 XXH_PRIME64_1 +# define PRIME64_2 XXH_PRIME64_2 +# define PRIME64_3 XXH_PRIME64_3 +# define PRIME64_4 XXH_PRIME64_4 +# define PRIME64_5 XXH_PRIME64_5 +#endif + +/*! @copydoc XXH32_round */ +static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input) +{ + acc += input * XXH_PRIME64_2; + acc = XXH_rotl64(acc, 31); + acc *= XXH_PRIME64_1; +#if (defined(__AVX512F__)) && !defined(XXH_ENABLE_AUTOVECTORIZE) + /* + * DISABLE AUTOVECTORIZATION: + * A compiler fence is used to prevent GCC and Clang from + * autovectorizing the XXH64 loop (pragmas and attributes don't work for some + * reason) without globally disabling AVX512. + * + * Autovectorization of XXH64 tends to be detrimental, + * though the exact outcome may change depending on exact cpu and compiler version. + * For information, it has been reported as detrimental for Skylake-X, + * but possibly beneficial for Zen4. + * + * The default is to disable auto-vectorization, + * but you can select to enable it instead using `XXH_ENABLE_AUTOVECTORIZE` build variable. + */ + XXH_COMPILER_GUARD(acc); +#endif + return acc; +} + +static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val) +{ + val = XXH64_round(0, val); + acc ^= val; + acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4; + return acc; +} + +/*! @copydoc XXH32_avalanche */ +static xxh_u64 XXH64_avalanche(xxh_u64 hash) +{ + hash ^= hash >> 33; + hash *= XXH_PRIME64_2; + hash ^= hash >> 29; + hash *= XXH_PRIME64_3; + hash ^= hash >> 32; + return hash; +} + + +#define XXH_get64bits(p) XXH_readLE64_align(p, align) + +/*! + * @internal + * @brief Sets up the initial accumulator state for XXH64(). + */ +XXH_FORCE_INLINE void +XXH64_initAccs(xxh_u64 *acc, xxh_u64 seed) +{ + XXH_ASSERT(acc != NULL); + acc[0] = seed + XXH_PRIME64_1 + XXH_PRIME64_2; + acc[1] = seed + XXH_PRIME64_2; + acc[2] = seed + 0; + acc[3] = seed - XXH_PRIME64_1; +} + +/*! + * @internal + * @brief Consumes a block of data for XXH64(). + * + * @return the end input pointer. + */ +XXH_FORCE_INLINE const xxh_u8 * +XXH64_consumeLong( + xxh_u64 *XXH_RESTRICT acc, + xxh_u8 const *XXH_RESTRICT input, + size_t len, + XXH_alignment align +) +{ + const xxh_u8* const bEnd = input + len; + const xxh_u8* const limit = bEnd - 31; + XXH_ASSERT(acc != NULL); + XXH_ASSERT(input != NULL); + XXH_ASSERT(len >= 32); + do { + /* reroll on 32-bit */ + if (sizeof(void *) < sizeof(xxh_u64)) { + size_t i; + for (i = 0; i < 4; i++) { + acc[i] = XXH64_round(acc[i], XXH_get64bits(input)); + input += 8; + } + } else { + acc[0] = XXH64_round(acc[0], XXH_get64bits(input)); input += 8; + acc[1] = XXH64_round(acc[1], XXH_get64bits(input)); input += 8; + acc[2] = XXH64_round(acc[2], XXH_get64bits(input)); input += 8; + acc[3] = XXH64_round(acc[3], XXH_get64bits(input)); input += 8; + } + } while (input < limit); + + return input; +} + +/*! + * @internal + * @brief Merges the accumulator lanes together for XXH64() + */ +XXH_FORCE_INLINE XXH_PUREF xxh_u64 +XXH64_mergeAccs(const xxh_u64 *acc) +{ + XXH_ASSERT(acc != NULL); + { + xxh_u64 h64 = XXH_rotl64(acc[0], 1) + XXH_rotl64(acc[1], 7) + + XXH_rotl64(acc[2], 12) + XXH_rotl64(acc[3], 18); + /* reroll on 32-bit */ + if (sizeof(void *) < sizeof(xxh_u64)) { + size_t i; + for (i = 0; i < 4; i++) { + h64 = XXH64_mergeRound(h64, acc[i]); + } + } else { + h64 = XXH64_mergeRound(h64, acc[0]); + h64 = XXH64_mergeRound(h64, acc[1]); + h64 = XXH64_mergeRound(h64, acc[2]); + h64 = XXH64_mergeRound(h64, acc[3]); + } + return h64; + } +} + +/*! + * @internal + * @brief Processes the last 0-31 bytes of @p ptr. + * + * There may be up to 31 bytes remaining to consume from the input. + * This final stage will digest them to ensure that all input bytes are present + * in the final mix. + * + * @param hash The hash to finalize. + * @param ptr The pointer to the remaining input. + * @param len The remaining length, modulo 32. + * @param align Whether @p ptr is aligned. + * @return The finalized hash + * @see XXH32_finalize(). + */ +XXH_STATIC XXH_PUREF xxh_u64 +XXH64_finalize(xxh_u64 hash, const xxh_u8* ptr, size_t len, XXH_alignment align) +{ + if (ptr==NULL) XXH_ASSERT(len == 0); + len &= 31; + while (len >= 8) { + xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); + ptr += 8; + hash ^= k1; + hash = XXH_rotl64(hash,27) * XXH_PRIME64_1 + XXH_PRIME64_4; + len -= 8; + } + if (len >= 4) { + hash ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1; + ptr += 4; + hash = XXH_rotl64(hash, 23) * XXH_PRIME64_2 + XXH_PRIME64_3; + len -= 4; + } + while (len > 0) { + hash ^= (*ptr++) * XXH_PRIME64_5; + hash = XXH_rotl64(hash, 11) * XXH_PRIME64_1; + --len; + } + return XXH64_avalanche(hash); +} + +#ifdef XXH_OLD_NAMES +# define PROCESS1_64 XXH_PROCESS1_64 +# define PROCESS4_64 XXH_PROCESS4_64 +# define PROCESS8_64 XXH_PROCESS8_64 +#else +# undef XXH_PROCESS1_64 +# undef XXH_PROCESS4_64 +# undef XXH_PROCESS8_64 +#endif + +/*! + * @internal + * @brief The implementation for @ref XXH64(). + * + * @param input , len , seed Directly passed from @ref XXH64(). + * @param align Whether @p input is aligned. + * @return The calculated hash. + */ +XXH_FORCE_INLINE XXH_PUREF xxh_u64 +XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align) +{ + xxh_u64 h64; + if (input==NULL) XXH_ASSERT(len == 0); + + if (len>=32) { /* Process a large block of data */ + xxh_u64 acc[4]; + XXH64_initAccs(acc, seed); + + input = XXH64_consumeLong(acc, input, len, align); + + h64 = XXH64_mergeAccs(acc); + } else { + h64 = seed + XXH_PRIME64_5; + } + + h64 += (xxh_u64) len; + + return XXH64_finalize(h64, input, len, align); +} + + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API XXH64_hash_t XXH64 (XXH_NOESCAPE const void* input, size_t len, XXH64_hash_t seed) +{ +#if !defined(XXH_NO_STREAM) && XXH_SIZE_OPT >= 2 + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ + XXH64_state_t state; + XXH64_reset(&state, seed); + XXH64_update(&state, (const xxh_u8*)input, len); + return XXH64_digest(&state); +#else + if (XXH_FORCE_ALIGN_CHECK) { + if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */ + return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); + } } + + return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); + +#endif +} + +/******* Hash Streaming *******/ +#ifndef XXH_NO_STREAM +/*! @ingroup XXH64_family*/ +XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void) +{ + return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t)); +} +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) +{ + XXH_free(statePtr); + return XXH_OK; +} + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API void XXH64_copyState(XXH_NOESCAPE XXH64_state_t* dstState, const XXH64_state_t* srcState) +{ + XXH_memcpy(dstState, srcState, sizeof(*dstState)); +} + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH_NOESCAPE XXH64_state_t* statePtr, XXH64_hash_t seed) +{ + XXH_ASSERT(statePtr != NULL); + memset(statePtr, 0, sizeof(*statePtr)); + XXH64_initAccs(statePtr->acc, seed); + return XXH_OK; +} + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API XXH_errorcode +XXH64_update (XXH_NOESCAPE XXH64_state_t* state, XXH_NOESCAPE const void* input, size_t len) +{ + if (input==NULL) { + XXH_ASSERT(len == 0); + return XXH_OK; + } + + state->total_len += len; + + XXH_ASSERT(state->bufferedSize <= sizeof(state->buffer)); + if (len < sizeof(state->buffer) - state->bufferedSize) { /* fill in tmp buffer */ + XXH_memcpy(state->buffer + state->bufferedSize, input, len); + state->bufferedSize += (XXH32_hash_t)len; + return XXH_OK; + } + + { const xxh_u8* xinput = (const xxh_u8*)input; + const xxh_u8* const bEnd = xinput + len; + + if (state->bufferedSize) { /* non-empty buffer => complete first */ + XXH_memcpy(state->buffer + state->bufferedSize, xinput, sizeof(state->buffer) - state->bufferedSize); + xinput += sizeof(state->buffer) - state->bufferedSize; + /* and process one round */ + (void)XXH64_consumeLong(state->acc, state->buffer, sizeof(state->buffer), XXH_aligned); + state->bufferedSize = 0; + } + + XXH_ASSERT(xinput <= bEnd); + if ((size_t)(bEnd - xinput) >= sizeof(state->buffer)) { + /* Process the remaining data */ + xinput = XXH64_consumeLong(state->acc, xinput, (size_t)(bEnd - xinput), XXH_unaligned); + } + + if (xinput < bEnd) { + /* Copy the leftover to the tmp buffer */ + XXH_memcpy(state->buffer, xinput, (size_t)(bEnd-xinput)); + state->bufferedSize = (unsigned)(bEnd-xinput); + } + } + + return XXH_OK; +} + + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API XXH64_hash_t XXH64_digest(XXH_NOESCAPE const XXH64_state_t* state) +{ + xxh_u64 h64; + + if (state->total_len >= 32) { + h64 = XXH64_mergeAccs(state->acc); + } else { + h64 = state->acc[2] /*seed*/ + XXH_PRIME64_5; + } + + h64 += (xxh_u64) state->total_len; + + return XXH64_finalize(h64, state->buffer, (size_t)state->total_len, XXH_aligned); +} +#endif /* !XXH_NO_STREAM */ + +/******* Canonical representation *******/ + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH_NOESCAPE XXH64_canonical_t* dst, XXH64_hash_t hash) +{ + XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash); + XXH_memcpy(dst, &hash, sizeof(*dst)); +} + +/*! @ingroup XXH64_family */ +XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(XXH_NOESCAPE const XXH64_canonical_t* src) +{ + return XXH_readBE64(src); +} + +#ifndef XXH_NO_XXH3 + +/* ********************************************************************* +* XXH3 +* New generation hash designed for speed on small keys and vectorization +************************************************************************ */ +/*! + * @} + * @defgroup XXH3_impl XXH3 implementation + * @ingroup impl + * @{ + */ + +/* === Compiler specifics === */ + + +#if (defined(__GNUC__) && (__GNUC__ >= 3)) \ + || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \ + || defined(__clang__) +# define XXH_likely(x) __builtin_expect(x, 1) +# define XXH_unlikely(x) __builtin_expect(x, 0) +#else +# define XXH_likely(x) (x) +# define XXH_unlikely(x) (x) +#endif + +#ifndef XXH_HAS_INCLUDE +# ifdef __has_include +/* + * Not defined as XXH_HAS_INCLUDE(x) (function-like) because + * this causes segfaults in Apple Clang 4.2 (on Mac OS X 10.7 Lion) + */ +# define XXH_HAS_INCLUDE __has_include +# else +# define XXH_HAS_INCLUDE(x) 0 +# endif +#endif + +#if defined(__GNUC__) || defined(__clang__) +# if defined(__ARM_FEATURE_SVE) +# include +# endif +# if defined(__ARM_NEON__) || defined(__ARM_NEON) \ + || (defined(_M_ARM) && _M_ARM >= 7) \ + || defined(_M_ARM64) || defined(_M_ARM64EC) \ + || (defined(__wasm_simd128__) && XXH_HAS_INCLUDE()) /* WASM SIMD128 via SIMDe */ +# define inline __inline__ /* circumvent a clang bug */ +# include +# undef inline +# elif defined(__AVX2__) +# include +# elif defined(__SSE2__) +# include +# elif defined(__loongarch_sx) +# include +# endif +#endif + +#if defined(_MSC_VER) +# include +#endif + +/* + * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while + * remaining a true 64-bit/128-bit hash function. + * + * This is done by prioritizing a subset of 64-bit operations that can be + * emulated without too many steps on the average 32-bit machine. + * + * For example, these two lines seem similar, and run equally fast on 64-bit: + * + * xxh_u64 x; + * x ^= (x >> 47); // good + * x ^= (x >> 13); // bad + * + * However, to a 32-bit machine, there is a major difference. + * + * x ^= (x >> 47) looks like this: + * + * x.lo ^= (x.hi >> (47 - 32)); + * + * while x ^= (x >> 13) looks like this: + * + * // note: funnel shifts are not usually cheap. + * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13)); + * x.hi ^= (x.hi >> 13); + * + * The first one is significantly faster than the second, simply because the + * shift is larger than 32. This means: + * - All the bits we need are in the upper 32 bits, so we can ignore the lower + * 32 bits in the shift. + * - The shift result will always fit in the lower 32 bits, and therefore, + * we can ignore the upper 32 bits in the xor. + * + * Thanks to this optimization, XXH3 only requires these features to be efficient: + * + * - Usable unaligned access + * - A 32-bit or 64-bit ALU + * - If 32-bit, a decent ADC instruction + * - A 32 or 64-bit multiply with a 64-bit result + * - For the 128-bit variant, a decent byteswap helps short inputs. + * + * The first two are already required by XXH32, and almost all 32-bit and 64-bit + * platforms which can run XXH32 can run XXH3 efficiently. + * + * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one + * notable exception. + * + * First of all, Thumb-1 lacks support for the UMULL instruction which + * performs the important long multiply. This means numerous __aeabi_lmul + * calls. + * + * Second of all, the 8 functional registers are just not enough. + * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need + * Lo registers, and this shuffling results in thousands more MOVs than A32. + * + * A32 and T32 don't have this limitation. They can access all 14 registers, + * do a 32->64 multiply with UMULL, and the flexible operand allowing free + * shifts is helpful, too. + * + * Therefore, we do a quick sanity check. + * + * If compiling Thumb-1 for a target which supports ARM instructions, we will + * emit a warning, as it is not a "sane" platform to compile for. + * + * Usually, if this happens, it is because of an accident and you probably need + * to specify -march, as you likely meant to compile for a newer architecture. + * + * Credit: large sections of the vectorial and asm source code paths + * have been contributed by @easyaspi314 + */ +#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM) +# warning "XXH3 is highly inefficient without ARM or Thumb-2." +#endif + +/* ========================================== + * Vectorization detection + * ========================================== */ + +#ifdef XXH_DOXYGEN +/*! + * @ingroup tuning + * @brief Overrides the vectorization implementation chosen for XXH3. + * + * Can be defined to 0 to disable SIMD or any of the values mentioned in + * @ref XXH_VECTOR_TYPE. + * + * If this is not defined, it uses predefined macros to determine the best + * implementation. + */ +# define XXH_VECTOR XXH_SCALAR +/*! + * @ingroup tuning + * @brief Selects the minimum alignment for XXH3's accumulators. + * + * When using SIMD, this should match the alignment required for said vector + * type, so, for example, 32 for AVX2. + * + * Default: Auto detected. + */ +# define XXH_ACC_ALIGN 8 +#endif + +/* Actual definition */ +#ifndef XXH_DOXYGEN +#endif + +#ifndef XXH_VECTOR /* can be defined on command line */ +# if defined(__ARM_FEATURE_SVE) +# define XXH_VECTOR XXH_SVE +# elif ( \ + defined(__ARM_NEON__) || defined(__ARM_NEON) /* gcc */ \ + || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC) /* msvc */ \ + || (defined(__wasm_simd128__) && XXH_HAS_INCLUDE()) /* wasm simd128 via SIMDe */ \ + ) && ( \ + defined(_WIN32) || defined(__LITTLE_ENDIAN__) /* little endian only */ \ + || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) \ + ) +# define XXH_VECTOR XXH_NEON +# elif defined(__AVX512F__) +# define XXH_VECTOR XXH_AVX512 +# elif defined(__AVX2__) +# define XXH_VECTOR XXH_AVX2 +# elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2)) +# define XXH_VECTOR XXH_SSE2 +# elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \ + || (defined(__s390x__) && defined(__VEC__)) \ + && defined(__GNUC__) /* TODO: IBM XL */ +# define XXH_VECTOR XXH_VSX +# elif defined(__loongarch_sx) +# define XXH_VECTOR XXH_LSX +# else +# define XXH_VECTOR XXH_SCALAR +# endif +#endif + +/* __ARM_FEATURE_SVE is only supported by GCC & Clang. */ +#if (XXH_VECTOR == XXH_SVE) && !defined(__ARM_FEATURE_SVE) +# ifdef _MSC_VER +# pragma warning(once : 4606) +# else +# warning "__ARM_FEATURE_SVE isn't supported. Use SCALAR instead." +# endif +# undef XXH_VECTOR +# define XXH_VECTOR XXH_SCALAR +#endif + +/* + * Controls the alignment of the accumulator, + * for compatibility with aligned vector loads, which are usually faster. + */ +#ifndef XXH_ACC_ALIGN +# if defined(XXH_X86DISPATCH) +# define XXH_ACC_ALIGN 64 /* for compatibility with avx512 */ +# elif XXH_VECTOR == XXH_SCALAR /* scalar */ +# define XXH_ACC_ALIGN 8 +# elif XXH_VECTOR == XXH_SSE2 /* sse2 */ +# define XXH_ACC_ALIGN 16 +# elif XXH_VECTOR == XXH_AVX2 /* avx2 */ +# define XXH_ACC_ALIGN 32 +# elif XXH_VECTOR == XXH_NEON /* neon */ +# define XXH_ACC_ALIGN 16 +# elif XXH_VECTOR == XXH_VSX /* vsx */ +# define XXH_ACC_ALIGN 16 +# elif XXH_VECTOR == XXH_AVX512 /* avx512 */ +# define XXH_ACC_ALIGN 64 +# elif XXH_VECTOR == XXH_SVE /* sve */ +# define XXH_ACC_ALIGN 64 +# elif XXH_VECTOR == XXH_LSX /* lsx */ +# define XXH_ACC_ALIGN 64 +# endif +#endif + +#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \ + || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512 +# define XXH_SEC_ALIGN XXH_ACC_ALIGN +#elif XXH_VECTOR == XXH_SVE +# define XXH_SEC_ALIGN XXH_ACC_ALIGN +#else +# define XXH_SEC_ALIGN 8 +#endif + +#if defined(__GNUC__) || defined(__clang__) +# define XXH_ALIASING __attribute__((__may_alias__)) +#else +# define XXH_ALIASING /* nothing */ +#endif + +/* + * UGLY HACK: + * GCC usually generates the best code with -O3 for xxHash. + * + * However, when targeting AVX2, it is overzealous in its unrolling resulting + * in code roughly 3/4 the speed of Clang. + * + * There are other issues, such as GCC splitting _mm256_loadu_si256 into + * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which + * only applies to Sandy and Ivy Bridge... which don't even support AVX2. + * + * That is why when compiling the AVX2 version, it is recommended to use either + * -O2 -mavx2 -march=haswell + * or + * -O2 -mavx2 -mno-avx256-split-unaligned-load + * for decent performance, or to use Clang instead. + * + * Fortunately, we can control the first one with a pragma that forces GCC into + * -O2, but the other one we can't control without "failed to inline always + * inline function due to target mismatch" warnings. + */ +#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \ + && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ + && defined(__OPTIMIZE__) && XXH_SIZE_OPT <= 0 /* respect -O0 and -Os */ +# pragma GCC push_options +# pragma GCC optimize("-O2") +#endif + +#if XXH_VECTOR == XXH_NEON + +/* + * UGLY HACK: While AArch64 GCC on Linux does not seem to care, on macOS, GCC -O3 + * optimizes out the entire hashLong loop because of the aliasing violation. + * + * However, GCC is also inefficient at load-store optimization with vld1q/vst1q, + * so the only option is to mark it as aliasing. + */ +typedef uint64x2_t xxh_aliasing_uint64x2_t XXH_ALIASING; + +/*! + * @internal + * @brief `vld1q_u64` but faster and alignment-safe. + * + * On AArch64, unaligned access is always safe, but on ARMv7-a, it is only + * *conditionally* safe (`vld1` has an alignment bit like `movdq[ua]` in x86). + * + * GCC for AArch64 sees `vld1q_u8` as an intrinsic instead of a load, so it + * prohibits load-store optimizations. Therefore, a direct dereference is used. + * + * Otherwise, `vld1q_u8` is used with `vreinterpretq_u8_u64` to do a safe + * unaligned load. + */ +#if defined(__aarch64__) && defined(__GNUC__) && !defined(__clang__) +XXH_FORCE_INLINE uint64x2_t XXH_vld1q_u64(void const* ptr) /* silence -Wcast-align */ +{ + return *(xxh_aliasing_uint64x2_t const *)ptr; +} +#else +XXH_FORCE_INLINE uint64x2_t XXH_vld1q_u64(void const* ptr) +{ + return vreinterpretq_u64_u8(vld1q_u8((uint8_t const*)ptr)); +} +#endif + +/*! + * @internal + * @brief `vmlal_u32` on low and high halves of a vector. + * + * This is a workaround for AArch64 GCC < 11 which implemented arm_neon.h with + * inline assembly and were therefore incapable of merging the `vget_{low, high}_u32` + * with `vmlal_u32`. + */ +#if defined(__aarch64__) && defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 11 +XXH_FORCE_INLINE uint64x2_t +XXH_vmlal_low_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs) +{ + /* Inline assembly is the only way */ + __asm__("umlal %0.2d, %1.2s, %2.2s" : "+w" (acc) : "w" (lhs), "w" (rhs)); + return acc; +} +XXH_FORCE_INLINE uint64x2_t +XXH_vmlal_high_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs) +{ + /* This intrinsic works as expected */ + return vmlal_high_u32(acc, lhs, rhs); +} +#else +/* Portable intrinsic versions */ +XXH_FORCE_INLINE uint64x2_t +XXH_vmlal_low_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs) +{ + return vmlal_u32(acc, vget_low_u32(lhs), vget_low_u32(rhs)); +} +/*! @copydoc XXH_vmlal_low_u32 + * Assume the compiler converts this to vmlal_high_u32 on aarch64 */ +XXH_FORCE_INLINE uint64x2_t +XXH_vmlal_high_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs) +{ + return vmlal_u32(acc, vget_high_u32(lhs), vget_high_u32(rhs)); +} +#endif + +/*! + * @ingroup tuning + * @brief Controls the NEON to scalar ratio for XXH3 + * + * This can be set to 2, 4, 6, or 8. + * + * ARM Cortex CPUs are _very_ sensitive to how their pipelines are used. + * + * For example, the Cortex-A73 can dispatch 3 micro-ops per cycle, but only 2 of those + * can be NEON. If you are only using NEON instructions, you are only using 2/3 of the CPU + * bandwidth. + * + * This is even more noticeable on the more advanced cores like the Cortex-A76 which + * can dispatch 8 micro-ops per cycle, but still only 2 NEON micro-ops at once. + * + * Therefore, to make the most out of the pipeline, it is beneficial to run 6 NEON lanes + * and 2 scalar lanes, which is chosen by default. + * + * This does not apply to Apple processors or 32-bit processors, which run better with + * full NEON. These will default to 8. Additionally, size-optimized builds run 8 lanes. + * + * This change benefits CPUs with large micro-op buffers without negatively affecting + * most other CPUs: + * + * | Chipset | Dispatch type | NEON only | 6:2 hybrid | Diff. | + * |:----------------------|:--------------------|----------:|-----------:|------:| + * | Snapdragon 730 (A76) | 2 NEON/8 micro-ops | 8.8 GB/s | 10.1 GB/s | ~16% | + * | Snapdragon 835 (A73) | 2 NEON/3 micro-ops | 5.1 GB/s | 5.3 GB/s | ~5% | + * | Marvell PXA1928 (A53) | In-order dual-issue | 1.9 GB/s | 1.9 GB/s | 0% | + * | Apple M1 | 4 NEON/8 micro-ops | 37.3 GB/s | 36.1 GB/s | ~-3% | + * + * It also seems to fix some bad codegen on GCC, making it almost as fast as clang. + * + * When using WASM SIMD128, if this is 2 or 6, SIMDe will scalarize 2 of the lanes meaning + * it effectively becomes worse 4. + * + * @see XXH3_accumulate_512_neon() + */ +# ifndef XXH3_NEON_LANES +# if (defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) \ + && !defined(__APPLE__) && XXH_SIZE_OPT <= 0 +# define XXH3_NEON_LANES 6 +# else +# define XXH3_NEON_LANES XXH_ACC_NB +# endif +# endif +#endif /* XXH_VECTOR == XXH_NEON */ + +/* + * VSX and Z Vector helpers. + * + * This is very messy, and any pull requests to clean this up are welcome. + * + * There are a lot of problems with supporting VSX and s390x, due to + * inconsistent intrinsics, spotty coverage, and multiple endiannesses. + */ +#if XXH_VECTOR == XXH_VSX +/* Annoyingly, these headers _may_ define three macros: `bool`, `vector`, + * and `pixel`. This is a problem for obvious reasons. + * + * These keywords are unnecessary; the spec literally says they are + * equivalent to `__bool`, `__vector`, and `__pixel` and may be undef'd + * after including the header. + * + * We use pragma push_macro/pop_macro to keep the namespace clean. */ +# pragma push_macro("bool") +# pragma push_macro("vector") +# pragma push_macro("pixel") +/* silence potential macro redefined warnings */ +# undef bool +# undef vector +# undef pixel + +# if defined(__s390x__) +# include +# else +# include +# endif + +/* Restore the original macro values, if applicable. */ +# pragma pop_macro("pixel") +# pragma pop_macro("vector") +# pragma pop_macro("bool") + +typedef __vector unsigned long long xxh_u64x2; +typedef __vector unsigned char xxh_u8x16; +typedef __vector unsigned xxh_u32x4; + +/* + * UGLY HACK: Similar to aarch64 macOS GCC, s390x GCC has the same aliasing issue. + */ +typedef xxh_u64x2 xxh_aliasing_u64x2 XXH_ALIASING; + +# ifndef XXH_VSX_BE +# if defined(__BIG_ENDIAN__) \ + || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +# define XXH_VSX_BE 1 +# elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__ +# warning "-maltivec=be is not recommended. Please use native endianness." +# define XXH_VSX_BE 1 +# else +# define XXH_VSX_BE 0 +# endif +# endif /* !defined(XXH_VSX_BE) */ + +# if XXH_VSX_BE +# if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__)) +# define XXH_vec_revb vec_revb +# else +/*! + * A polyfill for POWER9's vec_revb(). + */ +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val) +{ + xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 }; + return vec_perm(val, val, vByteSwap); +} +# endif +# endif /* XXH_VSX_BE */ + +/*! + * Performs an unaligned vector load and byte swaps it on big endian. + */ +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr) +{ + xxh_u64x2 ret; + XXH_memcpy(&ret, ptr, sizeof(xxh_u64x2)); +# if XXH_VSX_BE + ret = XXH_vec_revb(ret); +# endif + return ret; +} + +/* + * vec_mulo and vec_mule are very problematic intrinsics on PowerPC + * + * These intrinsics weren't added until GCC 8, despite existing for a while, + * and they are endian dependent. Also, their meaning swap depending on version. + * */ +# if defined(__s390x__) + /* s390x is always big endian, no issue on this platform */ +# define XXH_vec_mulo vec_mulo +# define XXH_vec_mule vec_mule +# elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw) && !defined(__ibmxl__) +/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */ + /* The IBM XL Compiler (which defined __clang__) only implements the vec_* operations */ +# define XXH_vec_mulo __builtin_altivec_vmulouw +# define XXH_vec_mule __builtin_altivec_vmuleuw +# else +/* gcc needs inline assembly */ +/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */ +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b) +{ + xxh_u64x2 result; + __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); + return result; +} +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b) +{ + xxh_u64x2 result; + __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); + return result; +} +# endif /* XXH_vec_mulo, XXH_vec_mule */ +#endif /* XXH_VECTOR == XXH_VSX */ + +#if XXH_VECTOR == XXH_SVE +#define ACCRND(acc, offset) \ +do { \ + svuint64_t input_vec = svld1_u64(mask, xinput + offset); \ + svuint64_t secret_vec = svld1_u64(mask, xsecret + offset); \ + svuint64_t mixed = sveor_u64_x(mask, secret_vec, input_vec); \ + svuint64_t swapped = svtbl_u64(input_vec, kSwap); \ + svuint64_t mixed_lo = svextw_u64_x(mask, mixed); \ + svuint64_t mixed_hi = svlsr_n_u64_x(mask, mixed, 32); \ + svuint64_t mul = svmad_u64_x(mask, mixed_lo, mixed_hi, swapped); \ + acc = svadd_u64_x(mask, acc, mul); \ +} while (0) +#endif /* XXH_VECTOR == XXH_SVE */ + +/* prefetch + * can be disabled, by declaring XXH_NO_PREFETCH build macro */ +#if defined(XXH_NO_PREFETCH) +# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ +#else +# if XXH_SIZE_OPT >= 1 +# define XXH_PREFETCH(ptr) (void)(ptr) +# elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) /* _mm_prefetch() not defined outside of x86/x64 */ +# include /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */ +# define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0) +# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) ) +# define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */) +# else +# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ +# endif +#endif /* XXH_NO_PREFETCH */ + + +/* ========================================== + * XXH3 default settings + * ========================================== */ + +#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */ + +#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN) +# error "default keyset is not large enough" +#endif + +/*! Pseudorandom secret taken directly from FARSH. */ +XXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = { + 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c, + 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, + 0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, + 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c, + 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, + 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, + 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d, + 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, + 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, + 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e, + 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, + 0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e, +}; + +static const xxh_u64 PRIME_MX1 = 0x165667919E3779F9ULL; /*!< 0b0001011001010110011001111001000110011110001101110111100111111001 */ +static const xxh_u64 PRIME_MX2 = 0x9FB21C651E98DF25ULL; /*!< 0b1001111110110010000111000110010100011110100110001101111100100101 */ + +#ifdef XXH_OLD_NAMES +# define kSecret XXH3_kSecret +#endif + +#ifdef XXH_DOXYGEN +/*! + * @brief Calculates a 32-bit to 64-bit long multiply. + * + * Implemented as a macro. + * + * Wraps `__emulu` on MSVC x86 because it tends to call `__allmul` when it doesn't + * need to (but it shouldn't need to anyways, it is about 7 instructions to do + * a 64x64 multiply...). Since we know that this will _always_ emit `MULL`, we + * use that instead of the normal method. + * + * If you are compiling for platforms like Thumb-1 and don't have a better option, + * you may also want to write your own long multiply routine here. + * + * @param x, y Numbers to be multiplied + * @return 64-bit product of the low 32 bits of @p x and @p y. + */ +XXH_FORCE_INLINE xxh_u64 +XXH_mult32to64(xxh_u64 x, xxh_u64 y) +{ + return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF); +} +#elif defined(_MSC_VER) && defined(_M_IX86) +# define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y)) +#else +/* + * Downcast + upcast is usually better than masking on older compilers like + * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers. + * + * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands + * and perform a full 64x64 multiply -- entirely redundant on 32-bit. + */ +# define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y)) +#endif + +/*! + * @brief Calculates a 64->128-bit long multiply. + * + * Uses `__uint128_t` and `_umul128` if available, otherwise uses a scalar + * version. + * + * @param lhs , rhs The 64-bit integers to be multiplied + * @return The 128-bit result represented in an @ref XXH128_hash_t. + */ +static XXH128_hash_t +XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs) +{ + /* + * GCC/Clang __uint128_t method. + * + * On most 64-bit targets, GCC and Clang define a __uint128_t type. + * This is usually the best way as it usually uses a native long 64-bit + * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64. + * + * Usually. + * + * Despite being a 32-bit platform, Clang (and emscripten) define this type + * despite not having the arithmetic for it. This results in a laggy + * compiler builtin call which calculates a full 128-bit multiply. + * In that case it is best to use the portable one. + * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677 + */ +#if (defined(__GNUC__) || defined(__clang__)) && !defined(__wasm__) \ + && defined(__SIZEOF_INT128__) \ + || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128) + + __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs; + XXH128_hash_t r128; + r128.low64 = (xxh_u64)(product); + r128.high64 = (xxh_u64)(product >> 64); + return r128; + + /* + * MSVC for x64's _umul128 method. + * + * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct); + * + * This compiles to single operand MUL on x64. + */ +#elif (defined(_M_X64) || defined(_M_IA64)) && !defined(_M_ARM64EC) + +#ifndef _MSC_VER +# pragma intrinsic(_umul128) +#endif + xxh_u64 product_high; + xxh_u64 const product_low = _umul128(lhs, rhs, &product_high); + XXH128_hash_t r128; + r128.low64 = product_low; + r128.high64 = product_high; + return r128; + + /* + * MSVC for ARM64's __umulh method. + * + * This compiles to the same MUL + UMULH as GCC/Clang's __uint128_t method. + */ +#elif defined(_M_ARM64) || defined(_M_ARM64EC) + +#ifndef _MSC_VER +# pragma intrinsic(__umulh) +#endif + XXH128_hash_t r128; + r128.low64 = lhs * rhs; + r128.high64 = __umulh(lhs, rhs); + return r128; + +#else + /* + * Portable scalar method. Optimized for 32-bit and 64-bit ALUs. + * + * This is a fast and simple grade school multiply, which is shown below + * with base 10 arithmetic instead of base 0x100000000. + * + * 9 3 // D2 lhs = 93 + * x 7 5 // D2 rhs = 75 + * ---------- + * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15 + * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45 + * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21 + * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63 + * --------- + * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27 + * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67 + * --------- + * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975 + * + * The reasons for adding the products like this are: + * 1. It avoids manual carry tracking. Just like how + * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX. + * This avoids a lot of complexity. + * + * 2. It hints for, and on Clang, compiles to, the powerful UMAAL + * instruction available in ARM's Digital Signal Processing extension + * in 32-bit ARMv6 and later, which is shown below: + * + * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm) + * { + * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm; + * *RdLo = (xxh_u32)(product & 0xFFFFFFFF); + * *RdHi = (xxh_u32)(product >> 32); + * } + * + * This instruction was designed for efficient long multiplication, and + * allows this to be calculated in only 4 instructions at speeds + * comparable to some 64-bit ALUs. + * + * 3. It isn't terrible on other platforms. Usually this will be a couple + * of 32-bit ADD/ADCs. + */ + + /* First calculate all of the cross products. */ + xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF); + xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF); + xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32); + xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32); + + /* Now add the products together. These will never overflow. */ + xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi; + xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi; + xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF); + + XXH128_hash_t r128; + r128.low64 = lower; + r128.high64 = upper; + return r128; +#endif +} + +/*! + * @brief Calculates a 64-bit to 128-bit multiply, then XOR folds it. + * + * The reason for the separate function is to prevent passing too many structs + * around by value. This will hopefully inline the multiply, but we don't force it. + * + * @param lhs , rhs The 64-bit integers to multiply + * @return The low 64 bits of the product XOR'd by the high 64 bits. + * @see XXH_mult64to128() + */ +static xxh_u64 +XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs) +{ + XXH128_hash_t product = XXH_mult64to128(lhs, rhs); + return product.low64 ^ product.high64; +} + +/*! Seems to produce slightly better code on GCC for some reason. */ +XXH_FORCE_INLINE XXH_CONSTF xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift) +{ + XXH_ASSERT(0 <= shift && shift < 64); + return v64 ^ (v64 >> shift); +} + +/* + * This is a fast avalanche stage, + * suitable when input bits are already partially mixed + */ +static XXH64_hash_t XXH3_avalanche(xxh_u64 h64) +{ + h64 = XXH_xorshift64(h64, 37); + h64 *= PRIME_MX1; + h64 = XXH_xorshift64(h64, 32); + return h64; +} + +/* + * This is a stronger avalanche, + * inspired by Pelle Evensen's rrmxmx + * preferable when input has not been previously mixed + */ +static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len) +{ + /* this mix is inspired by Pelle Evensen's rrmxmx */ + h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24); + h64 *= PRIME_MX2; + h64 ^= (h64 >> 35) + len ; + h64 *= PRIME_MX2; + return XXH_xorshift64(h64, 28); +} + + +/* ========================================== + * Short keys + * ========================================== + * One of the shortcomings of XXH32 and XXH64 was that their performance was + * sub-optimal on short lengths. It used an iterative algorithm which strongly + * favored lengths that were a multiple of 4 or 8. + * + * Instead of iterating over individual inputs, we use a set of single shot + * functions which piece together a range of lengths and operate in constant time. + * + * Additionally, the number of multiplies has been significantly reduced. This + * reduces latency, especially when emulating 64-bit multiplies on 32-bit. + * + * Depending on the platform, this may or may not be faster than XXH32, but it + * is almost guaranteed to be faster than XXH64. + */ + +/* + * At very short lengths, there isn't enough input to fully hide secrets, or use + * the entire secret. + * + * There is also only a limited amount of mixing we can do before significantly + * impacting performance. + * + * Therefore, we use different sections of the secret and always mix two secret + * samples with an XOR. This should have no effect on performance on the + * seedless or withSeed variants because everything _should_ be constant folded + * by modern compilers. + * + * The XOR mixing hides individual parts of the secret and increases entropy. + * + * This adds an extra layer of strength for custom secrets. + */ +XXH_FORCE_INLINE XXH_PUREF XXH64_hash_t +XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(input != NULL); + XXH_ASSERT(1 <= len && len <= 3); + XXH_ASSERT(secret != NULL); + /* + * len = 1: combined = { input[0], 0x01, input[0], input[0] } + * len = 2: combined = { input[1], 0x02, input[0], input[1] } + * len = 3: combined = { input[2], 0x03, input[0], input[1] } + */ + { xxh_u8 const c1 = input[0]; + xxh_u8 const c2 = input[len >> 1]; + xxh_u8 const c3 = input[len - 1]; + xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) + | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); + xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed; + xxh_u64 const keyed = (xxh_u64)combined ^ bitflip; + return XXH64_avalanche(keyed); + } +} + +XXH_FORCE_INLINE XXH_PUREF XXH64_hash_t +XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(4 <= len && len <= 8); + seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; + { xxh_u32 const input1 = XXH_readLE32(input); + xxh_u32 const input2 = XXH_readLE32(input + len - 4); + xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed; + xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32); + xxh_u64 const keyed = input64 ^ bitflip; + return XXH3_rrmxmx(keyed, len); + } +} + +XXH_FORCE_INLINE XXH_PUREF XXH64_hash_t +XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(9 <= len && len <= 16); + { xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed; + xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed; + xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1; + xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2; + xxh_u64 const acc = len + + XXH_swap64(input_lo) + input_hi + + XXH3_mul128_fold64(input_lo, input_hi); + return XXH3_avalanche(acc); + } +} + +XXH_FORCE_INLINE XXH_PUREF XXH64_hash_t +XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(len <= 16); + { if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed); + if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed); + if (len) return XXH3_len_1to3_64b(input, len, secret, seed); + return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64))); + } +} + +/* + * DISCLAIMER: There are known *seed-dependent* multicollisions here due to + * multiplication by zero, affecting hashes of lengths 17 to 240. + * + * However, they are very unlikely. + * + * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all + * unseeded non-cryptographic hashes, it does not attempt to defend itself + * against specially crafted inputs, only random inputs. + * + * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes + * cancelling out the secret is taken an arbitrary number of times (addressed + * in XXH3_accumulate_512), this collision is very unlikely with random inputs + * and/or proper seeding: + * + * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a + * function that is only called up to 16 times per hash with up to 240 bytes of + * input. + * + * This is not too bad for a non-cryptographic hash function, especially with + * only 64 bit outputs. + * + * The 128-bit variant (which trades some speed for strength) is NOT affected + * by this, although it is always a good idea to use a proper seed if you care + * about strength. + */ +XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64) +{ +#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ + && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \ + && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */ + /* + * UGLY HACK: + * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in + * slower code. + * + * By forcing seed64 into a register, we disrupt the cost model and + * cause it to scalarize. See `XXH32_round()` + * + * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600, + * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on + * GCC 9.2, despite both emitting scalar code. + * + * GCC generates much better scalar code than Clang for the rest of XXH3, + * which is why finding a more optimal codepath is an interest. + */ + XXH_COMPILER_GUARD(seed64); +#endif + { xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 const input_hi = XXH_readLE64(input+8); + return XXH3_mul128_fold64( + input_lo ^ (XXH_readLE64(secret) + seed64), + input_hi ^ (XXH_readLE64(secret+8) - seed64) + ); + } +} + +/* For mid range keys, XXH3 uses a Mum-hash variant. */ +XXH_FORCE_INLINE XXH_PUREF XXH64_hash_t +XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) +{ + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; + XXH_ASSERT(16 < len && len <= 128); + + { xxh_u64 acc = len * XXH_PRIME64_1; +#if XXH_SIZE_OPT >= 1 + /* Smaller and cleaner, but slightly slower. */ + unsigned int i = (unsigned int)(len - 1) / 32; + do { + acc += XXH3_mix16B(input+16 * i, secret+32*i, seed); + acc += XXH3_mix16B(input+len-16*(i+1), secret+32*i+16, seed); + } while (i-- != 0); +#else + if (len > 32) { + if (len > 64) { + if (len > 96) { + acc += XXH3_mix16B(input+48, secret+96, seed); + acc += XXH3_mix16B(input+len-64, secret+112, seed); + } + acc += XXH3_mix16B(input+32, secret+64, seed); + acc += XXH3_mix16B(input+len-48, secret+80, seed); + } + acc += XXH3_mix16B(input+16, secret+32, seed); + acc += XXH3_mix16B(input+len-32, secret+48, seed); + } + acc += XXH3_mix16B(input+0, secret+0, seed); + acc += XXH3_mix16B(input+len-16, secret+16, seed); +#endif + return XXH3_avalanche(acc); + } +} + +XXH_NO_INLINE XXH_PUREF XXH64_hash_t +XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) +{ + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + + #define XXH3_MIDSIZE_STARTOFFSET 3 + #define XXH3_MIDSIZE_LASTOFFSET 17 + + { xxh_u64 acc = len * XXH_PRIME64_1; + xxh_u64 acc_end; + unsigned int const nbRounds = (unsigned int)len / 16; + unsigned int i; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + for (i=0; i<8; i++) { + acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed); + } + /* last bytes */ + acc_end = XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed); + XXH_ASSERT(nbRounds >= 8); + acc = XXH3_avalanche(acc); +#if defined(__clang__) /* Clang */ \ + && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ + && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ + /* + * UGLY HACK: + * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86. + * In everywhere else, it uses scalar code. + * + * For 64->128-bit multiplies, even if the NEON was 100% optimal, it + * would still be slower than UMAAL (see XXH_mult64to128). + * + * Unfortunately, Clang doesn't handle the long multiplies properly and + * converts them to the nonexistent "vmulq_u64" intrinsic, which is then + * scalarized into an ugly mess of VMOV.32 instructions. + * + * This mess is difficult to avoid without turning autovectorization + * off completely, but they are usually relatively minor and/or not + * worth it to fix. + * + * This loop is the easiest to fix, as unlike XXH32, this pragma + * _actually works_ because it is a loop vectorization instead of an + * SLP vectorization. + */ + #pragma clang loop vectorize(disable) +#endif + for (i=8 ; i < nbRounds; i++) { + /* + * Prevents clang for unrolling the acc loop and interleaving with this one. + */ + XXH_COMPILER_GUARD(acc); + acc_end += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed); + } + return XXH3_avalanche(acc + acc_end); + } +} + + +/* ======= Long Keys ======= */ + +#define XXH_STRIPE_LEN 64 +#define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */ +#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64)) + +#ifdef XXH_OLD_NAMES +# define STRIPE_LEN XXH_STRIPE_LEN +# define ACC_NB XXH_ACC_NB +#endif + +#ifndef XXH_PREFETCH_DIST +# ifdef __clang__ +# define XXH_PREFETCH_DIST 320 +# else +# if (XXH_VECTOR == XXH_AVX512) +# define XXH_PREFETCH_DIST 512 +# else +# define XXH_PREFETCH_DIST 384 +# endif +# endif /* __clang__ */ +#endif /* XXH_PREFETCH_DIST */ + +/* + * These macros are to generate an XXH3_accumulate() function. + * The two arguments select the name suffix and target attribute. + * + * The name of this symbol is XXH3_accumulate_() and it calls + * XXH3_accumulate_512_(). + * + * It may be useful to hand implement this function if the compiler fails to + * optimize the inline function. + */ +#define XXH3_ACCUMULATE_TEMPLATE(name) \ +void \ +XXH3_accumulate_##name(xxh_u64* XXH_RESTRICT acc, \ + const xxh_u8* XXH_RESTRICT input, \ + const xxh_u8* XXH_RESTRICT secret, \ + size_t nbStripes) \ +{ \ + size_t n; \ + for (n = 0; n < nbStripes; n++ ) { \ + const xxh_u8* const in = input + n*XXH_STRIPE_LEN; \ + XXH_PREFETCH(in + XXH_PREFETCH_DIST); \ + XXH3_accumulate_512_##name( \ + acc, \ + in, \ + secret + n*XXH_SECRET_CONSUME_RATE); \ + } \ +} + + +XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64) +{ + if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64); + XXH_memcpy(dst, &v64, sizeof(v64)); +} + +/* Several intrinsic functions below are supposed to accept __int64 as argument, + * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ . + * However, several environments do not define __int64 type, + * requiring a workaround. + */ +#if !defined (__VMS) \ + && (defined (__cplusplus) \ + || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) + typedef int64_t xxh_i64; +#else + /* the following type must have a width of 64-bit */ + typedef long long xxh_i64; +#endif + + +/* + * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized. + * + * It is a hardened version of UMAC, based off of FARSH's implementation. + * + * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD + * implementations, and it is ridiculously fast. + * + * We harden it by mixing the original input to the accumulators as well as the product. + * + * This means that in the (relatively likely) case of a multiply by zero, the + * original input is preserved. + * + * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve + * cross-pollination, as otherwise the upper and lower halves would be + * essentially independent. + * + * This doesn't matter on 64-bit hashes since they all get merged together in + * the end, so we skip the extra step. + * + * Both XXH3_64bits and XXH3_128bits use this subroutine. + */ + +#if (XXH_VECTOR == XXH_AVX512) \ + || (defined(XXH_DISPATCH_AVX512) && XXH_DISPATCH_AVX512 != 0) + +#ifndef XXH_TARGET_AVX512 +# define XXH_TARGET_AVX512 /* disable attribute target */ +#endif + +XXH_FORCE_INLINE XXH_TARGET_AVX512 void +XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + __m512i* const xacc = (__m512i *) acc; + XXH_ASSERT((((size_t)acc) & 63) == 0); + XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); + + { + /* data_vec = input[0]; */ + __m512i const data_vec = _mm512_loadu_si512 (input); + /* key_vec = secret[0]; */ + __m512i const key_vec = _mm512_loadu_si512 (secret); + /* data_key = data_vec ^ key_vec; */ + __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m512i const data_key_lo = _mm512_srli_epi64 (data_key, 32); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m512i const product = _mm512_mul_epu32 (data_key, data_key_lo); + /* xacc[0] += swap(data_vec); */ + __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2)); + __m512i const sum = _mm512_add_epi64(*xacc, data_swap); + /* xacc[0] += product; */ + *xacc = _mm512_add_epi64(product, sum); + } +} +XXH_FORCE_INLINE XXH_TARGET_AVX512 XXH3_ACCUMULATE_TEMPLATE(avx512) + +/* + * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing. + * + * Multiplication isn't perfect, as explained by Google in HighwayHash: + * + * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to + * // varying degrees. In descending order of goodness, bytes + * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32. + * // As expected, the upper and lower bytes are much worse. + * + * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291 + * + * Since our algorithm uses a pseudorandom secret to add some variance into the + * mix, we don't need to (or want to) mix as often or as much as HighwayHash does. + * + * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid + * extraction. + * + * Both XXH3_64bits and XXH3_128bits use this subroutine. + */ + +XXH_FORCE_INLINE XXH_TARGET_AVX512 void +XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 63) == 0); + XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); + { __m512i* const xacc = (__m512i*) acc; + const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1); + + /* xacc[0] ^= (xacc[0] >> 47) */ + __m512i const acc_vec = *xacc; + __m512i const shifted = _mm512_srli_epi64 (acc_vec, 47); + /* xacc[0] ^= secret; */ + __m512i const key_vec = _mm512_loadu_si512 (secret); + __m512i const data_key = _mm512_ternarylogic_epi32(key_vec, acc_vec, shifted, 0x96 /* key_vec ^ acc_vec ^ shifted */); + + /* xacc[0] *= XXH_PRIME32_1; */ + __m512i const data_key_hi = _mm512_srli_epi64 (data_key, 32); + __m512i const prod_lo = _mm512_mul_epu32 (data_key, prime32); + __m512i const prod_hi = _mm512_mul_epu32 (data_key_hi, prime32); + *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32)); + } +} + +XXH_FORCE_INLINE XXH_TARGET_AVX512 void +XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64) +{ + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0); + XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64); + XXH_ASSERT(((size_t)customSecret & 63) == 0); + (void)(&XXH_writeLE64); + { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i); + __m512i const seed_pos = _mm512_set1_epi64((xxh_i64)seed64); + __m512i const seed = _mm512_mask_sub_epi64(seed_pos, 0xAA, _mm512_set1_epi8(0), seed_pos); + + const __m512i* const src = (const __m512i*) ((const void*) XXH3_kSecret); + __m512i* const dest = ( __m512i*) customSecret; + int i; + XXH_ASSERT(((size_t)src & 63) == 0); /* control alignment */ + XXH_ASSERT(((size_t)dest & 63) == 0); + for (i=0; i < nbRounds; ++i) { + dest[i] = _mm512_add_epi64(_mm512_load_si512(src + i), seed); + } } +} + +#endif + +#if (XXH_VECTOR == XXH_AVX2) \ + || (defined(XXH_DISPATCH_AVX2) && XXH_DISPATCH_AVX2 != 0) + +#ifndef XXH_TARGET_AVX2 +# define XXH_TARGET_AVX2 /* disable attribute target */ +#endif + +XXH_FORCE_INLINE XXH_TARGET_AVX2 void +XXH3_accumulate_512_avx2( void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 31) == 0); + { __m256i* const xacc = (__m256i *) acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ + const __m256i* const xinput = (const __m256i *) input; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ + const __m256i* const xsecret = (const __m256i *) secret; + + size_t i; + for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) { + /* data_vec = xinput[i]; */ + __m256i const data_vec = _mm256_loadu_si256 (xinput+i); + /* key_vec = xsecret[i]; */ + __m256i const key_vec = _mm256_loadu_si256 (xsecret+i); + /* data_key = data_vec ^ key_vec; */ + __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m256i const data_key_lo = _mm256_srli_epi64 (data_key, 32); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m256i const product = _mm256_mul_epu32 (data_key, data_key_lo); + /* xacc[i] += swap(data_vec); */ + __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2)); + __m256i const sum = _mm256_add_epi64(xacc[i], data_swap); + /* xacc[i] += product; */ + xacc[i] = _mm256_add_epi64(product, sum); + } } +} +XXH_FORCE_INLINE XXH_TARGET_AVX2 XXH3_ACCUMULATE_TEMPLATE(avx2) + +XXH_FORCE_INLINE XXH_TARGET_AVX2 void +XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 31) == 0); + { __m256i* const xacc = (__m256i*) acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ + const __m256i* const xsecret = (const __m256i *) secret; + const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1); + + size_t i; + for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) { + /* xacc[i] ^= (xacc[i] >> 47) */ + __m256i const acc_vec = xacc[i]; + __m256i const shifted = _mm256_srli_epi64 (acc_vec, 47); + __m256i const data_vec = _mm256_xor_si256 (acc_vec, shifted); + /* xacc[i] ^= xsecret; */ + __m256i const key_vec = _mm256_loadu_si256 (xsecret+i); + __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec); + + /* xacc[i] *= XXH_PRIME32_1; */ + __m256i const data_key_hi = _mm256_srli_epi64 (data_key, 32); + __m256i const prod_lo = _mm256_mul_epu32 (data_key, prime32); + __m256i const prod_hi = _mm256_mul_epu32 (data_key_hi, prime32); + xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32)); + } + } +} + +XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) +{ + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0); + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6); + XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64); + (void)(&XXH_writeLE64); + XXH_PREFETCH(customSecret); + { __m256i const seed = _mm256_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64, (xxh_i64)(0U - seed64), (xxh_i64)seed64); + + const __m256i* const src = (const __m256i*) ((const void*) XXH3_kSecret); + __m256i* dest = ( __m256i*) customSecret; + +# if defined(__GNUC__) || defined(__clang__) + /* + * On GCC & Clang, marking 'dest' as modified will cause the compiler: + * - do not extract the secret from sse registers in the internal loop + * - use less common registers, and avoid pushing these reg into stack + */ + XXH_COMPILER_GUARD(dest); +# endif + XXH_ASSERT(((size_t)src & 31) == 0); /* control alignment */ + XXH_ASSERT(((size_t)dest & 31) == 0); + + /* GCC -O2 need unroll loop manually */ + dest[0] = _mm256_add_epi64(_mm256_load_si256(src+0), seed); + dest[1] = _mm256_add_epi64(_mm256_load_si256(src+1), seed); + dest[2] = _mm256_add_epi64(_mm256_load_si256(src+2), seed); + dest[3] = _mm256_add_epi64(_mm256_load_si256(src+3), seed); + dest[4] = _mm256_add_epi64(_mm256_load_si256(src+4), seed); + dest[5] = _mm256_add_epi64(_mm256_load_si256(src+5), seed); + } +} + +#endif + +/* x86dispatch always generates SSE2 */ +#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH) + +#ifndef XXH_TARGET_SSE2 +# define XXH_TARGET_SSE2 /* disable attribute target */ +#endif + +XXH_FORCE_INLINE XXH_TARGET_SSE2 void +XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + /* SSE2 is just a half-scale version of the AVX2 version. */ + XXH_ASSERT((((size_t)acc) & 15) == 0); + { __m128i* const xacc = (__m128i *) acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ + const __m128i* const xinput = (const __m128i *) input; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ + const __m128i* const xsecret = (const __m128i *) secret; + + size_t i; + for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) { + /* data_vec = xinput[i]; */ + __m128i const data_vec = _mm_loadu_si128 (xinput+i); + /* key_vec = xsecret[i]; */ + __m128i const key_vec = _mm_loadu_si128 (xsecret+i); + /* data_key = data_vec ^ key_vec; */ + __m128i const data_key = _mm_xor_si128 (data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m128i const product = _mm_mul_epu32 (data_key, data_key_lo); + /* xacc[i] += swap(data_vec); */ + __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2)); + __m128i const sum = _mm_add_epi64(xacc[i], data_swap); + /* xacc[i] += product; */ + xacc[i] = _mm_add_epi64(product, sum); + } } +} +XXH_FORCE_INLINE XXH_TARGET_SSE2 XXH3_ACCUMULATE_TEMPLATE(sse2) + +XXH_FORCE_INLINE XXH_TARGET_SSE2 void +XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 15) == 0); + { __m128i* const xacc = (__m128i*) acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ + const __m128i* const xsecret = (const __m128i *) secret; + const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1); + + size_t i; + for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) { + /* xacc[i] ^= (xacc[i] >> 47) */ + __m128i const acc_vec = xacc[i]; + __m128i const shifted = _mm_srli_epi64 (acc_vec, 47); + __m128i const data_vec = _mm_xor_si128 (acc_vec, shifted); + /* xacc[i] ^= xsecret[i]; */ + __m128i const key_vec = _mm_loadu_si128 (xsecret+i); + __m128i const data_key = _mm_xor_si128 (data_vec, key_vec); + + /* xacc[i] *= XXH_PRIME32_1; */ + __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); + __m128i const prod_lo = _mm_mul_epu32 (data_key, prime32); + __m128i const prod_hi = _mm_mul_epu32 (data_key_hi, prime32); + xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32)); + } + } +} + +XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) +{ + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); + (void)(&XXH_writeLE64); + { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i); + +# if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900 + /* MSVC 32bit mode does not support _mm_set_epi64x before 2015 */ + XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, (xxh_i64)(0U - seed64) }; + __m128i const seed = _mm_load_si128((__m128i const*)seed64x2); +# else + __m128i const seed = _mm_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64); +# endif + int i; + + const void* const src16 = XXH3_kSecret; + __m128i* dst16 = (__m128i*) customSecret; +# if defined(__GNUC__) || defined(__clang__) + /* + * On GCC & Clang, marking 'dest' as modified will cause the compiler: + * - do not extract the secret from sse registers in the internal loop + * - use less common registers, and avoid pushing these reg into stack + */ + XXH_COMPILER_GUARD(dst16); +# endif + XXH_ASSERT(((size_t)src16 & 15) == 0); /* control alignment */ + XXH_ASSERT(((size_t)dst16 & 15) == 0); + + for (i=0; i < nbRounds; ++i) { + dst16[i] = _mm_add_epi64(_mm_load_si128((const __m128i *)src16+i), seed); + } } +} + +#endif + +#if (XXH_VECTOR == XXH_NEON) + +/* forward declarations for the scalar routines */ +XXH_FORCE_INLINE void +XXH3_scalarRound(void* XXH_RESTRICT acc, void const* XXH_RESTRICT input, + void const* XXH_RESTRICT secret, size_t lane); + +XXH_FORCE_INLINE void +XXH3_scalarScrambleRound(void* XXH_RESTRICT acc, + void const* XXH_RESTRICT secret, size_t lane); + +/*! + * @internal + * @brief The bulk processing loop for NEON and WASM SIMD128. + * + * The NEON code path is actually partially scalar when running on AArch64. This + * is to optimize the pipelining and can have up to 15% speedup depending on the + * CPU, and it also mitigates some GCC codegen issues. + * + * @see XXH3_NEON_LANES for configuring this and details about this optimization. + * + * NEON's 32-bit to 64-bit long multiply takes a half vector of 32-bit + * integers instead of the other platforms which mask full 64-bit vectors, + * so the setup is more complicated than just shifting right. + * + * Additionally, there is an optimization for 4 lanes at once noted below. + * + * Since, as stated, the most optimal amount of lanes for Cortexes is 6, + * there needs to be *three* versions of the accumulate operation used + * for the remaining 2 lanes. + * + * WASM's SIMD128 uses SIMDe's arm_neon.h polyfill because the intrinsics overlap + * nearly perfectly. + */ + +XXH_FORCE_INLINE void +XXH3_accumulate_512_neon( void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 15) == 0); + XXH_STATIC_ASSERT(XXH3_NEON_LANES > 0 && XXH3_NEON_LANES <= XXH_ACC_NB && XXH3_NEON_LANES % 2 == 0); + { /* GCC for darwin arm64 does not like aliasing here */ + xxh_aliasing_uint64x2_t* const xacc = (xxh_aliasing_uint64x2_t*) acc; + /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */ + uint8_t const* xinput = (const uint8_t *) input; + uint8_t const* xsecret = (const uint8_t *) secret; + + size_t i; +#ifdef __wasm_simd128__ + /* + * On WASM SIMD128, Clang emits direct address loads when XXH3_kSecret + * is constant propagated, which results in it converting it to this + * inside the loop: + * + * a = v128.load(XXH3_kSecret + 0 + $secret_offset, offset = 0) + * b = v128.load(XXH3_kSecret + 16 + $secret_offset, offset = 0) + * ... + * + * This requires a full 32-bit address immediate (and therefore a 6 byte + * instruction) as well as an add for each offset. + * + * Putting an asm guard prevents it from folding (at the cost of losing + * the alignment hint), and uses the free offset in `v128.load` instead + * of adding secret_offset each time which overall reduces code size by + * about a kilobyte and improves performance. + */ + XXH_COMPILER_GUARD(xsecret); +#endif + /* Scalar lanes use the normal scalarRound routine */ + for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) { + XXH3_scalarRound(acc, input, secret, i); + } + i = 0; + /* 4 NEON lanes at a time. */ + for (; i+1 < XXH3_NEON_LANES / 2; i+=2) { + /* data_vec = xinput[i]; */ + uint64x2_t data_vec_1 = XXH_vld1q_u64(xinput + (i * 16)); + uint64x2_t data_vec_2 = XXH_vld1q_u64(xinput + ((i+1) * 16)); + /* key_vec = xsecret[i]; */ + uint64x2_t key_vec_1 = XXH_vld1q_u64(xsecret + (i * 16)); + uint64x2_t key_vec_2 = XXH_vld1q_u64(xsecret + ((i+1) * 16)); + /* data_swap = swap(data_vec) */ + uint64x2_t data_swap_1 = vextq_u64(data_vec_1, data_vec_1, 1); + uint64x2_t data_swap_2 = vextq_u64(data_vec_2, data_vec_2, 1); + /* data_key = data_vec ^ key_vec; */ + uint64x2_t data_key_1 = veorq_u64(data_vec_1, key_vec_1); + uint64x2_t data_key_2 = veorq_u64(data_vec_2, key_vec_2); + + /* + * If we reinterpret the 64x2 vectors as 32x4 vectors, we can use a + * de-interleave operation for 4 lanes in 1 step with `vuzpq_u32` to + * get one vector with the low 32 bits of each lane, and one vector + * with the high 32 bits of each lane. + * + * The intrinsic returns a double vector because the original ARMv7-a + * instruction modified both arguments in place. AArch64 and SIMD128 emit + * two instructions from this intrinsic. + * + * [ dk11L | dk11H | dk12L | dk12H ] -> [ dk11L | dk12L | dk21L | dk22L ] + * [ dk21L | dk21H | dk22L | dk22H ] -> [ dk11H | dk12H | dk21H | dk22H ] + */ + uint32x4x2_t unzipped = vuzpq_u32( + vreinterpretq_u32_u64(data_key_1), + vreinterpretq_u32_u64(data_key_2) + ); + /* data_key_lo = data_key & 0xFFFFFFFF */ + uint32x4_t data_key_lo = unzipped.val[0]; + /* data_key_hi = data_key >> 32 */ + uint32x4_t data_key_hi = unzipped.val[1]; + /* + * Then, we can split the vectors horizontally and multiply which, as for most + * widening intrinsics, have a variant that works on both high half vectors + * for free on AArch64. A similar instruction is available on SIMD128. + * + * sum = data_swap + (u64x2) data_key_lo * (u64x2) data_key_hi + */ + uint64x2_t sum_1 = XXH_vmlal_low_u32(data_swap_1, data_key_lo, data_key_hi); + uint64x2_t sum_2 = XXH_vmlal_high_u32(data_swap_2, data_key_lo, data_key_hi); + /* + * Clang reorders + * a += b * c; // umlal swap.2d, dkl.2s, dkh.2s + * c += a; // add acc.2d, acc.2d, swap.2d + * to + * c += a; // add acc.2d, acc.2d, swap.2d + * c += b * c; // umlal acc.2d, dkl.2s, dkh.2s + * + * While it would make sense in theory since the addition is faster, + * for reasons likely related to umlal being limited to certain NEON + * pipelines, this is worse. A compiler guard fixes this. + */ + XXH_COMPILER_GUARD_CLANG_NEON(sum_1); + XXH_COMPILER_GUARD_CLANG_NEON(sum_2); + /* xacc[i] = acc_vec + sum; */ + xacc[i] = vaddq_u64(xacc[i], sum_1); + xacc[i+1] = vaddq_u64(xacc[i+1], sum_2); + } + /* Operate on the remaining NEON lanes 2 at a time. */ + for (; i < XXH3_NEON_LANES / 2; i++) { + /* data_vec = xinput[i]; */ + uint64x2_t data_vec = XXH_vld1q_u64(xinput + (i * 16)); + /* key_vec = xsecret[i]; */ + uint64x2_t key_vec = XXH_vld1q_u64(xsecret + (i * 16)); + /* acc_vec_2 = swap(data_vec) */ + uint64x2_t data_swap = vextq_u64(data_vec, data_vec, 1); + /* data_key = data_vec ^ key_vec; */ + uint64x2_t data_key = veorq_u64(data_vec, key_vec); + /* For two lanes, just use VMOVN and VSHRN. */ + /* data_key_lo = data_key & 0xFFFFFFFF; */ + uint32x2_t data_key_lo = vmovn_u64(data_key); + /* data_key_hi = data_key >> 32; */ + uint32x2_t data_key_hi = vshrn_n_u64(data_key, 32); + /* sum = data_swap + (u64x2) data_key_lo * (u64x2) data_key_hi; */ + uint64x2_t sum = vmlal_u32(data_swap, data_key_lo, data_key_hi); + /* Same Clang workaround as before */ + XXH_COMPILER_GUARD_CLANG_NEON(sum); + /* xacc[i] = acc_vec + sum; */ + xacc[i] = vaddq_u64 (xacc[i], sum); + } + } +} +XXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(neon) + +XXH_FORCE_INLINE void +XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 15) == 0); + + { xxh_aliasing_uint64x2_t* xacc = (xxh_aliasing_uint64x2_t*) acc; + uint8_t const* xsecret = (uint8_t const*) secret; + + size_t i; + /* WASM uses operator overloads and doesn't need these. */ +#ifndef __wasm_simd128__ + /* { prime32_1, prime32_1 } */ + uint32x2_t const kPrimeLo = vdup_n_u32(XXH_PRIME32_1); + /* { 0, prime32_1, 0, prime32_1 } */ + uint32x4_t const kPrimeHi = vreinterpretq_u32_u64(vdupq_n_u64((xxh_u64)XXH_PRIME32_1 << 32)); +#endif + + /* AArch64 uses both scalar and neon at the same time */ + for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) { + XXH3_scalarScrambleRound(acc, secret, i); + } + for (i=0; i < XXH3_NEON_LANES / 2; i++) { + /* xacc[i] ^= (xacc[i] >> 47); */ + uint64x2_t acc_vec = xacc[i]; + uint64x2_t shifted = vshrq_n_u64(acc_vec, 47); + uint64x2_t data_vec = veorq_u64(acc_vec, shifted); + + /* xacc[i] ^= xsecret[i]; */ + uint64x2_t key_vec = XXH_vld1q_u64(xsecret + (i * 16)); + uint64x2_t data_key = veorq_u64(data_vec, key_vec); + /* xacc[i] *= XXH_PRIME32_1 */ +#ifdef __wasm_simd128__ + /* SIMD128 has multiply by u64x2, use it instead of expanding and scalarizing */ + xacc[i] = data_key * XXH_PRIME32_1; +#else + /* + * Expanded version with portable NEON intrinsics + * + * lo(x) * lo(y) + (hi(x) * lo(y) << 32) + * + * prod_hi = hi(data_key) * lo(prime) << 32 + * + * Since we only need 32 bits of this multiply a trick can be used, reinterpreting the vector + * as a uint32x4_t and multiplying by { 0, prime, 0, prime } to cancel out the unwanted bits + * and avoid the shift. + */ + uint32x4_t prod_hi = vmulq_u32 (vreinterpretq_u32_u64(data_key), kPrimeHi); + /* Extract low bits for vmlal_u32 */ + uint32x2_t data_key_lo = vmovn_u64(data_key); + /* xacc[i] = prod_hi + lo(data_key) * XXH_PRIME32_1; */ + xacc[i] = vmlal_u32(vreinterpretq_u64_u32(prod_hi), data_key_lo, kPrimeLo); +#endif + } + } +} +#endif + +#if (XXH_VECTOR == XXH_VSX) + +XXH_FORCE_INLINE void +XXH3_accumulate_512_vsx( void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + /* presumed aligned */ + xxh_aliasing_u64x2* const xacc = (xxh_aliasing_u64x2*) acc; + xxh_u8 const* const xinput = (xxh_u8 const*) input; /* no alignment restriction */ + xxh_u8 const* const xsecret = (xxh_u8 const*) secret; /* no alignment restriction */ + xxh_u64x2 const v32 = { 32, 32 }; + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { + /* data_vec = xinput[i]; */ + xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + 16*i); + /* key_vec = xsecret[i]; */ + xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + 16*i); + xxh_u64x2 const data_key = data_vec ^ key_vec; + /* shuffled = (data_key << 32) | (data_key >> 32); */ + xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32); + /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */ + xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled); + /* acc_vec = xacc[i]; */ + xxh_u64x2 acc_vec = xacc[i]; + acc_vec += product; + + /* swap high and low halves */ +#ifdef __s390x__ + acc_vec += vec_permi(data_vec, data_vec, 2); +#else + acc_vec += vec_xxpermdi(data_vec, data_vec, 2); +#endif + xacc[i] = acc_vec; + } +} +XXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(vsx) + +XXH_FORCE_INLINE void +XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 15) == 0); + + { xxh_aliasing_u64x2* const xacc = (xxh_aliasing_u64x2*) acc; + const xxh_u8* const xsecret = (const xxh_u8*) secret; + /* constants */ + xxh_u64x2 const v32 = { 32, 32 }; + xxh_u64x2 const v47 = { 47, 47 }; + xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 }; + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { + /* xacc[i] ^= (xacc[i] >> 47); */ + xxh_u64x2 const acc_vec = xacc[i]; + xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47); + + /* xacc[i] ^= xsecret[i]; */ + xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + 16*i); + xxh_u64x2 const data_key = data_vec ^ key_vec; + + /* xacc[i] *= XXH_PRIME32_1 */ + /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */ + xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime); + /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */ + xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime); + xacc[i] = prod_odd + (prod_even << v32); + } } +} + +#endif + +#if (XXH_VECTOR == XXH_SVE) + +XXH_FORCE_INLINE void +XXH3_accumulate_512_sve( void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + uint64_t *xacc = (uint64_t *)acc; + const uint64_t *xinput = (const uint64_t *)(const void *)input; + const uint64_t *xsecret = (const uint64_t *)(const void *)secret; + svuint64_t kSwap = sveor_n_u64_z(svptrue_b64(), svindex_u64(0, 1), 1); + uint64_t element_count = svcntd(); + if (element_count >= 8) { + svbool_t mask = svptrue_pat_b64(SV_VL8); + svuint64_t vacc = svld1_u64(mask, xacc); + ACCRND(vacc, 0); + svst1_u64(mask, xacc, vacc); + } else if (element_count == 2) { /* sve128 */ + svbool_t mask = svptrue_pat_b64(SV_VL2); + svuint64_t acc0 = svld1_u64(mask, xacc + 0); + svuint64_t acc1 = svld1_u64(mask, xacc + 2); + svuint64_t acc2 = svld1_u64(mask, xacc + 4); + svuint64_t acc3 = svld1_u64(mask, xacc + 6); + ACCRND(acc0, 0); + ACCRND(acc1, 2); + ACCRND(acc2, 4); + ACCRND(acc3, 6); + svst1_u64(mask, xacc + 0, acc0); + svst1_u64(mask, xacc + 2, acc1); + svst1_u64(mask, xacc + 4, acc2); + svst1_u64(mask, xacc + 6, acc3); + } else { + svbool_t mask = svptrue_pat_b64(SV_VL4); + svuint64_t acc0 = svld1_u64(mask, xacc + 0); + svuint64_t acc1 = svld1_u64(mask, xacc + 4); + ACCRND(acc0, 0); + ACCRND(acc1, 4); + svst1_u64(mask, xacc + 0, acc0); + svst1_u64(mask, xacc + 4, acc1); + } +} + +XXH_FORCE_INLINE void +XXH3_accumulate_sve(xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, + size_t nbStripes) +{ + if (nbStripes != 0) { + uint64_t *xacc = (uint64_t *)acc; + const uint64_t *xinput = (const uint64_t *)(const void *)input; + const uint64_t *xsecret = (const uint64_t *)(const void *)secret; + svuint64_t kSwap = sveor_n_u64_z(svptrue_b64(), svindex_u64(0, 1), 1); + uint64_t element_count = svcntd(); + if (element_count >= 8) { + svbool_t mask = svptrue_pat_b64(SV_VL8); + svuint64_t vacc = svld1_u64(mask, xacc + 0); + do { + /* svprfd(svbool_t, void *, enum svfprop); */ + svprfd(mask, xinput + 128, SV_PLDL1STRM); + ACCRND(vacc, 0); + xinput += 8; + xsecret += 1; + nbStripes--; + } while (nbStripes != 0); + + svst1_u64(mask, xacc + 0, vacc); + } else if (element_count == 2) { /* sve128 */ + svbool_t mask = svptrue_pat_b64(SV_VL2); + svuint64_t acc0 = svld1_u64(mask, xacc + 0); + svuint64_t acc1 = svld1_u64(mask, xacc + 2); + svuint64_t acc2 = svld1_u64(mask, xacc + 4); + svuint64_t acc3 = svld1_u64(mask, xacc + 6); + do { + svprfd(mask, xinput + 128, SV_PLDL1STRM); + ACCRND(acc0, 0); + ACCRND(acc1, 2); + ACCRND(acc2, 4); + ACCRND(acc3, 6); + xinput += 8; + xsecret += 1; + nbStripes--; + } while (nbStripes != 0); + + svst1_u64(mask, xacc + 0, acc0); + svst1_u64(mask, xacc + 2, acc1); + svst1_u64(mask, xacc + 4, acc2); + svst1_u64(mask, xacc + 6, acc3); + } else { + svbool_t mask = svptrue_pat_b64(SV_VL4); + svuint64_t acc0 = svld1_u64(mask, xacc + 0); + svuint64_t acc1 = svld1_u64(mask, xacc + 4); + do { + svprfd(mask, xinput + 128, SV_PLDL1STRM); + ACCRND(acc0, 0); + ACCRND(acc1, 4); + xinput += 8; + xsecret += 1; + nbStripes--; + } while (nbStripes != 0); + + svst1_u64(mask, xacc + 0, acc0); + svst1_u64(mask, xacc + 4, acc1); + } + } +} + +#endif + +#if (XXH_VECTOR == XXH_LSX) +#define _LSX_SHUFFLE(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w)) + +XXH_FORCE_INLINE void +XXH3_accumulate_512_lsx( void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 15) == 0); + { + __m128i* const xacc = (__m128i *) acc; + const __m128i* const xinput = (const __m128i *) input; + const __m128i* const xsecret = (const __m128i *) secret; + + for (size_t i = 0; i < XXH_STRIPE_LEN / sizeof(__m128i); i++) { + /* data_vec = xinput[i]; */ + __m128i const data_vec = __lsx_vld(xinput + i, 0); + /* key_vec = xsecret[i]; */ + __m128i const key_vec = __lsx_vld(xsecret + i, 0); + /* data_key = data_vec ^ key_vec; */ + __m128i const data_key = __lsx_vxor_v(data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m128i const data_key_lo = __lsx_vsrli_d(data_key, 32); + // __m128i const data_key_lo = __lsx_vsrli_d(data_key, 32); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m128i const product = __lsx_vmulwev_d_wu(data_key, data_key_lo); + /* xacc[i] += swap(data_vec); */ + __m128i const data_swap = __lsx_vshuf4i_w(data_vec, _LSX_SHUFFLE(1, 0, 3, 2)); + __m128i const sum = __lsx_vadd_d(xacc[i], data_swap); + /* xacc[i] += product; */ + xacc[i] = __lsx_vadd_d(product, sum); + } + } +} +XXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(lsx) + +XXH_FORCE_INLINE void +XXH3_scrambleAcc_lsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + XXH_ASSERT((((size_t)acc) & 15) == 0); + { + __m128i* const xacc = (__m128i*) acc; + const __m128i* const xsecret = (const __m128i *) secret; + const __m128i prime32 = __lsx_vreplgr2vr_w((int)XXH_PRIME32_1); + + for (size_t i = 0; i < XXH_STRIPE_LEN / sizeof(__m128i); i++) { + /* xacc[i] ^= (xacc[i] >> 47) */ + __m128i const acc_vec = xacc[i]; + __m128i const shifted = __lsx_vsrli_d(acc_vec, 47); + __m128i const data_vec = __lsx_vxor_v(acc_vec, shifted); + /* xacc[i] ^= xsecret[i]; */ + __m128i const key_vec = __lsx_vld(xsecret + i, 0); + __m128i const data_key = __lsx_vxor_v(data_vec, key_vec); + + /* xacc[i] *= XXH_PRIME32_1; */ + __m128i const data_key_hi = __lsx_vsrli_d(data_key, 32); + __m128i const prod_lo = __lsx_vmulwev_d_wu(data_key, prime32); + __m128i const prod_hi = __lsx_vmulwev_d_wu(data_key_hi, prime32); + xacc[i] = __lsx_vadd_d(prod_lo, __lsx_vslli_d(prod_hi, 32)); + } + } +} + +#endif + +/* scalar variants - universal */ + +#if defined(__aarch64__) && (defined(__GNUC__) || defined(__clang__)) +/* + * In XXH3_scalarRound(), GCC and Clang have a similar codegen issue, where they + * emit an excess mask and a full 64-bit multiply-add (MADD X-form). + * + * While this might not seem like much, as AArch64 is a 64-bit architecture, only + * big Cortex designs have a full 64-bit multiplier. + * + * On the little cores, the smaller 32-bit multiplier is used, and full 64-bit + * multiplies expand to 2-3 multiplies in microcode. This has a major penalty + * of up to 4 latency cycles and 2 stall cycles in the multiply pipeline. + * + * Thankfully, AArch64 still provides the 32-bit long multiply-add (UMADDL) which does + * not have this penalty and does the mask automatically. + */ +XXH_FORCE_INLINE xxh_u64 +XXH_mult32to64_add64(xxh_u64 lhs, xxh_u64 rhs, xxh_u64 acc) +{ + xxh_u64 ret; + /* note: %x = 64-bit register, %w = 32-bit register */ + __asm__("umaddl %x0, %w1, %w2, %x3" : "=r" (ret) : "r" (lhs), "r" (rhs), "r" (acc)); + return ret; +} +#else +XXH_FORCE_INLINE xxh_u64 +XXH_mult32to64_add64(xxh_u64 lhs, xxh_u64 rhs, xxh_u64 acc) +{ + return XXH_mult32to64((xxh_u32)lhs, (xxh_u32)rhs) + acc; +} +#endif + +/*! + * @internal + * @brief Scalar round for @ref XXH3_accumulate_512_scalar(). + * + * This is extracted to its own function because the NEON path uses a combination + * of NEON and scalar. + */ +XXH_FORCE_INLINE void +XXH3_scalarRound(void* XXH_RESTRICT acc, + void const* XXH_RESTRICT input, + void const* XXH_RESTRICT secret, + size_t lane) +{ + xxh_u64* xacc = (xxh_u64*) acc; + xxh_u8 const* xinput = (xxh_u8 const*) input; + xxh_u8 const* xsecret = (xxh_u8 const*) secret; + XXH_ASSERT(lane < XXH_ACC_NB); + XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0); + { + xxh_u64 const data_val = XXH_readLE64(xinput + lane * 8); + xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + lane * 8); + xacc[lane ^ 1] += data_val; /* swap adjacent lanes */ + xacc[lane] = XXH_mult32to64_add64(data_key /* & 0xFFFFFFFF */, data_key >> 32, xacc[lane]); + } +} + +/*! + * @internal + * @brief Processes a 64 byte block of data using the scalar path. + */ +XXH_FORCE_INLINE void +XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) +{ + size_t i; + /* ARM GCC refuses to unroll this loop, resulting in a 24% slowdown on ARMv6. */ +#if defined(__GNUC__) && !defined(__clang__) \ + && (defined(__arm__) || defined(__thumb2__)) \ + && defined(__ARM_FEATURE_UNALIGNED) /* no unaligned access just wastes bytes */ \ + && XXH_SIZE_OPT <= 0 +# pragma GCC unroll 8 +#endif + for (i=0; i < XXH_ACC_NB; i++) { + XXH3_scalarRound(acc, input, secret, i); + } +} +XXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(scalar) + +/*! + * @internal + * @brief Scalar scramble step for @ref XXH3_scrambleAcc_scalar(). + * + * This is extracted to its own function because the NEON path uses a combination + * of NEON and scalar. + */ +XXH_FORCE_INLINE void +XXH3_scalarScrambleRound(void* XXH_RESTRICT acc, + void const* XXH_RESTRICT secret, + size_t lane) +{ + xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */ + const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */ + XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0); + XXH_ASSERT(lane < XXH_ACC_NB); + { + xxh_u64 const key64 = XXH_readLE64(xsecret + lane * 8); + xxh_u64 acc64 = xacc[lane]; + acc64 = XXH_xorshift64(acc64, 47); + acc64 ^= key64; + acc64 *= XXH_PRIME32_1; + xacc[lane] = acc64; + } +} + +/*! + * @internal + * @brief Scrambles the accumulators after a large chunk has been read + */ +XXH_FORCE_INLINE void +XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) +{ + size_t i; + for (i=0; i < XXH_ACC_NB; i++) { + XXH3_scalarScrambleRound(acc, secret, i); + } +} + +XXH_FORCE_INLINE void +XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64) +{ + /* + * We need a separate pointer for the hack below, + * which requires a non-const pointer. + * Any decent compiler will optimize this out otherwise. + */ + const xxh_u8* kSecretPtr = XXH3_kSecret; + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); + +#if defined(__GNUC__) && defined(__aarch64__) + /* + * UGLY HACK: + * GCC and Clang generate a bunch of MOV/MOVK pairs for aarch64, and they are + * placed sequentially, in order, at the top of the unrolled loop. + * + * While MOVK is great for generating constants (2 cycles for a 64-bit + * constant compared to 4 cycles for LDR), it fights for bandwidth with + * the arithmetic instructions. + * + * I L S + * MOVK + * MOVK + * MOVK + * MOVK + * ADD + * SUB STR + * STR + * By forcing loads from memory (as the asm line causes the compiler to assume + * that XXH3_kSecretPtr has been changed), the pipelines are used more + * efficiently: + * I L S + * LDR + * ADD LDR + * SUB STR + * STR + * + * See XXH3_NEON_LANES for details on the pipsline. + * + * XXH3_64bits_withSeed, len == 256, Snapdragon 835 + * without hack: 2654.4 MB/s + * with hack: 3202.9 MB/s + */ + XXH_COMPILER_GUARD(kSecretPtr); +#endif + { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16; + int i; + for (i=0; i < nbRounds; i++) { + /* + * The asm hack causes the compiler to assume that kSecretPtr aliases with + * customSecret, and on aarch64, this prevented LDP from merging two + * loads together for free. Putting the loads together before the stores + * properly generates LDP. + */ + xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i) + seed64; + xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64; + XXH_writeLE64((xxh_u8*)customSecret + 16*i, lo); + XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi); + } } +} + + +typedef void (*XXH3_f_accumulate)(xxh_u64* XXH_RESTRICT, const xxh_u8* XXH_RESTRICT, const xxh_u8* XXH_RESTRICT, size_t); +typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*); +typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64); + + +#if (XXH_VECTOR == XXH_AVX512) + +#define XXH3_accumulate_512 XXH3_accumulate_512_avx512 +#define XXH3_accumulate XXH3_accumulate_avx512 +#define XXH3_scrambleAcc XXH3_scrambleAcc_avx512 +#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512 + +#elif (XXH_VECTOR == XXH_AVX2) + +#define XXH3_accumulate_512 XXH3_accumulate_512_avx2 +#define XXH3_accumulate XXH3_accumulate_avx2 +#define XXH3_scrambleAcc XXH3_scrambleAcc_avx2 +#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2 + +#elif (XXH_VECTOR == XXH_SSE2) + +#define XXH3_accumulate_512 XXH3_accumulate_512_sse2 +#define XXH3_accumulate XXH3_accumulate_sse2 +#define XXH3_scrambleAcc XXH3_scrambleAcc_sse2 +#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2 + +#elif (XXH_VECTOR == XXH_NEON) + +#define XXH3_accumulate_512 XXH3_accumulate_512_neon +#define XXH3_accumulate XXH3_accumulate_neon +#define XXH3_scrambleAcc XXH3_scrambleAcc_neon +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#elif (XXH_VECTOR == XXH_VSX) + +#define XXH3_accumulate_512 XXH3_accumulate_512_vsx +#define XXH3_accumulate XXH3_accumulate_vsx +#define XXH3_scrambleAcc XXH3_scrambleAcc_vsx +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#elif (XXH_VECTOR == XXH_SVE) +#define XXH3_accumulate_512 XXH3_accumulate_512_sve +#define XXH3_accumulate XXH3_accumulate_sve +#define XXH3_scrambleAcc XXH3_scrambleAcc_scalar +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#elif (XXH_VECTOR == XXH_LSX) +#define XXH3_accumulate_512 XXH3_accumulate_512_lsx +#define XXH3_accumulate XXH3_accumulate_lsx +#define XXH3_scrambleAcc XXH3_scrambleAcc_lsx +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#else /* scalar */ + +#define XXH3_accumulate_512 XXH3_accumulate_512_scalar +#define XXH3_accumulate XXH3_accumulate_scalar +#define XXH3_scrambleAcc XXH3_scrambleAcc_scalar +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#endif + +#if XXH_SIZE_OPT >= 1 /* don't do SIMD for initialization */ +# undef XXH3_initCustomSecret +# define XXH3_initCustomSecret XXH3_initCustomSecret_scalar +#endif + +XXH_FORCE_INLINE void +XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc, + const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble) +{ + size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE; + size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock; + size_t const nb_blocks = (len - 1) / block_len; + + size_t n; + + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + + for (n = 0; n < nb_blocks; n++) { + f_acc(acc, input + n*block_len, secret, nbStripesPerBlock); + f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN); + } + + /* last partial block */ + XXH_ASSERT(len > XXH_STRIPE_LEN); + { size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN; + XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE)); + f_acc(acc, input + nb_blocks*block_len, secret, nbStripes); + + /* last stripe */ + { const xxh_u8* const p = input + len - XXH_STRIPE_LEN; +#define XXH_SECRET_LASTACC_START 7 /* not aligned on 8, last secret is different from acc & scrambler */ + XXH3_accumulate_512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START); + } } +} + +XXH_FORCE_INLINE xxh_u64 +XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret) +{ + return XXH3_mul128_fold64( + acc[0] ^ XXH_readLE64(secret), + acc[1] ^ XXH_readLE64(secret+8) ); +} + +static XXH_PUREF XXH64_hash_t +XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start) +{ + xxh_u64 result64 = start; + size_t i = 0; + + for (i = 0; i < 4; i++) { + result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i); +#if defined(__clang__) /* Clang */ \ + && (defined(__arm__) || defined(__thumb__)) /* ARMv7 */ \ + && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ + && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ + /* + * UGLY HACK: + * Prevent autovectorization on Clang ARMv7-a. Exact same problem as + * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b. + * XXH3_64bits, len == 256, Snapdragon 835: + * without hack: 2063.7 MB/s + * with hack: 2560.7 MB/s + */ + XXH_COMPILER_GUARD(result64); +#endif + } + + return XXH3_avalanche(result64); +} + +/* do not align on 8, so that the secret is different from the accumulator */ +#define XXH_SECRET_MERGEACCS_START 11 + +static XXH_PUREF XXH64_hash_t +XXH3_finalizeLong_64b(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 len) +{ + return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, len * XXH_PRIME64_1); +} + +#define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \ + XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 } + +XXH_FORCE_INLINE XXH64_hash_t +XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len, + const void* XXH_RESTRICT secret, size_t secretSize, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble) +{ + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; + + XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc, f_scramble); + + /* converge into final hash */ + XXH_STATIC_ASSERT(sizeof(acc) == 64); + XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + return XXH3_finalizeLong_64b(acc, (const xxh_u8*)secret, (xxh_u64)len); +} + +/* + * It's important for performance to transmit secret's size (when it's static) + * so that the compiler can properly optimize the vectorized loop. + * This makes a big performance difference for "medium" keys (<1 KB) when using AVX instruction set. + * When the secret size is unknown, or on GCC 12 where the mix of NO_INLINE and FORCE_INLINE + * breaks -Og, this is XXH_NO_INLINE. + */ +XXH3_WITH_SECRET_INLINE XXH64_hash_t +XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) +{ + (void)seed64; + return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate, XXH3_scrambleAcc); +} + +/* + * It's preferable for performance that XXH3_hashLong is not inlined, + * as it results in a smaller function for small data, easier to the instruction cache. + * Note that inside this no_inline function, we do inline the internal loop, + * and provide a statically defined secret size to allow optimization of vector loop. + */ +XXH_NO_INLINE XXH_PUREF XXH64_hash_t +XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) +{ + (void)seed64; (void)secret; (void)secretLen; + return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate, XXH3_scrambleAcc); +} + +/* + * XXH3_hashLong_64b_withSeed(): + * Generate a custom key based on alteration of default XXH3_kSecret with the seed, + * and then use this key for long mode hashing. + * + * This operation is decently fast but nonetheless costs a little bit of time. + * Try to avoid it whenever possible (typically when seed==0). + * + * It's important for performance that XXH3_hashLong is not inlined. Not sure + * why (uop cache maybe?), but the difference is large and easily measurable. + */ +XXH_FORCE_INLINE XXH64_hash_t +XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len, + XXH64_hash_t seed, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble, + XXH3_f_initCustomSecret f_initSec) +{ +#if XXH_SIZE_OPT <= 0 + if (seed == 0) + return XXH3_hashLong_64b_internal(input, len, + XXH3_kSecret, sizeof(XXH3_kSecret), + f_acc, f_scramble); +#endif + { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; + f_initSec(secret, seed); + return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret), + f_acc, f_scramble); + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH64_hash_t +XXH3_hashLong_64b_withSeed(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) +{ + (void)secret; (void)secretLen; + return XXH3_hashLong_64b_withSeed_internal(input, len, seed, + XXH3_accumulate, XXH3_scrambleAcc, XXH3_initCustomSecret); +} + + +typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t, + XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t); + +XXH_FORCE_INLINE XXH64_hash_t +XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen, + XXH3_hashLong64_f f_hashLong) +{ + XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); + /* + * If an action is to be taken if `secretLen` condition is not respected, + * it should be done here. + * For now, it's a contract pre-condition. + * Adding a check and a branch here would cost performance at every hash. + * Also, note that function signature doesn't offer room to return an error. + */ + if (len <= 16) + return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); + if (len <= 128) + return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen); +} + + +/* === Public entry point === */ + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(XXH_NOESCAPE const void* input, size_t length) +{ + return XXH3_64bits_internal(input, length, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH64_hash_t +XXH3_64bits_withSecret(XXH_NOESCAPE const void* input, size_t length, XXH_NOESCAPE const void* secret, size_t secretSize) +{ + return XXH3_64bits_internal(input, length, 0, secret, secretSize, XXH3_hashLong_64b_withSecret); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH64_hash_t +XXH3_64bits_withSeed(XXH_NOESCAPE const void* input, size_t length, XXH64_hash_t seed) +{ + return XXH3_64bits_internal(input, length, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed); +} + +XXH_PUBLIC_API XXH64_hash_t +XXH3_64bits_withSecretandSeed(XXH_NOESCAPE const void* input, size_t length, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed) +{ + if (length <= XXH3_MIDSIZE_MAX) + return XXH3_64bits_internal(input, length, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL); + return XXH3_hashLong_64b_withSecret(input, length, seed, (const xxh_u8*)secret, secretSize); +} + + +/* === XXH3 streaming === */ +#ifndef XXH_NO_STREAM +/* + * Malloc's a pointer that is always aligned to @align. + * + * This must be freed with `XXH_alignedFree()`. + * + * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte + * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2 + * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON. + * + * This underalignment previously caused a rather obvious crash which went + * completely unnoticed due to XXH3_createState() not actually being tested. + * Credit to RedSpah for noticing this bug. + * + * The alignment is done manually: Functions like posix_memalign or _mm_malloc + * are avoided: To maintain portability, we would have to write a fallback + * like this anyways, and besides, testing for the existence of library + * functions without relying on external build tools is impossible. + * + * The method is simple: Overallocate, manually align, and store the offset + * to the original behind the returned pointer. + * + * Align must be a power of 2 and 8 <= align <= 128. + */ +static XXH_MALLOCF void* XXH_alignedMalloc(size_t s, size_t align) +{ + XXH_ASSERT(align <= 128 && align >= 8); /* range check */ + XXH_ASSERT((align & (align-1)) == 0); /* power of 2 */ + XXH_ASSERT(s != 0 && s < (s + align)); /* empty/overflow */ + { /* Overallocate to make room for manual realignment and an offset byte */ + xxh_u8* base = (xxh_u8*)XXH_malloc(s + align); + if (base != NULL) { + /* + * Get the offset needed to align this pointer. + * + * Even if the returned pointer is aligned, there will always be + * at least one byte to store the offset to the original pointer. + */ + size_t offset = align - ((size_t)base & (align - 1)); /* base % align */ + /* Add the offset for the now-aligned pointer */ + xxh_u8* ptr = base + offset; + + XXH_ASSERT((size_t)ptr % align == 0); + + /* Store the offset immediately before the returned pointer. */ + ptr[-1] = (xxh_u8)offset; + return ptr; + } + return NULL; + } +} +/* + * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass + * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout. + */ +static void XXH_alignedFree(void* p) +{ + if (p != NULL) { + xxh_u8* ptr = (xxh_u8*)p; + /* Get the offset byte we added in XXH_malloc. */ + xxh_u8 offset = ptr[-1]; + /* Free the original malloc'd pointer */ + xxh_u8* base = ptr - offset; + XXH_free(base); + } +} +/*! @ingroup XXH3_family */ +/*! + * @brief Allocate an @ref XXH3_state_t. + * + * @return An allocated pointer of @ref XXH3_state_t on success. + * @return `NULL` on failure. + * + * @note Must be freed with XXH3_freeState(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void) +{ + XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64); + if (state==NULL) return NULL; + XXH3_INITSTATE(state); + return state; +} + +/*! @ingroup XXH3_family */ +/*! + * @brief Frees an @ref XXH3_state_t. + * + * @param statePtr A pointer to an @ref XXH3_state_t allocated with @ref XXH3_createState(). + * + * @return @ref XXH_OK. + * + * @note Must be allocated with XXH3_createState(). + * + * @see @ref streaming_example "Streaming Example" + */ +XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr) +{ + XXH_alignedFree(statePtr); + return XXH_OK; +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API void +XXH3_copyState(XXH_NOESCAPE XXH3_state_t* dst_state, XXH_NOESCAPE const XXH3_state_t* src_state) +{ + XXH_memcpy(dst_state, src_state, sizeof(*dst_state)); +} + +static void +XXH3_reset_internal(XXH3_state_t* statePtr, + XXH64_hash_t seed, + const void* secret, size_t secretSize) +{ + size_t const initStart = offsetof(XXH3_state_t, bufferedSize); + size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart; + XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart); + XXH_ASSERT(statePtr != NULL); + /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */ + memset((char*)statePtr + initStart, 0, initLength); + statePtr->acc[0] = XXH_PRIME32_3; + statePtr->acc[1] = XXH_PRIME64_1; + statePtr->acc[2] = XXH_PRIME64_2; + statePtr->acc[3] = XXH_PRIME64_3; + statePtr->acc[4] = XXH_PRIME64_4; + statePtr->acc[5] = XXH_PRIME32_2; + statePtr->acc[6] = XXH_PRIME64_5; + statePtr->acc[7] = XXH_PRIME32_1; + statePtr->seed = seed; + statePtr->useSeed = (seed != 0); + statePtr->extSecret = (const unsigned char*)secret; + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + statePtr->secretLimit = secretSize - XXH_STRIPE_LEN; + statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE; +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_64bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr) +{ + if (statePtr == NULL) return XXH_ERROR; + XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); + return XXH_OK; +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_64bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize) +{ + if (statePtr == NULL) return XXH_ERROR; + XXH3_reset_internal(statePtr, 0, secret, secretSize); + if (secret == NULL) return XXH_ERROR; + if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; + return XXH_OK; +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_64bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed) +{ + if (statePtr == NULL) return XXH_ERROR; + if (seed==0) return XXH3_64bits_reset(statePtr); + if ((seed != statePtr->seed) || (statePtr->extSecret != NULL)) + XXH3_initCustomSecret(statePtr->customSecret, seed); + XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE); + return XXH_OK; +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_64bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed64) +{ + if (statePtr == NULL) return XXH_ERROR; + if (secret == NULL) return XXH_ERROR; + if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; + XXH3_reset_internal(statePtr, seed64, secret, secretSize); + statePtr->useSeed = 1; /* always, even if seed64==0 */ + return XXH_OK; +} + +/*! + * @internal + * @brief Processes a large input for XXH3_update() and XXH3_digest_long(). + * + * Unlike XXH3_hashLong_internal_loop(), this can process data that overlaps a block. + * + * @param acc Pointer to the 8 accumulator lanes + * @param nbStripesSoFarPtr In/out pointer to the number of leftover stripes in the block* + * @param nbStripesPerBlock Number of stripes in a block + * @param input Input pointer + * @param nbStripes Number of stripes to process + * @param secret Secret pointer + * @param secretLimit Offset of the last block in @p secret + * @param f_acc Pointer to an XXH3_accumulate implementation + * @param f_scramble Pointer to an XXH3_scrambleAcc implementation + * @return Pointer past the end of @p input after processing + */ +XXH_FORCE_INLINE const xxh_u8 * +XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc, + size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock, + const xxh_u8* XXH_RESTRICT input, size_t nbStripes, + const xxh_u8* XXH_RESTRICT secret, size_t secretLimit, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble) +{ + const xxh_u8* initialSecret = secret + *nbStripesSoFarPtr * XXH_SECRET_CONSUME_RATE; + /* Process full blocks */ + if (nbStripes >= (nbStripesPerBlock - *nbStripesSoFarPtr)) { + /* Process the initial partial block... */ + size_t nbStripesThisIter = nbStripesPerBlock - *nbStripesSoFarPtr; + + do { + /* Accumulate and scramble */ + f_acc(acc, input, initialSecret, nbStripesThisIter); + f_scramble(acc, secret + secretLimit); + input += nbStripesThisIter * XXH_STRIPE_LEN; + nbStripes -= nbStripesThisIter; + /* Then continue the loop with the full block size */ + nbStripesThisIter = nbStripesPerBlock; + initialSecret = secret; + } while (nbStripes >= nbStripesPerBlock); + *nbStripesSoFarPtr = 0; + } + /* Process a partial block */ + if (nbStripes > 0) { + f_acc(acc, input, initialSecret, nbStripes); + input += nbStripes * XXH_STRIPE_LEN; + *nbStripesSoFarPtr += nbStripes; + } + /* Return end pointer */ + return input; +} + +#ifndef XXH3_STREAM_USE_STACK +# if XXH_SIZE_OPT <= 0 && !defined(__clang__) /* clang doesn't need additional stack space */ +# define XXH3_STREAM_USE_STACK 1 +# endif +#endif +/* + * Both XXH3_64bits_update and XXH3_128bits_update use this routine. + */ +XXH_FORCE_INLINE XXH_errorcode +XXH3_update(XXH3_state_t* XXH_RESTRICT const state, + const xxh_u8* XXH_RESTRICT input, size_t len, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble) +{ + if (input==NULL) { + XXH_ASSERT(len == 0); + return XXH_OK; + } + + XXH_ASSERT(state != NULL); + { const xxh_u8* const bEnd = input + len; + const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; +#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1 + /* For some reason, gcc and MSVC seem to suffer greatly + * when operating accumulators directly into state. + * Operating into stack space seems to enable proper optimization. + * clang, on the other hand, doesn't seem to need this trick */ + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[8]; + XXH_memcpy(acc, state->acc, sizeof(acc)); +#else + xxh_u64* XXH_RESTRICT const acc = state->acc; +#endif + state->totalLen += len; + XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE); + + /* small input : just fill in tmp buffer */ + if (len <= XXH3_INTERNALBUFFER_SIZE - state->bufferedSize) { + XXH_memcpy(state->buffer + state->bufferedSize, input, len); + state->bufferedSize += (XXH32_hash_t)len; + return XXH_OK; + } + + /* total input is now > XXH3_INTERNALBUFFER_SIZE */ + #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN) + XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0); /* clean multiple */ + + /* + * Internal buffer is partially filled (always, except at beginning) + * Complete it, then consume it. + */ + if (state->bufferedSize) { + size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize; + XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize); + input += loadSize; + XXH3_consumeStripes(acc, + &state->nbStripesSoFar, state->nbStripesPerBlock, + state->buffer, XXH3_INTERNALBUFFER_STRIPES, + secret, state->secretLimit, + f_acc, f_scramble); + state->bufferedSize = 0; + } + XXH_ASSERT(input < bEnd); + if (bEnd - input > XXH3_INTERNALBUFFER_SIZE) { + size_t nbStripes = (size_t)(bEnd - 1 - input) / XXH_STRIPE_LEN; + input = XXH3_consumeStripes(acc, + &state->nbStripesSoFar, state->nbStripesPerBlock, + input, nbStripes, + secret, state->secretLimit, + f_acc, f_scramble); + XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN); + + } + /* Some remaining input (always) : buffer it */ + XXH_ASSERT(input < bEnd); + XXH_ASSERT(bEnd - input <= XXH3_INTERNALBUFFER_SIZE); + XXH_ASSERT(state->bufferedSize == 0); + XXH_memcpy(state->buffer, input, (size_t)(bEnd-input)); + state->bufferedSize = (XXH32_hash_t)(bEnd-input); +#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1 + /* save stack accumulators into state */ + XXH_memcpy(state->acc, acc, sizeof(acc)); +#endif + } + + return XXH_OK; +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_64bits_update(XXH_NOESCAPE XXH3_state_t* state, XXH_NOESCAPE const void* input, size_t len) +{ + return XXH3_update(state, (const xxh_u8*)input, len, + XXH3_accumulate, XXH3_scrambleAcc); +} + + +XXH_FORCE_INLINE void +XXH3_digest_long (XXH64_hash_t* acc, + const XXH3_state_t* state, + const unsigned char* secret) +{ + xxh_u8 lastStripe[XXH_STRIPE_LEN]; + const xxh_u8* lastStripePtr; + + /* + * Digest on a local copy. This way, the state remains unaltered, and it can + * continue ingesting more input afterwards. + */ + XXH_memcpy(acc, state->acc, sizeof(state->acc)); + if (state->bufferedSize >= XXH_STRIPE_LEN) { + /* Consume remaining stripes then point to remaining data in buffer */ + size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN; + size_t nbStripesSoFar = state->nbStripesSoFar; + XXH3_consumeStripes(acc, + &nbStripesSoFar, state->nbStripesPerBlock, + state->buffer, nbStripes, + secret, state->secretLimit, + XXH3_accumulate, XXH3_scrambleAcc); + lastStripePtr = state->buffer + state->bufferedSize - XXH_STRIPE_LEN; + } else { /* bufferedSize < XXH_STRIPE_LEN */ + /* Copy to temp buffer */ + size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize; + XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */ + XXH_memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize); + XXH_memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize); + lastStripePtr = lastStripe; + } + /* Last stripe */ + XXH3_accumulate_512(acc, + lastStripePtr, + secret + state->secretLimit - XXH_SECRET_LASTACC_START); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (XXH_NOESCAPE const XXH3_state_t* state) +{ + const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; + if (state->totalLen > XXH3_MIDSIZE_MAX) { + XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; + XXH3_digest_long(acc, state, secret); + return XXH3_finalizeLong_64b(acc, secret, (xxh_u64)state->totalLen); + } + /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */ + if (state->useSeed) + return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); + return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen), + secret, state->secretLimit + XXH_STRIPE_LEN); +} +#endif /* !XXH_NO_STREAM */ + + +/* ========================================== + * XXH3 128 bits (a.k.a XXH128) + * ========================================== + * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant, + * even without counting the significantly larger output size. + * + * For example, extra steps are taken to avoid the seed-dependent collisions + * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B). + * + * This strength naturally comes at the cost of some speed, especially on short + * lengths. Note that longer hashes are about as fast as the 64-bit version + * due to it using only a slight modification of the 64-bit loop. + * + * XXH128 is also more oriented towards 64-bit machines. It is still extremely + * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64). + */ + +XXH_FORCE_INLINE XXH_PUREF XXH128_hash_t +XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + /* A doubled version of 1to3_64b with different constants. */ + XXH_ASSERT(input != NULL); + XXH_ASSERT(1 <= len && len <= 3); + XXH_ASSERT(secret != NULL); + /* + * len = 1: combinedl = { input[0], 0x01, input[0], input[0] } + * len = 2: combinedl = { input[1], 0x02, input[0], input[1] } + * len = 3: combinedl = { input[2], 0x03, input[0], input[1] } + */ + { xxh_u8 const c1 = input[0]; + xxh_u8 const c2 = input[len >> 1]; + xxh_u8 const c3 = input[len - 1]; + xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24) + | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); + xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13); + xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed; + xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed; + xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl; + xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph; + XXH128_hash_t h128; + h128.low64 = XXH64_avalanche(keyed_lo); + h128.high64 = XXH64_avalanche(keyed_hi); + return h128; + } +} + +XXH_FORCE_INLINE XXH_PUREF XXH128_hash_t +XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(4 <= len && len <= 8); + seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; + { xxh_u32 const input_lo = XXH_readLE32(input); + xxh_u32 const input_hi = XXH_readLE32(input + len - 4); + xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32); + xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed; + xxh_u64 const keyed = input_64 ^ bitflip; + + /* Shift len to the left to ensure it is even, this avoids even multiplies. */ + XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2)); + + m128.high64 += (m128.low64 << 1); + m128.low64 ^= (m128.high64 >> 3); + + m128.low64 = XXH_xorshift64(m128.low64, 35); + m128.low64 *= PRIME_MX2; + m128.low64 = XXH_xorshift64(m128.low64, 28); + m128.high64 = XXH3_avalanche(m128.high64); + return m128; + } +} + +XXH_FORCE_INLINE XXH_PUREF XXH128_hash_t +XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(9 <= len && len <= 16); + { xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed; + xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed; + xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 input_hi = XXH_readLE64(input + len - 8); + XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1); + /* + * Put len in the middle of m128 to ensure that the length gets mixed to + * both the low and high bits in the 128x64 multiply below. + */ + m128.low64 += (xxh_u64)(len - 1) << 54; + input_hi ^= bitfliph; + /* + * Add the high 32 bits of input_hi to the high 32 bits of m128, then + * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to + * the high 64 bits of m128. + * + * The best approach to this operation is different on 32-bit and 64-bit. + */ + if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */ + /* + * 32-bit optimized version, which is more readable. + * + * On 32-bit, it removes an ADC and delays a dependency between the two + * halves of m128.high64, but it generates an extra mask on 64-bit. + */ + m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2); + } else { + /* + * 64-bit optimized (albeit more confusing) version. + * + * Uses some properties of addition and multiplication to remove the mask: + * + * Let: + * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF) + * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000) + * c = XXH_PRIME32_2 + * + * a + (b * c) + * Inverse Property: x + y - x == y + * a + (b * (1 + c - 1)) + * Distributive Property: x * (y + z) == (x * y) + (x * z) + * a + (b * 1) + (b * (c - 1)) + * Identity Property: x * 1 == x + * a + b + (b * (c - 1)) + * + * Substitute a, b, and c: + * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) + * + * Since input_hi.hi + input_hi.lo == input_hi, we get this: + * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) + */ + m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1); + } + /* m128 ^= XXH_swap64(m128 >> 64); */ + m128.low64 ^= XXH_swap64(m128.high64); + + { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */ + XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2); + h128.high64 += m128.high64 * XXH_PRIME64_2; + + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = XXH3_avalanche(h128.high64); + return h128; + } } +} + +/* + * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN + */ +XXH_FORCE_INLINE XXH_PUREF XXH128_hash_t +XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) +{ + XXH_ASSERT(len <= 16); + { if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed); + if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed); + if (len) return XXH3_len_1to3_128b(input, len, secret, seed); + { XXH128_hash_t h128; + xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72); + xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88); + h128.low64 = XXH64_avalanche(seed ^ bitflipl); + h128.high64 = XXH64_avalanche( seed ^ bitfliph); + return h128; + } } +} + +/* + * A bit slower than XXH3_mix16B, but handles multiply by zero better. + */ +XXH_FORCE_INLINE XXH128_hash_t +XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2, + const xxh_u8* secret, XXH64_hash_t seed) +{ + acc.low64 += XXH3_mix16B (input_1, secret+0, seed); + acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8); + acc.high64 += XXH3_mix16B (input_2, secret+16, seed); + acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8); + return acc; +} + + +XXH_FORCE_INLINE XXH_PUREF XXH128_hash_t +XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) +{ + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; + XXH_ASSERT(16 < len && len <= 128); + + { XXH128_hash_t acc; + acc.low64 = len * XXH_PRIME64_1; + acc.high64 = 0; + +#if XXH_SIZE_OPT >= 1 + { + /* Smaller, but slightly slower. */ + unsigned int i = (unsigned int)(len - 1) / 32; + do { + acc = XXH128_mix32B(acc, input+16*i, input+len-16*(i+1), secret+32*i, seed); + } while (i-- != 0); + } +#else + if (len > 32) { + if (len > 64) { + if (len > 96) { + acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed); + } + acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed); + } + acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed); + } + acc = XXH128_mix32B(acc, input, input+len-16, secret, seed); +#endif + { XXH128_hash_t h128; + h128.low64 = acc.low64 + acc.high64; + h128.high64 = (acc.low64 * XXH_PRIME64_1) + + (acc.high64 * XXH_PRIME64_4) + + ((len - seed) * XXH_PRIME64_2); + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); + return h128; + } + } +} + +XXH_NO_INLINE XXH_PUREF XXH128_hash_t +XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) +{ + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + + { XXH128_hash_t acc; + unsigned i; + acc.low64 = len * XXH_PRIME64_1; + acc.high64 = 0; + /* + * We set as `i` as offset + 32. We do this so that unchanged + * `len` can be used as upper bound. This reaches a sweet spot + * where both x86 and aarch64 get simple agen and good codegen + * for the loop. + */ + for (i = 32; i < 160; i += 32) { + acc = XXH128_mix32B(acc, + input + i - 32, + input + i - 16, + secret + i - 32, + seed); + } + acc.low64 = XXH3_avalanche(acc.low64); + acc.high64 = XXH3_avalanche(acc.high64); + /* + * NB: `i <= len` will duplicate the last 32-bytes if + * len % 32 was zero. This is an unfortunate necessity to keep + * the hash result stable. + */ + for (i=160; i <= len; i += 32) { + acc = XXH128_mix32B(acc, + input + i - 32, + input + i - 16, + secret + XXH3_MIDSIZE_STARTOFFSET + i - 160, + seed); + } + /* last bytes */ + acc = XXH128_mix32B(acc, + input + len - 16, + input + len - 32, + secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16, + (XXH64_hash_t)0 - seed); + + { XXH128_hash_t h128; + h128.low64 = acc.low64 + acc.high64; + h128.high64 = (acc.low64 * XXH_PRIME64_1) + + (acc.high64 * XXH_PRIME64_4) + + ((len - seed) * XXH_PRIME64_2); + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); + return h128; + } + } +} + +static XXH_PUREF XXH128_hash_t +XXH3_finalizeLong_128b(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, xxh_u64 len) +{ + XXH128_hash_t h128; + h128.low64 = XXH3_finalizeLong_64b(acc, secret, len); + h128.high64 = XXH3_mergeAccs(acc, secret + secretSize + - XXH_STRIPE_LEN - XXH_SECRET_MERGEACCS_START, + ~(len * XXH_PRIME64_2)); + return h128; +} + +XXH_FORCE_INLINE XXH128_hash_t +XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble) +{ + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; + + XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc, f_scramble); + + /* converge into final hash */ + XXH_STATIC_ASSERT(sizeof(acc) == 64); + XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + return XXH3_finalizeLong_128b(acc, secret, secretSize, (xxh_u64)len); +} + +/* + * It's important for performance that XXH3_hashLong() is not inlined. + */ +XXH_NO_INLINE XXH_PUREF XXH128_hash_t +XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, size_t secretLen) +{ + (void)seed64; (void)secret; (void)secretLen; + return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), + XXH3_accumulate, XXH3_scrambleAcc); +} + +/* + * It's important for performance to pass @p secretLen (when it's static) + * to the compiler, so that it can properly optimize the vectorized loop. + * + * When the secret size is unknown, or on GCC 12 where the mix of NO_INLINE and FORCE_INLINE + * breaks -Og, this is XXH_NO_INLINE. + */ +XXH3_WITH_SECRET_INLINE XXH128_hash_t +XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, size_t secretLen) +{ + (void)seed64; + return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen, + XXH3_accumulate, XXH3_scrambleAcc); +} + +XXH_FORCE_INLINE XXH128_hash_t +XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, + XXH3_f_accumulate f_acc, + XXH3_f_scrambleAcc f_scramble, + XXH3_f_initCustomSecret f_initSec) +{ + if (seed64 == 0) + return XXH3_hashLong_128b_internal(input, len, + XXH3_kSecret, sizeof(XXH3_kSecret), + f_acc, f_scramble); + { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; + f_initSec(secret, seed64); + return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret), + f_acc, f_scramble); + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH128_hash_t +XXH3_hashLong_128b_withSeed(const void* input, size_t len, + XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen) +{ + (void)secret; (void)secretLen; + return XXH3_hashLong_128b_withSeed_internal(input, len, seed64, + XXH3_accumulate, XXH3_scrambleAcc, XXH3_initCustomSecret); +} + +typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t, + XXH64_hash_t, const void* XXH_RESTRICT, size_t); + +XXH_FORCE_INLINE XXH128_hash_t +XXH3_128bits_internal(const void* input, size_t len, + XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen, + XXH3_hashLong128_f f_hl128) +{ + XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); + /* + * If an action is to be taken if `secret` conditions are not respected, + * it should be done here. + * For now, it's a contract pre-condition. + * Adding a check and a branch here would cost performance at every hash. + */ + if (len <= 16) + return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); + if (len <= 128) + return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + return f_hl128(input, len, seed64, secret, secretLen); +} + + +/* === Public XXH128 API === */ + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(XXH_NOESCAPE const void* input, size_t len) +{ + return XXH3_128bits_internal(input, len, 0, + XXH3_kSecret, sizeof(XXH3_kSecret), + XXH3_hashLong_128b_default); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t +XXH3_128bits_withSecret(XXH_NOESCAPE const void* input, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize) +{ + return XXH3_128bits_internal(input, len, 0, + (const xxh_u8*)secret, secretSize, + XXH3_hashLong_128b_withSecret); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t +XXH3_128bits_withSeed(XXH_NOESCAPE const void* input, size_t len, XXH64_hash_t seed) +{ + return XXH3_128bits_internal(input, len, seed, + XXH3_kSecret, sizeof(XXH3_kSecret), + XXH3_hashLong_128b_withSeed); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t +XXH3_128bits_withSecretandSeed(XXH_NOESCAPE const void* input, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed) +{ + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL); + return XXH3_hashLong_128b_withSecret(input, len, seed, secret, secretSize); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t +XXH128(XXH_NOESCAPE const void* input, size_t len, XXH64_hash_t seed) +{ + return XXH3_128bits_withSeed(input, len, seed); +} + + +/* === XXH3 128-bit streaming === */ +#ifndef XXH_NO_STREAM +/* + * All initialization and update functions are identical to 64-bit streaming variant. + * The only difference is the finalization routine. + */ + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_128bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr) +{ + return XXH3_64bits_reset(statePtr); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_128bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize) +{ + return XXH3_64bits_reset_withSecret(statePtr, secret, secretSize); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_128bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed) +{ + return XXH3_64bits_reset_withSeed(statePtr, seed); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_128bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed) +{ + return XXH3_64bits_reset_withSecretandSeed(statePtr, secret, secretSize, seed); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_128bits_update(XXH_NOESCAPE XXH3_state_t* state, XXH_NOESCAPE const void* input, size_t len) +{ + return XXH3_64bits_update(state, input, len); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (XXH_NOESCAPE const XXH3_state_t* state) +{ + const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; + if (state->totalLen > XXH3_MIDSIZE_MAX) { + XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; + XXH3_digest_long(acc, state, secret); + XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + return XXH3_finalizeLong_128b(acc, secret, state->secretLimit + XXH_STRIPE_LEN, (xxh_u64)state->totalLen); + } + /* len <= XXH3_MIDSIZE_MAX : short code */ + if (state->useSeed) + return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); + return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen), + secret, state->secretLimit + XXH_STRIPE_LEN); +} +#endif /* !XXH_NO_STREAM */ +/* 128-bit utility functions */ + +#include /* memcmp, memcpy */ + +/* return : 1 is equal, 0 if different */ +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2) +{ + /* note : XXH128_hash_t is compact, it has no padding byte */ + return !(memcmp(&h1, &h2, sizeof(h1))); +} + +/* This prototype is compatible with stdlib's qsort(). + * @return : >0 if *h128_1 > *h128_2 + * <0 if *h128_1 < *h128_2 + * =0 if *h128_1 == *h128_2 */ +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API int XXH128_cmp(XXH_NOESCAPE const void* h128_1, XXH_NOESCAPE const void* h128_2) +{ + XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1; + XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2; + int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64); + /* note : bets that, in most cases, hash values are different */ + if (hcmp) return hcmp; + return (h1.low64 > h2.low64) - (h2.low64 > h1.low64); +} + + +/*====== Canonical representation ======*/ +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API void +XXH128_canonicalFromHash(XXH_NOESCAPE XXH128_canonical_t* dst, XXH128_hash_t hash) +{ + XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) { + hash.high64 = XXH_swap64(hash.high64); + hash.low64 = XXH_swap64(hash.low64); + } + XXH_memcpy(dst, &hash.high64, sizeof(hash.high64)); + XXH_memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64)); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH128_hash_t +XXH128_hashFromCanonical(XXH_NOESCAPE const XXH128_canonical_t* src) +{ + XXH128_hash_t h; + h.high64 = XXH_readBE64(src); + h.low64 = XXH_readBE64(src->digest + 8); + return h; +} + + + +/* ========================================== + * Secret generators + * ========================================== + */ +#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x)) + +XXH_FORCE_INLINE void XXH3_combine16(void* dst, XXH128_hash_t h128) +{ + XXH_writeLE64( dst, XXH_readLE64(dst) ^ h128.low64 ); + XXH_writeLE64( (char*)dst+8, XXH_readLE64((char*)dst+8) ^ h128.high64 ); +} + +/*! @ingroup XXH3_family */ +XXH_PUBLIC_API XXH_errorcode +XXH3_generateSecret(XXH_NOESCAPE void* secretBuffer, size_t secretSize, XXH_NOESCAPE const void* customSeed, size_t customSeedSize) +{ +#if (XXH_DEBUGLEVEL >= 1) + XXH_ASSERT(secretBuffer != NULL); + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); +#else + /* production mode, assert() are disabled */ + if (secretBuffer == NULL) return XXH_ERROR; + if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; +#endif + + if (customSeedSize == 0) { + customSeed = XXH3_kSecret; + customSeedSize = XXH_SECRET_DEFAULT_SIZE; + } +#if (XXH_DEBUGLEVEL >= 1) + XXH_ASSERT(customSeed != NULL); +#else + if (customSeed == NULL) return XXH_ERROR; +#endif + + /* Fill secretBuffer with a copy of customSeed - repeat as needed */ + { size_t pos = 0; + while (pos < secretSize) { + size_t const toCopy = XXH_MIN((secretSize - pos), customSeedSize); + memcpy((char*)secretBuffer + pos, customSeed, toCopy); + pos += toCopy; + } } + + { size_t const nbSeg16 = secretSize / 16; + size_t n; + XXH128_canonical_t scrambler; + XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0)); + for (n=0; n= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#ifndef z_const +# ifdef ZLIB_CONST +# define z_const const +# else +# define z_const +# endif +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#if 1 /* was set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#if 1 /* was set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# if defined(__WATCOMC__) || defined(__GO32__) || \ + (defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#elif defined(__MINGW32__) +# define z_off64_t long long +#elif defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +#elif defined(__GO32__) +# define z_off64_t offset_t +#else +# define z_off64_t z_off_t +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/board/mentalnet/overlay/usr/include/zdict.h b/board/mentalnet/overlay/usr/include/zdict.h new file mode 100644 index 0000000..599b793 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/zdict.h @@ -0,0 +1,481 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_ZDICT_H +#define ZSTD_ZDICT_H + + +/*====== Dependencies ======*/ +#include /* size_t */ + +#if defined (__cplusplus) +extern "C" { +#endif + +/* ===== ZDICTLIB_API : control library symbols visibility ===== */ +#ifndef ZDICTLIB_VISIBLE + /* Backwards compatibility with old macro name */ +# ifdef ZDICTLIB_VISIBILITY +# define ZDICTLIB_VISIBLE ZDICTLIB_VISIBILITY +# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZDICTLIB_VISIBLE __attribute__ ((visibility ("default"))) +# else +# define ZDICTLIB_VISIBLE +# endif +#endif + +#ifndef ZDICTLIB_HIDDEN +# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZDICTLIB_HIDDEN __attribute__ ((visibility ("hidden"))) +# else +# define ZDICTLIB_HIDDEN +# endif +#endif + +#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZDICTLIB_API __declspec(dllexport) ZDICTLIB_VISIBLE +#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZDICTLIB_API __declspec(dllimport) ZDICTLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#else +# define ZDICTLIB_API ZDICTLIB_VISIBLE +#endif + +/******************************************************************************* + * Zstd dictionary builder + * + * FAQ + * === + * Why should I use a dictionary? + * ------------------------------ + * + * Zstd can use dictionaries to improve compression ratio of small data. + * Traditionally small files don't compress well because there is very little + * repetition in a single sample, since it is small. But, if you are compressing + * many similar files, like a bunch of JSON records that share the same + * structure, you can train a dictionary on ahead of time on some samples of + * these files. Then, zstd can use the dictionary to find repetitions that are + * present across samples. This can vastly improve compression ratio. + * + * When is a dictionary useful? + * ---------------------------- + * + * Dictionaries are useful when compressing many small files that are similar. + * The larger a file is, the less benefit a dictionary will have. Generally, + * we don't expect dictionary compression to be effective past 100KB. And the + * smaller a file is, the more we would expect the dictionary to help. + * + * How do I use a dictionary? + * -------------------------- + * + * Simply pass the dictionary to the zstd compressor with + * `ZSTD_CCtx_loadDictionary()`. The same dictionary must then be passed to + * the decompressor, using `ZSTD_DCtx_loadDictionary()`. There are other + * more advanced functions that allow selecting some options, see zstd.h for + * complete documentation. + * + * What is a zstd dictionary? + * -------------------------- + * + * A zstd dictionary has two pieces: Its header, and its content. The header + * contains a magic number, the dictionary ID, and entropy tables. These + * entropy tables allow zstd to save on header costs in the compressed file, + * which really matters for small data. The content is just bytes, which are + * repeated content that is common across many samples. + * + * What is a raw content dictionary? + * --------------------------------- + * + * A raw content dictionary is just bytes. It doesn't have a zstd dictionary + * header, a dictionary ID, or entropy tables. Any buffer is a valid raw + * content dictionary. + * + * How do I train a dictionary? + * ---------------------------- + * + * Gather samples from your use case. These samples should be similar to each + * other. If you have several use cases, you could try to train one dictionary + * per use case. + * + * Pass those samples to `ZDICT_trainFromBuffer()` and that will train your + * dictionary. There are a few advanced versions of this function, but this + * is a great starting point. If you want to further tune your dictionary + * you could try `ZDICT_optimizeTrainFromBuffer_cover()`. If that is too slow + * you can try `ZDICT_optimizeTrainFromBuffer_fastCover()`. + * + * If the dictionary training function fails, that is likely because you + * either passed too few samples, or a dictionary would not be effective + * for your data. Look at the messages that the dictionary trainer printed, + * if it doesn't say too few samples, then a dictionary would not be effective. + * + * How large should my dictionary be? + * ---------------------------------- + * + * A reasonable dictionary size, the `dictBufferCapacity`, is about 100KB. + * The zstd CLI defaults to a 110KB dictionary. You likely don't need a + * dictionary larger than that. But, most use cases can get away with a + * smaller dictionary. The advanced dictionary builders can automatically + * shrink the dictionary for you, and select the smallest size that doesn't + * hurt compression ratio too much. See the `shrinkDict` parameter. + * A smaller dictionary can save memory, and potentially speed up + * compression. + * + * How many samples should I provide to the dictionary builder? + * ------------------------------------------------------------ + * + * We generally recommend passing ~100x the size of the dictionary + * in samples. A few thousand should suffice. Having too few samples + * can hurt the dictionaries effectiveness. Having more samples will + * only improve the dictionaries effectiveness. But having too many + * samples can slow down the dictionary builder. + * + * How do I determine if a dictionary will be effective? + * ----------------------------------------------------- + * + * Simply train a dictionary and try it out. You can use zstd's built in + * benchmarking tool to test the dictionary effectiveness. + * + * # Benchmark levels 1-3 without a dictionary + * zstd -b1e3 -r /path/to/my/files + * # Benchmark levels 1-3 with a dictionary + * zstd -b1e3 -r /path/to/my/files -D /path/to/my/dictionary + * + * When should I retrain a dictionary? + * ----------------------------------- + * + * You should retrain a dictionary when its effectiveness drops. Dictionary + * effectiveness drops as the data you are compressing changes. Generally, we do + * expect dictionaries to "decay" over time, as your data changes, but the rate + * at which they decay depends on your use case. Internally, we regularly + * retrain dictionaries, and if the new dictionary performs significantly + * better than the old dictionary, we will ship the new dictionary. + * + * I have a raw content dictionary, how do I turn it into a zstd dictionary? + * ------------------------------------------------------------------------- + * + * If you have a raw content dictionary, e.g. by manually constructing it, or + * using a third-party dictionary builder, you can turn it into a zstd + * dictionary by using `ZDICT_finalizeDictionary()`. You'll also have to + * provide some samples of the data. It will add the zstd header to the + * raw content, which contains a dictionary ID and entropy tables, which + * will improve compression ratio, and allow zstd to write the dictionary ID + * into the frame, if you so choose. + * + * Do I have to use zstd's dictionary builder? + * ------------------------------------------- + * + * No! You can construct dictionary content however you please, it is just + * bytes. It will always be valid as a raw content dictionary. If you want + * a zstd dictionary, which can improve compression ratio, use + * `ZDICT_finalizeDictionary()`. + * + * What is the attack surface of a zstd dictionary? + * ------------------------------------------------ + * + * Zstd is heavily fuzz tested, including loading fuzzed dictionaries, so + * zstd should never crash, or access out-of-bounds memory no matter what + * the dictionary is. However, if an attacker can control the dictionary + * during decompression, they can cause zstd to generate arbitrary bytes, + * just like if they controlled the compressed data. + * + ******************************************************************************/ + + +/*! ZDICT_trainFromBuffer(): + * Train a dictionary from an array of samples. + * Redirect towards ZDICT_optimizeTrainFromBuffer_fastCover() single-threaded, with d=8, steps=4, + * f=20, and accel=1. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * The resulting dictionary will be saved into `dictBuffer`. + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * Note: Dictionary training will fail if there are not enough samples to construct a + * dictionary, or if most of the samples are too small (< 8 bytes being the lower limit). + * If dictionary training fails, you should use zstd without a dictionary, as the dictionary + * would've been ineffective anyways. If you believe your samples would benefit from a dictionary + * please open an issue with details, and we can look into it. + * Note: ZDICT_trainFromBuffer()'s memory usage is about 6 MB. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + */ +ZDICTLIB_API size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCapacity, + const void* samplesBuffer, + const size_t* samplesSizes, unsigned nbSamples); + +typedef struct { + int compressionLevel; /**< optimize for a specific zstd compression level; 0 means default */ + unsigned notificationLevel; /**< Write log to stderr; 0 = none (default); 1 = errors; 2 = progression; 3 = details; 4 = debug; */ + unsigned dictID; /**< force dictID value; 0 means auto mode (32-bits random value) + * NOTE: The zstd format reserves some dictionary IDs for future use. + * You may use them in private settings, but be warned that they + * may be used by zstd in a public dictionary registry in the future. + * These dictionary IDs are: + * - low range : <= 32767 + * - high range : >= (2^31) + */ +} ZDICT_params_t; + +/*! ZDICT_finalizeDictionary(): + * Given a custom content as a basis for dictionary, and a set of samples, + * finalize dictionary by adding headers and statistics according to the zstd + * dictionary format. + * + * Samples must be stored concatenated in a flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each + * sample in order. The samples are used to construct the statistics, so they + * should be representative of what you will compress with this dictionary. + * + * The compression level can be set in `parameters`. You should pass the + * compression level you expect to use in production. The statistics for each + * compression level differ, so tuning the dictionary for the compression level + * can help quite a bit. + * + * You can set an explicit dictionary ID in `parameters`, or allow us to pick + * a random dictionary ID for you, but we can't guarantee no collisions. + * + * The dstDictBuffer and the dictContent may overlap, and the content will be + * appended to the end of the header. If the header + the content doesn't fit in + * maxDictSize the beginning of the content is truncated to make room, since it + * is presumed that the most profitable content is at the end of the dictionary, + * since that is the cheapest to reference. + * + * `maxDictSize` must be >= max(dictContentSize, ZDICT_DICTSIZE_MIN). + * + * @return: size of dictionary stored into `dstDictBuffer` (<= `maxDictSize`), + * or an error code, which can be tested by ZDICT_isError(). + * Note: ZDICT_finalizeDictionary() will push notifications into stderr if + * instructed to, using notificationLevel>0. + * NOTE: This function currently may fail in several edge cases including: + * * Not enough samples + * * Samples are uncompressible + * * Samples are all exactly the same + */ +ZDICTLIB_API size_t ZDICT_finalizeDictionary(void* dstDictBuffer, size_t maxDictSize, + const void* dictContent, size_t dictContentSize, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_params_t parameters); + + +/*====== Helper functions ======*/ +ZDICTLIB_API unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize); /**< extracts dictID; @return zero if error (not a valid dictionary) */ +ZDICTLIB_API size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize); /* returns dict header size; returns a ZSTD error code on failure */ +ZDICTLIB_API unsigned ZDICT_isError(size_t errorCode); +ZDICTLIB_API const char* ZDICT_getErrorName(size_t errorCode); + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_ZDICT_H */ + +#if defined(ZDICT_STATIC_LINKING_ONLY) && !defined(ZSTD_ZDICT_H_STATIC) +#define ZSTD_ZDICT_H_STATIC + +#if defined (__cplusplus) +extern "C" { +#endif + +/* This can be overridden externally to hide static symbols. */ +#ifndef ZDICTLIB_STATIC_API +# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZDICTLIB_STATIC_API __declspec(dllexport) ZDICTLIB_VISIBLE +# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZDICTLIB_STATIC_API __declspec(dllimport) ZDICTLIB_VISIBLE +# else +# define ZDICTLIB_STATIC_API ZDICTLIB_VISIBLE +# endif +#endif + +/* ==================================================================================== + * The definitions in this section are considered experimental. + * They should never be used with a dynamic library, as they may change in the future. + * They are provided for advanced usages. + * Use them only in association with static linking. + * ==================================================================================== */ + +#define ZDICT_DICTSIZE_MIN 256 +/* Deprecated: Remove in v1.6.0 */ +#define ZDICT_CONTENTSIZE_MIN 128 + +/*! ZDICT_cover_params_t: + * k and d are the only required parameters. + * For others, value 0 means default. + */ +typedef struct { + unsigned k; /* Segment size : constraint: 0 < k : Reasonable range [16, 2048+] */ + unsigned d; /* dmer size : constraint: 0 < d <= k : Reasonable range [6, 16] */ + unsigned steps; /* Number of steps : Only used for optimization : 0 means default (40) : Higher means more parameters checked */ + unsigned nbThreads; /* Number of threads : constraint: 0 < nbThreads : 1 means single-threaded : Only used for optimization : Ignored if ZSTD_MULTITHREAD is not defined */ + double splitPoint; /* Percentage of samples used for training: Only used for optimization : the first nbSamples * splitPoint samples will be used to training, the last nbSamples * (1 - splitPoint) samples will be used for testing, 0 means default (1.0), 1.0 when all samples are used for both training and testing */ + unsigned shrinkDict; /* Train dictionaries to shrink in size starting from the minimum size and selects the smallest dictionary that is shrinkDictMaxRegression% worse than the largest dictionary. 0 means no shrinking and 1 means shrinking */ + unsigned shrinkDictMaxRegression; /* Sets shrinkDictMaxRegression so that a smaller dictionary can be at worse shrinkDictMaxRegression% worse than the max dict size dictionary. */ + ZDICT_params_t zParams; +} ZDICT_cover_params_t; + +typedef struct { + unsigned k; /* Segment size : constraint: 0 < k : Reasonable range [16, 2048+] */ + unsigned d; /* dmer size : constraint: 0 < d <= k : Reasonable range [6, 16] */ + unsigned f; /* log of size of frequency array : constraint: 0 < f <= 31 : 1 means default(20)*/ + unsigned steps; /* Number of steps : Only used for optimization : 0 means default (40) : Higher means more parameters checked */ + unsigned nbThreads; /* Number of threads : constraint: 0 < nbThreads : 1 means single-threaded : Only used for optimization : Ignored if ZSTD_MULTITHREAD is not defined */ + double splitPoint; /* Percentage of samples used for training: Only used for optimization : the first nbSamples * splitPoint samples will be used to training, the last nbSamples * (1 - splitPoint) samples will be used for testing, 0 means default (0.75), 1.0 when all samples are used for both training and testing */ + unsigned accel; /* Acceleration level: constraint: 0 < accel <= 10, higher means faster and less accurate, 0 means default(1) */ + unsigned shrinkDict; /* Train dictionaries to shrink in size starting from the minimum size and selects the smallest dictionary that is shrinkDictMaxRegression% worse than the largest dictionary. 0 means no shrinking and 1 means shrinking */ + unsigned shrinkDictMaxRegression; /* Sets shrinkDictMaxRegression so that a smaller dictionary can be at worse shrinkDictMaxRegression% worse than the max dict size dictionary. */ + + ZDICT_params_t zParams; +} ZDICT_fastCover_params_t; + +/*! ZDICT_trainFromBuffer_cover(): + * Train a dictionary from an array of samples using the COVER algorithm. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * The resulting dictionary will be saved into `dictBuffer`. + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_trainFromBuffer_cover() requires about 9 bytes of memory for each input byte. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + */ +ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_cover( + void *dictBuffer, size_t dictBufferCapacity, + const void *samplesBuffer, const size_t *samplesSizes, unsigned nbSamples, + ZDICT_cover_params_t parameters); + +/*! ZDICT_optimizeTrainFromBuffer_cover(): + * The same requirements as above hold for all the parameters except `parameters`. + * This function tries many parameter combinations and picks the best parameters. + * `*parameters` is filled with the best parameters found, + * dictionary constructed with those parameters is stored in `dictBuffer`. + * + * All of the parameters d, k, steps are optional. + * If d is non-zero then we don't check multiple values of d, otherwise we check d = {6, 8}. + * if steps is zero it defaults to its default value. + * If k is non-zero then we don't check multiple values of k, otherwise we check steps values in [50, 2000]. + * + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * On success `*parameters` contains the parameters selected. + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_optimizeTrainFromBuffer_cover() requires about 8 bytes of memory for each input byte and additionally another 5 bytes of memory for each byte of memory for each thread. + */ +ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_cover( + void* dictBuffer, size_t dictBufferCapacity, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_cover_params_t* parameters); + +/*! ZDICT_trainFromBuffer_fastCover(): + * Train a dictionary from an array of samples using a modified version of COVER algorithm. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * d and k are required. + * All other parameters are optional, will use default values if not provided + * The resulting dictionary will be saved into `dictBuffer`. + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_trainFromBuffer_fastCover() requires 6 * 2^f bytes of memory. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + */ +ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_fastCover(void *dictBuffer, + size_t dictBufferCapacity, const void *samplesBuffer, + const size_t *samplesSizes, unsigned nbSamples, + ZDICT_fastCover_params_t parameters); + +/*! ZDICT_optimizeTrainFromBuffer_fastCover(): + * The same requirements as above hold for all the parameters except `parameters`. + * This function tries many parameter combinations (specifically, k and d combinations) + * and picks the best parameters. `*parameters` is filled with the best parameters found, + * dictionary constructed with those parameters is stored in `dictBuffer`. + * All of the parameters d, k, steps, f, and accel are optional. + * If d is non-zero then we don't check multiple values of d, otherwise we check d = {6, 8}. + * if steps is zero it defaults to its default value. + * If k is non-zero then we don't check multiple values of k, otherwise we check steps values in [50, 2000]. + * If f is zero, default value of 20 is used. + * If accel is zero, default value of 1 is used. + * + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * On success `*parameters` contains the parameters selected. + * See ZDICT_trainFromBuffer() for details on failure modes. + * Note: ZDICT_optimizeTrainFromBuffer_fastCover() requires about 6 * 2^f bytes of memory for each thread. + */ +ZDICTLIB_STATIC_API size_t ZDICT_optimizeTrainFromBuffer_fastCover(void* dictBuffer, + size_t dictBufferCapacity, const void* samplesBuffer, + const size_t* samplesSizes, unsigned nbSamples, + ZDICT_fastCover_params_t* parameters); + +typedef struct { + unsigned selectivityLevel; /* 0 means default; larger => select more => larger dictionary */ + ZDICT_params_t zParams; +} ZDICT_legacy_params_t; + +/*! ZDICT_trainFromBuffer_legacy(): + * Train a dictionary from an array of samples. + * Samples must be stored concatenated in a single flat buffer `samplesBuffer`, + * supplied with an array of sizes `samplesSizes`, providing the size of each sample, in order. + * The resulting dictionary will be saved into `dictBuffer`. + * `parameters` is optional and can be provided with values set to 0 to mean "default". + * @return: size of dictionary stored into `dictBuffer` (<= `dictBufferCapacity`) + * or an error code, which can be tested with ZDICT_isError(). + * See ZDICT_trainFromBuffer() for details on failure modes. + * Tips: In general, a reasonable dictionary has a size of ~ 100 KB. + * It's possible to select smaller or larger size, just by specifying `dictBufferCapacity`. + * In general, it's recommended to provide a few thousands samples, though this can vary a lot. + * It's recommended that total size of all samples be about ~x100 times the target size of dictionary. + * Note: ZDICT_trainFromBuffer_legacy() will send notifications into stderr if instructed to, using notificationLevel>0. + */ +ZDICTLIB_STATIC_API size_t ZDICT_trainFromBuffer_legacy( + void* dictBuffer, size_t dictBufferCapacity, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples, + ZDICT_legacy_params_t parameters); + + +/* Deprecation warnings */ +/* It is generally possible to disable deprecation warnings from compiler, + for example with -Wno-deprecated-declarations for gcc + or _CRT_SECURE_NO_WARNINGS in Visual. + Otherwise, it's also possible to manually define ZDICT_DISABLE_DEPRECATE_WARNINGS */ +#ifdef ZDICT_DISABLE_DEPRECATE_WARNINGS +# define ZDICT_DEPRECATED(message) /* disable deprecation warnings */ +#else +# define ZDICT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ +# define ZDICT_DEPRECATED(message) [[deprecated(message)]] +# elif defined(__clang__) || (ZDICT_GCC_VERSION >= 405) +# define ZDICT_DEPRECATED(message) __attribute__((deprecated(message))) +# elif (ZDICT_GCC_VERSION >= 301) +# define ZDICT_DEPRECATED(message) __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define ZDICT_DEPRECATED(message) __declspec(deprecated(message)) +# else +# pragma message("WARNING: You need to implement ZDICT_DEPRECATED for this compiler") +# define ZDICT_DEPRECATED(message) +# endif +#endif /* ZDICT_DISABLE_DEPRECATE_WARNINGS */ + +ZDICT_DEPRECATED("use ZDICT_finalizeDictionary() instead") +ZDICTLIB_STATIC_API +size_t ZDICT_addEntropyTablesFromBuffer(void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity, + const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples); + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_ZDICT_H_STATIC */ diff --git a/board/mentalnet/overlay/usr/include/zlib.h b/board/mentalnet/overlay/usr/include/zlib.h new file mode 100644 index 0000000..a57d336 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/zlib.h @@ -0,0 +1,2057 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.3.2, February 17th, 2026 + + Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 at https://datatracker.ietf.org/doc/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#ifdef ZLIB_BUILD +# include +#else +# include "zconf.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.3.2" +#define ZLIB_VERNUM 0x1320 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 3 +#define ZLIB_VER_REVISION 2 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip and raw deflate streams in + memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in the case of corrupted input. +*/ + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use by the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion(void); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. total_in, total_out, adler, and msg are initialized. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary. Some output may be provided even if + flush is zero. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more output + in that case. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed + codes block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the input taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed Adler-32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. +*/ + + +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); + + This is another version of deflateInit with more compression options. The + fields zalloc, zfree and opaque must be initialized before by the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_RLE to limit match distances to one (run-length + encoding), or Z_HUFFMAN_ONLY to force Huffman encoding only (no string + matching). Filtered data consists mostly of small values with a somewhat + random distribution, as produced by the PNG filters. In this case, the + compression algorithm is tuned to compress them better. The effect of + Z_FILTERED is to force more Huffman coding and less string matching than the + default; it is intermediate between Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. + Z_RLE is almost as fast as Z_HUFFMAN_ONLY, but should give better + compression for PNG image data than Huffman only. The degree of string + matching from most to none is: Z_DEFAULT_STRATEGY, Z_FILTERED, Z_RLE, then + Z_HUFFMAN_ONLY. The strategy parameter affects the compression ratio but + never the correctness of the compressed output, even if it is not set + optimally for the given data. Z_FIXED uses the default string matching, but + prevents the use of dynamic Huffman codes, allowing for a simpler decoder + for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the Adler-32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler-32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + Adler-32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); +/* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. total_in, total_out, adler, and msg are initialized. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. +*/ + +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen); +ZEXTERN z_size_t ZEXPORT deflateBound_z(z_streamp strm, z_size_t sourceLen); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. + + delfateBound_z() is the same, but takes and returns a size_t length. Note + that a long is 32 bits on Windows. +*/ + +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. If an int is 16 bits and memLevel is 9, then + it is possible for the number of pending bytes to not fit in an unsigned. In + that case Z_BUF_ERROR is returned and *pending is set to the maximum value + of an unsigned. + */ + +ZEXTERN int ZEXPORT deflateUsed(z_streamp strm, + int *bits); +/* + deflateUsed() returns in *bits the most recent number of deflate bits used + in the last byte when flushing to a byte boundary. The result is in 1..8, or + 0 if there has not yet been a flush. This helps determine the location of + the last bit of a deflate stream. + + deflateUsed returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an Adler-32 or a CRC-32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler-32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); +/* + This function inserts bits in the inflate input stream. The intent is to + use inflatePrime() to start inflating at a bit position in the middle of a + byte. The provided bits will be used before any bytes are used from + next_in. This function should be used with raw inflate, before the first + inflate() call, after inflateInit2() or inflateReset(). It can also be used + after an inflate() return indicates the end of a deflate block or header + when using Z_BLOCK. bits must be less than or equal to 16, and that many of + the least significant bits of value will be inserted in the input. The + other bits in value can be non-zero, and will be ignored. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent, or if bits is out of range. If inflate was + in the middle of processing a header, trailer, or stored block lengths, then + it is possible for there to be only eight bits available in the bit buffer. + In that case, bits > 8 is considered out of range. However, when used as + outlined above, there will always be 16 bits available in the buffer for + insertion. As noted in its documentation above, inflate records the number + of bits in the bit buffer on return in data_type. 32 minus that is the + number of bits available for insertion. inflatePrime does not update + data_type with the new number of bits in buffer. +*/ + +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) The extra, name, and comment pointers + much each be either Z_NULL or point to space to store that information from + the header. If extra is not Z_NULL, then extra_max contains the maximum + number of bytes that can be written to extra. Once done is true, extra_len + contains the actual extra field length, and extra contains the extra field, + or that field truncated if extra_max is less than extra_len. If name is not + Z_NULL, then up to name_max characters, including the terminating zero, are + written there. If comment is not Z_NULL, then up to comm_max characters, + including the terminating zero, are written there. The application can tell + that the name or comment did not fit in the provided space by the absence of + a terminating zero. If any of extra, name, or comment are not present in + the header, then that field's pointer is set to Z_NULL. This allows the use + of deflateSetHeader() with the returned structure to duplicate the header. + Note that if those fields initially pointed to allocated memory, then the + application will need to save them elsewhere so that they can be eventually + freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); + +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: ZLIB_DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (all zeros is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() is not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + 27: 0 = gzprintf() present, 1 = not -- 1 means gzprintf() returns an error + + Remainder: + 28-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. The _z versions of the functions use the size_t + type for lengths. Note that a long is 32 bits on Windows. +*/ + +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); +ZEXTERN int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen, + int level); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); +ZEXTERN z_size_t ZEXPORT compressBound_z(z_size_t sourceLen); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t sourceLen); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. On entry, *destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) On exit, *destLen + is the actual size of the uncompressed data. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); +ZEXTERN int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen, + const Bytef *source, z_size_t *sourceLen); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); + + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. 'T' cannot be + used to force transparent reading. Transparent reading is automatically + performed if there is no gzip header at the start. Transparent reading can + be disabled with the 'G' option, which will instead return an error if there + is no gzip header. 'N' will open the file in non-blocking mode. + + 'a' can be used instead of 'w' to request that the gzip stream that will + be written be appended to the file. '+' will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + 'x' when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of 'e' when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. Note that if 'N' is in mode for non-blocking, the + open() itself can fail in order to not block. In that case gzopen() will + return NULL and errno will be EAGAIN or ENONBLOCK. The call to gzopen() can + then be re-tried. If the application would like to block on opening the + file, then it can use open() without O_NONBLOCK, and then gzdopen() with the + resulting file descriptor and 'N' in the mode, which will set it to non- + blocking. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); +/* + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. An + 'e' in mode will set fd's flag to close the file on an execve() call. An 'N' + in mode will set fd's non-blocking flag. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); +/* + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); +/* + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); +/* + Read and decompress up to len uncompressed bytes from file into buf. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread can be used to read a gzip file on a non-blocking device. If the + input stalls and there is no uncompressed data to return, then gzread() will + return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be + called again. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. If some data was read before an error, then that data is + returned until exhausted, after which the next call will signal the error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); +/* + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevertheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as that of fread() implementations in common libraries. This + could result in data loss if used with size != 1 when reading a concurrently + written file or a non-blocking file. In that case, use size == 1 or gzread() + instead. +*/ + +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); +/* + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written, or 0 in case of error or + if len is 0. If the write destination is non-blocking, then gzwrite() may + return a number of bytes written that is not 0 and less than len. + + If len does not fit in an int, then 0 is returned and nothing is written. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); +/* + Compress and write nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. + + If writing a concurrently read file or a non-blocking file with size != 1, + a partial item could be written, with no way of knowing how much of it was + not written, resulting in data loss. In that case, use size == 1 or + gzwrite() instead. +*/ + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); +#else +ZEXTERN int ZEXPORTVA gzprintf(); +#endif +/* + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. + + In that last case, there may also be a buffer overflow with unpredictable + consequences, which is possible only if zlib was compiled with the insecure + functions sprintf() or vsprintf(), because the secure snprintf() and + vsnprintf() functions were not available. That would only be the case for + a non-ANSI C compiler. zlib may have been built without gzprintf() because + secure functions were not available and having gzprintf() be insecure was + not an option, in which case, gzprintf() returns Z_STREAM_ERROR. All of + these possibilities can be determined using zlibCompileFlags(). + + If a Z_BUF_ERROR is returned, then nothing was written due to a stall on + the non-blocking write destination. +*/ + +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); +/* + Compress and write the given null-terminated string s to file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. + The number of characters written may be less than the length of the string + if the write destination is non-blocking. + + If the length of the string does not fit in an int, then -1 is returned + and nothing is written. +*/ + +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); +/* + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If some data was read before an error, + then that data is returned until exhausted, after which the next call will + return NULL to signal the error. + + gzgets can be used on a file being concurrently written, and on a non- + blocking device, both as for gzread(). However lines may be broken in the + middle, leaving it up to the application to reassemble them as needed. +*/ + +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); +/* + Compress and write c, converted to an unsigned char, into file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc(gzFile file); +/* + Read and decompress one byte from file. gzgetc returns this byte or -1 in + case of end of file or error. If some data was read before an error, then + that data is returned until exhausted, after which the next call will return + -1 to signal the error. + + This is implemented as a macro for speed. As such, it does not do all of + the checking the other functions do. I.e. it does not check to see if file + is NULL, nor whether the structure file points to has been clobbered or not. + + gzgetc can be used to read a gzip file on a non-blocking device. If the + input stalls and there is no uncompressed data to return, then gzgetc() will + return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be + called again. +*/ + +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); +/* + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). + + gzungetc(-1, file) will force any pending seek to execute. Then gztell() + will report the position, even if the requested seek reached end of file. + This can be used to determine the number of uncompressed bytes in a gzip + file without having to read it into a buffer. +*/ + +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); +/* + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); + + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. For reading or writing, any actual seeking is deferred + until the next read or write operation, or close operation when writing. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind(gzFile file); +/* + Rewind file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); + + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); + + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof(gzFile file); +/* + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect(gzFile file); +/* + Return true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). If the input is being written concurrently or the device is non- + blocking, then gzdirect() may give a different answer once four bytes of + input have been accumulated, which is what is needed to confirm or deny a + gzip header. Before this, gzdirect() will return true (1). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose(gzFile file); +/* + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); +/* + Return the error message for the last error which occurred on file. + If errnum is not NULL, *errnum is set to zlib error number. If an error + occurred in the file system and not in the compression library, *errnum is + set to Z_ERRNO and the application may consult errno to get the exact error + code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr(gzFile file); +/* + Clear the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); +/* + Same as adler32(), but with a size_t length. Note that a long is 32 bits + on Windows. +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); +/* + Same as crc32(), but with a size_t length. Note that a long is 32 bits on + Windows. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. len2 must be non-negative, otherwise zero is returned. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). len2 must be non-negative, otherwise zero is returned. +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/board/mentalnet/overlay/usr/include/zstd.h b/board/mentalnet/overlay/usr/include/zstd.h new file mode 100644 index 0000000..b8c0644 --- /dev/null +++ b/board/mentalnet/overlay/usr/include/zstd.h @@ -0,0 +1,3198 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_H_235446 +#define ZSTD_H_235446 + + +/* ====== Dependencies ======*/ +#include /* size_t */ + +#include "zstd_errors.h" /* list of errors */ +#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY) +#include /* INT_MAX */ +#endif /* ZSTD_STATIC_LINKING_ONLY */ + +#if defined (__cplusplus) +extern "C" { +#endif + +/* ===== ZSTDLIB_API : control library symbols visibility ===== */ +#ifndef ZSTDLIB_VISIBLE + /* Backwards compatibility with old macro name */ +# ifdef ZSTDLIB_VISIBILITY +# define ZSTDLIB_VISIBLE ZSTDLIB_VISIBILITY +# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDLIB_VISIBLE __attribute__ ((visibility ("default"))) +# else +# define ZSTDLIB_VISIBLE +# endif +#endif + +#ifndef ZSTDLIB_HIDDEN +# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDLIB_HIDDEN __attribute__ ((visibility ("hidden"))) +# else +# define ZSTDLIB_HIDDEN +# endif +#endif + +#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBLE +#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZSTDLIB_API __declspec(dllimport) ZSTDLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#else +# define ZSTDLIB_API ZSTDLIB_VISIBLE +#endif + +/* Deprecation warnings : + * Should these warnings be a problem, it is generally possible to disable them, + * typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual. + * Otherwise, it's also possible to define ZSTD_DISABLE_DEPRECATE_WARNINGS. + */ +#ifdef ZSTD_DISABLE_DEPRECATE_WARNINGS +# define ZSTD_DEPRECATED(message) /* disable deprecation warnings */ +#else +# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ +# define ZSTD_DEPRECATED(message) [[deprecated(message)]] +# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__) || defined(__IAR_SYSTEMS_ICC__) +# define ZSTD_DEPRECATED(message) __attribute__((deprecated(message))) +# elif defined(__GNUC__) && (__GNUC__ >= 3) +# define ZSTD_DEPRECATED(message) __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define ZSTD_DEPRECATED(message) __declspec(deprecated(message)) +# else +# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler") +# define ZSTD_DEPRECATED(message) +# endif +#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */ + + +/******************************************************************************* + Introduction + + zstd, short for Zstandard, is a fast lossless compression algorithm, targeting + real-time compression scenarios at zlib-level and better compression ratios. + The zstd compression library provides in-memory compression and decompression + functions. + + The library supports regular compression levels from 1 up to ZSTD_maxCLevel(), + which is currently 22. Levels >= 20, labeled `--ultra`, should be used with + caution, as they require more memory. The library also offers negative + compression levels, which extend the range of speed vs. ratio preferences. + The lower the level, the faster the speed (at the cost of compression). + + Compression can be done in: + - a single step (described as Simple API) + - a single step, reusing a context (described as Explicit context) + - unbounded multiple steps (described as Streaming compression) + + The compression ratio achievable on small data can be highly improved using + a dictionary. Dictionary compression can be performed in: + - a single step (described as Simple dictionary API) + - a single step, reusing a dictionary (described as Bulk-processing + dictionary API) + + Advanced experimental functions can be accessed using + `#define ZSTD_STATIC_LINKING_ONLY` before including zstd.h. + + Advanced experimental APIs should never be used with a dynamically-linked + library. They are not "stable"; their definitions or signatures may change in + the future. Only static linking is allowed. +*******************************************************************************/ + +/*------ Version ------*/ +#define ZSTD_VERSION_MAJOR 1 +#define ZSTD_VERSION_MINOR 5 +#define ZSTD_VERSION_RELEASE 7 +#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE) + +/*! ZSTD_versionNumber() : + * Return runtime library version, the value is (MAJOR*100*100 + MINOR*100 + RELEASE). */ +ZSTDLIB_API unsigned ZSTD_versionNumber(void); + +#define ZSTD_LIB_VERSION ZSTD_VERSION_MAJOR.ZSTD_VERSION_MINOR.ZSTD_VERSION_RELEASE +#define ZSTD_QUOTE(str) #str +#define ZSTD_EXPAND_AND_QUOTE(str) ZSTD_QUOTE(str) +#define ZSTD_VERSION_STRING ZSTD_EXPAND_AND_QUOTE(ZSTD_LIB_VERSION) + +/*! ZSTD_versionString() : + * Return runtime library version, like "1.4.5". Requires v1.3.0+. */ +ZSTDLIB_API const char* ZSTD_versionString(void); + +/* ************************************* + * Default constant + ***************************************/ +#ifndef ZSTD_CLEVEL_DEFAULT +# define ZSTD_CLEVEL_DEFAULT 3 +#endif + +/* ************************************* + * Constants + ***************************************/ + +/* All magic numbers are supposed read/written to/from files/memory using little-endian convention */ +#define ZSTD_MAGICNUMBER 0xFD2FB528 /* valid since v0.8.0 */ +#define ZSTD_MAGIC_DICTIONARY 0xEC30A437 /* valid since v0.7.0 */ +#define ZSTD_MAGIC_SKIPPABLE_START 0x184D2A50 /* all 16 values, from 0x184D2A50 to 0x184D2A5F, signal the beginning of a skippable frame */ +#define ZSTD_MAGIC_SKIPPABLE_MASK 0xFFFFFFF0 + +#define ZSTD_BLOCKSIZELOG_MAX 17 +#define ZSTD_BLOCKSIZE_MAX (1<= ZSTD_compressBound(srcSize)` guarantees that zstd will have + * enough space to successfully compress the data. + * @return : compressed size written into `dst` (<= `dstCapacity), + * or an error code if it fails (which can be tested using ZSTD_isError()). */ +ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + int compressionLevel); + +/*! ZSTD_decompress() : + * `compressedSize` : must be the _exact_ size of some number of compressed and/or skippable frames. + * Multiple compressed frames can be decompressed at once with this method. + * The result will be the concatenation of all decompressed frames, back to back. + * `dstCapacity` is an upper bound of originalSize to regenerate. + * First frame's decompressed size can be extracted using ZSTD_getFrameContentSize(). + * If maximum upper bound isn't known, prefer using streaming mode to decompress data. + * @return : the number of bytes decompressed into `dst` (<= `dstCapacity`), + * or an errorCode if it fails (which can be tested using ZSTD_isError()). */ +ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity, + const void* src, size_t compressedSize); + + +/*====== Decompression helper functions ======*/ + +/*! ZSTD_getFrameContentSize() : requires v1.3.0+ + * `src` should point to the start of a ZSTD encoded frame. + * `srcSize` must be at least as large as the frame header. + * hint : any size >= `ZSTD_frameHeaderSize_max` is large enough. + * @return : - decompressed size of `src` frame content, if known + * - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined + * - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) + * note 1 : a 0 return value means the frame is valid but "empty". + * When invoking this method on a skippable frame, it will return 0. + * note 2 : decompressed size is an optional field, it may not be present (typically in streaming mode). + * When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. + * In which case, it's necessary to use streaming mode to decompress data. + * Optionally, application can rely on some implicit limit, + * as ZSTD_decompress() only needs an upper bound of decompressed size. + * (For example, data could be necessarily cut into blocks <= 16 KB). + * note 3 : decompressed size is always present when compression is completed using single-pass functions, + * such as ZSTD_compress(), ZSTD_compressCCtx() ZSTD_compress_usingDict() or ZSTD_compress_usingCDict(). + * note 4 : decompressed size can be very large (64-bits value), + * potentially larger than what local system can handle as a single memory segment. + * In which case, it's necessary to use streaming mode to decompress data. + * note 5 : If source is untrusted, decompressed size could be wrong or intentionally modified. + * Always ensure return value fits within application's authorized limits. + * Each application can set its own limits. + * note 6 : This function replaces ZSTD_getDecompressedSize() */ +#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1) +#define ZSTD_CONTENTSIZE_ERROR (0ULL - 2) +ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize); + +/*! ZSTD_getDecompressedSize() (obsolete): + * This function is now obsolete, in favor of ZSTD_getFrameContentSize(). + * Both functions work the same way, but ZSTD_getDecompressedSize() blends + * "empty", "unknown" and "error" results to the same return value (0), + * while ZSTD_getFrameContentSize() gives them separate return values. + * @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */ +ZSTD_DEPRECATED("Replaced by ZSTD_getFrameContentSize") +ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); + +/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+ + * `src` should point to the start of a ZSTD frame or skippable frame. + * `srcSize` must be >= first frame size + * @return : the compressed size of the first frame starting at `src`, + * suitable to pass as `srcSize` to `ZSTD_decompress` or similar, + * or an error code if input is invalid + * Note 1: this method is called _find*() because it's not enough to read the header, + * it may have to scan through the frame's content, to reach its end. + * Note 2: this method also works with Skippable Frames. In which case, + * it returns the size of the complete skippable frame, + * which is always equal to its content size + 8 bytes for headers. */ +ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize); + + +/*====== Compression helper functions ======*/ + +/*! ZSTD_compressBound() : + * maximum compressed size in worst case single-pass scenario. + * When invoking `ZSTD_compress()`, or any other one-pass compression function, + * it's recommended to provide @dstCapacity >= ZSTD_compressBound(srcSize) + * as it eliminates one potential failure scenario, + * aka not enough room in dst buffer to write the compressed frame. + * Note : ZSTD_compressBound() itself can fail, if @srcSize >= ZSTD_MAX_INPUT_SIZE . + * In which case, ZSTD_compressBound() will return an error code + * which can be tested using ZSTD_isError(). + * + * ZSTD_COMPRESSBOUND() : + * same as ZSTD_compressBound(), but as a macro. + * It can be used to produce constants, which can be useful for static allocation, + * for example to size a static array on stack. + * Will produce constant value 0 if srcSize is too large. + */ +#define ZSTD_MAX_INPUT_SIZE ((sizeof(size_t)==8) ? 0xFF00FF00FF00FF00ULL : 0xFF00FF00U) +#define ZSTD_COMPRESSBOUND(srcSize) (((size_t)(srcSize) >= ZSTD_MAX_INPUT_SIZE) ? 0 : (srcSize) + ((srcSize)>>8) + (((srcSize) < (128<<10)) ? (((128<<10) - (srcSize)) >> 11) /* margin, from 64 to 0 */ : 0)) /* this formula ensures that bound(A) + bound(B) <= bound(A+B) as long as A and B >= 128 KB */ +ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */ + + +/*====== Error helper functions ======*/ +/* ZSTD_isError() : + * Most ZSTD_* functions returning a size_t value can be tested for error, + * using ZSTD_isError(). + * @return 1 if error, 0 otherwise + */ +ZSTDLIB_API unsigned ZSTD_isError(size_t result); /*!< tells if a `size_t` function result is an error code */ +ZSTDLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult); /* convert a result into an error code, which can be compared to error enum list */ +ZSTDLIB_API const char* ZSTD_getErrorName(size_t result); /*!< provides readable string from a function result */ +ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */ +ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */ +ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */ + + +/*************************************** +* Explicit context +***************************************/ +/*= Compression context + * When compressing many times, + * it is recommended to allocate a compression context just once, + * and reuse it for each successive compression operation. + * This will make the workload easier for system's memory. + * Note : re-using context is just a speed / resource optimization. + * It doesn't change the compression ratio, which remains identical. + * Note 2: For parallel execution in multi-threaded environments, + * use one different context per thread . + */ +typedef struct ZSTD_CCtx_s ZSTD_CCtx; +ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void); +ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* compatible with NULL pointer */ + +/*! ZSTD_compressCCtx() : + * Same as ZSTD_compress(), using an explicit ZSTD_CCtx. + * Important : in order to mirror `ZSTD_compress()` behavior, + * this function compresses at the requested compression level, + * __ignoring any other advanced parameter__ . + * If any advanced parameter was set using the advanced API, + * they will all be reset. Only @compressionLevel remains. + */ +ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + int compressionLevel); + +/*= Decompression context + * When decompressing many times, + * it is recommended to allocate a context only once, + * and reuse it for each successive compression operation. + * This will make workload friendlier for system's memory. + * Use one context per thread for parallel execution. */ +typedef struct ZSTD_DCtx_s ZSTD_DCtx; +ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void); +ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer */ + +/*! ZSTD_decompressDCtx() : + * Same as ZSTD_decompress(), + * requires an allocated ZSTD_DCtx. + * Compatible with sticky parameters (see below). + */ +ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize); + + +/********************************************* +* Advanced compression API (Requires v1.4.0+) +**********************************************/ + +/* API design : + * Parameters are pushed one by one into an existing context, + * using ZSTD_CCtx_set*() functions. + * Pushed parameters are sticky : they are valid for next compressed frame, and any subsequent frame. + * "sticky" parameters are applicable to `ZSTD_compress2()` and `ZSTD_compressStream*()` ! + * __They do not apply to one-shot variants such as ZSTD_compressCCtx()__ . + * + * It's possible to reset all parameters to "default" using ZSTD_CCtx_reset(). + * + * This API supersedes all other "advanced" API entry points in the experimental section. + * In the future, we expect to remove API entry points from experimental which are redundant with this API. + */ + + +/* Compression strategies, listed from fastest to strongest */ +typedef enum { ZSTD_fast=1, + ZSTD_dfast=2, + ZSTD_greedy=3, + ZSTD_lazy=4, + ZSTD_lazy2=5, + ZSTD_btlazy2=6, + ZSTD_btopt=7, + ZSTD_btultra=8, + ZSTD_btultra2=9 + /* note : new strategies _might_ be added in the future. + Only the order (from fast to strong) is guaranteed */ +} ZSTD_strategy; + +typedef enum { + + /* compression parameters + * Note: When compressing with a ZSTD_CDict these parameters are superseded + * by the parameters used to construct the ZSTD_CDict. + * See ZSTD_CCtx_refCDict() for more info (superseded-by-cdict). */ + ZSTD_c_compressionLevel=100, /* Set compression parameters according to pre-defined cLevel table. + * Note that exact compression parameters are dynamically determined, + * depending on both compression level and srcSize (when known). + * Default level is ZSTD_CLEVEL_DEFAULT==3. + * Special: value 0 means default, which is controlled by ZSTD_CLEVEL_DEFAULT. + * Note 1 : it's possible to pass a negative compression level. + * Note 2 : setting a level does not automatically set all other compression parameters + * to default. Setting this will however eventually dynamically impact the compression + * parameters which have not been manually set. The manually set + * ones will 'stick'. */ + /* Advanced compression parameters : + * It's possible to pin down compression parameters to some specific values. + * In which case, these values are no longer dynamically selected by the compressor */ + ZSTD_c_windowLog=101, /* Maximum allowed back-reference distance, expressed as power of 2. + * This will set a memory budget for streaming decompression, + * with larger values requiring more memory + * and typically compressing more. + * Must be clamped between ZSTD_WINDOWLOG_MIN and ZSTD_WINDOWLOG_MAX. + * Special: value 0 means "use default windowLog". + * Note: Using a windowLog greater than ZSTD_WINDOWLOG_LIMIT_DEFAULT + * requires explicitly allowing such size at streaming decompression stage. */ + ZSTD_c_hashLog=102, /* Size of the initial probe table, as a power of 2. + * Resulting memory usage is (1 << (hashLog+2)). + * Must be clamped between ZSTD_HASHLOG_MIN and ZSTD_HASHLOG_MAX. + * Larger tables improve compression ratio of strategies <= dFast, + * and improve speed of strategies > dFast. + * Special: value 0 means "use default hashLog". */ + ZSTD_c_chainLog=103, /* Size of the multi-probe search table, as a power of 2. + * Resulting memory usage is (1 << (chainLog+2)). + * Must be clamped between ZSTD_CHAINLOG_MIN and ZSTD_CHAINLOG_MAX. + * Larger tables result in better and slower compression. + * This parameter is useless for "fast" strategy. + * It's still useful when using "dfast" strategy, + * in which case it defines a secondary probe table. + * Special: value 0 means "use default chainLog". */ + ZSTD_c_searchLog=104, /* Number of search attempts, as a power of 2. + * More attempts result in better and slower compression. + * This parameter is useless for "fast" and "dFast" strategies. + * Special: value 0 means "use default searchLog". */ + ZSTD_c_minMatch=105, /* Minimum size of searched matches. + * Note that Zstandard can still find matches of smaller size, + * it just tweaks its search algorithm to look for this size and larger. + * Larger values increase compression and decompression speed, but decrease ratio. + * Must be clamped between ZSTD_MINMATCH_MIN and ZSTD_MINMATCH_MAX. + * Note that currently, for all strategies < btopt, effective minimum is 4. + * , for all strategies > fast, effective maximum is 6. + * Special: value 0 means "use default minMatchLength". */ + ZSTD_c_targetLength=106, /* Impact of this field depends on strategy. + * For strategies btopt, btultra & btultra2: + * Length of Match considered "good enough" to stop search. + * Larger values make compression stronger, and slower. + * For strategy fast: + * Distance between match sampling. + * Larger values make compression faster, and weaker. + * Special: value 0 means "use default targetLength". */ + ZSTD_c_strategy=107, /* See ZSTD_strategy enum definition. + * The higher the value of selected strategy, the more complex it is, + * resulting in stronger and slower compression. + * Special: value 0 means "use default strategy". */ + + ZSTD_c_targetCBlockSize=130, /* v1.5.6+ + * Attempts to fit compressed block size into approximately targetCBlockSize. + * Bound by ZSTD_TARGETCBLOCKSIZE_MIN and ZSTD_TARGETCBLOCKSIZE_MAX. + * Note that it's not a guarantee, just a convergence target (default:0). + * No target when targetCBlockSize == 0. + * This is helpful in low bandwidth streaming environments to improve end-to-end latency, + * when a client can make use of partial documents (a prominent example being Chrome). + * Note: this parameter is stable since v1.5.6. + * It was present as an experimental parameter in earlier versions, + * but it's not recommended using it with earlier library versions + * due to massive performance regressions. + */ + /* LDM mode parameters */ + ZSTD_c_enableLongDistanceMatching=160, /* Enable long distance matching. + * This parameter is designed to improve compression ratio + * for large inputs, by finding large matches at long distance. + * It increases memory usage and window size. + * Note: enabling this parameter increases default ZSTD_c_windowLog to 128 MB + * except when expressly set to a different value. + * Note: will be enabled by default if ZSTD_c_windowLog >= 128 MB and + * compression strategy >= ZSTD_btopt (== compression level 16+) */ + ZSTD_c_ldmHashLog=161, /* Size of the table for long distance matching, as a power of 2. + * Larger values increase memory usage and compression ratio, + * but decrease compression speed. + * Must be clamped between ZSTD_HASHLOG_MIN and ZSTD_HASHLOG_MAX + * default: windowlog - 7. + * Special: value 0 means "automatically determine hashlog". */ + ZSTD_c_ldmMinMatch=162, /* Minimum match size for long distance matcher. + * Larger/too small values usually decrease compression ratio. + * Must be clamped between ZSTD_LDM_MINMATCH_MIN and ZSTD_LDM_MINMATCH_MAX. + * Special: value 0 means "use default value" (default: 64). */ + ZSTD_c_ldmBucketSizeLog=163, /* Log size of each bucket in the LDM hash table for collision resolution. + * Larger values improve collision resolution but decrease compression speed. + * The maximum value is ZSTD_LDM_BUCKETSIZELOG_MAX. + * Special: value 0 means "use default value" (default: 3). */ + ZSTD_c_ldmHashRateLog=164, /* Frequency of inserting/looking up entries into the LDM hash table. + * Must be clamped between 0 and (ZSTD_WINDOWLOG_MAX - ZSTD_HASHLOG_MIN). + * Default is MAX(0, (windowLog - ldmHashLog)), optimizing hash table usage. + * Larger values improve compression speed. + * Deviating far from default value will likely result in a compression ratio decrease. + * Special: value 0 means "automatically determine hashRateLog". */ + + /* frame parameters */ + ZSTD_c_contentSizeFlag=200, /* Content size will be written into frame header _whenever known_ (default:1) + * Content size must be known at the beginning of compression. + * This is automatically the case when using ZSTD_compress2(), + * For streaming scenarios, content size must be provided with ZSTD_CCtx_setPledgedSrcSize() */ + ZSTD_c_checksumFlag=201, /* A 32-bits checksum of content is written at end of frame (default:0) */ + ZSTD_c_dictIDFlag=202, /* When applicable, dictionary's ID is written into frame header (default:1) */ + + /* multi-threading parameters */ + /* These parameters are only active if multi-threading is enabled (compiled with build macro ZSTD_MULTITHREAD). + * Otherwise, trying to set any other value than default (0) will be a no-op and return an error. + * In a situation where it's unknown if the linked library supports multi-threading or not, + * setting ZSTD_c_nbWorkers to any value >= 1 and consulting the return value provides a quick way to check this property. + */ + ZSTD_c_nbWorkers=400, /* Select how many threads will be spawned to compress in parallel. + * When nbWorkers >= 1, triggers asynchronous mode when invoking ZSTD_compressStream*() : + * ZSTD_compressStream*() consumes input and flush output if possible, but immediately gives back control to caller, + * while compression is performed in parallel, within worker thread(s). + * (note : a strong exception to this rule is when first invocation of ZSTD_compressStream2() sets ZSTD_e_end : + * in which case, ZSTD_compressStream2() delegates to ZSTD_compress2(), which is always a blocking call). + * More workers improve speed, but also increase memory usage. + * Default value is `0`, aka "single-threaded mode" : no worker is spawned, + * compression is performed inside Caller's thread, and all invocations are blocking */ + ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1. + * Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads. + * 0 means default, which is dynamically determined based on compression parameters. + * Job size must be a minimum of overlap size, or ZSTDMT_JOBSIZE_MIN (= 512 KB), whichever is largest. + * The minimum size is automatically and transparently enforced. */ + ZSTD_c_overlapLog=402, /* Control the overlap size, as a fraction of window size. + * The overlap size is an amount of data reloaded from previous job at the beginning of a new job. + * It helps preserve compression ratio, while each job is compressed in parallel. + * This value is enforced only when nbWorkers >= 1. + * Larger values increase compression ratio, but decrease speed. + * Possible values range from 0 to 9 : + * - 0 means "default" : value will be determined by the library, depending on strategy + * - 1 means "no overlap" + * - 9 means "full overlap", using a full window size. + * Each intermediate rank increases/decreases load size by a factor 2 : + * 9: full window; 8: w/2; 7: w/4; 6: w/8; 5:w/16; 4: w/32; 3:w/64; 2:w/128; 1:no overlap; 0:default + * default value varies between 6 and 9, depending on strategy */ + + /* note : additional experimental parameters are also available + * within the experimental section of the API. + * At the time of this writing, they include : + * ZSTD_c_rsyncable + * ZSTD_c_format + * ZSTD_c_forceMaxWindow + * ZSTD_c_forceAttachDict + * ZSTD_c_literalCompressionMode + * ZSTD_c_srcSizeHint + * ZSTD_c_enableDedicatedDictSearch + * ZSTD_c_stableInBuffer + * ZSTD_c_stableOutBuffer + * ZSTD_c_blockDelimiters + * ZSTD_c_validateSequences + * ZSTD_c_blockSplitterLevel + * ZSTD_c_splitAfterSequences + * ZSTD_c_useRowMatchFinder + * ZSTD_c_prefetchCDictTables + * ZSTD_c_enableSeqProducerFallback + * ZSTD_c_maxBlockSize + * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. + * note : never ever use experimentalParam? names directly; + * also, the enums values themselves are unstable and can still change. + */ + ZSTD_c_experimentalParam1=500, + ZSTD_c_experimentalParam2=10, + ZSTD_c_experimentalParam3=1000, + ZSTD_c_experimentalParam4=1001, + ZSTD_c_experimentalParam5=1002, + /* was ZSTD_c_experimentalParam6=1003; is now ZSTD_c_targetCBlockSize */ + ZSTD_c_experimentalParam7=1004, + ZSTD_c_experimentalParam8=1005, + ZSTD_c_experimentalParam9=1006, + ZSTD_c_experimentalParam10=1007, + ZSTD_c_experimentalParam11=1008, + ZSTD_c_experimentalParam12=1009, + ZSTD_c_experimentalParam13=1010, + ZSTD_c_experimentalParam14=1011, + ZSTD_c_experimentalParam15=1012, + ZSTD_c_experimentalParam16=1013, + ZSTD_c_experimentalParam17=1014, + ZSTD_c_experimentalParam18=1015, + ZSTD_c_experimentalParam19=1016, + ZSTD_c_experimentalParam20=1017 +} ZSTD_cParameter; + +typedef struct { + size_t error; + int lowerBound; + int upperBound; +} ZSTD_bounds; + +/*! ZSTD_cParam_getBounds() : + * All parameters must belong to an interval with lower and upper bounds, + * otherwise they will either trigger an error or be automatically clamped. + * @return : a structure, ZSTD_bounds, which contains + * - an error status field, which must be tested using ZSTD_isError() + * - lower and upper bounds, both inclusive + */ +ZSTDLIB_API ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam); + +/*! ZSTD_CCtx_setParameter() : + * Set one compression parameter, selected by enum ZSTD_cParameter. + * All parameters have valid bounds. Bounds can be queried using ZSTD_cParam_getBounds(). + * Providing a value beyond bound will either clamp it, or trigger an error (depending on parameter). + * Setting a parameter is generally only possible during frame initialization (before starting compression). + * Exception : when using multi-threading mode (nbWorkers >= 1), + * the following parameters can be updated _during_ compression (within same frame): + * => compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy. + * new parameters will be active for next job only (after a flush()). + * @return : an error code (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_API size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value); + +/*! ZSTD_CCtx_setPledgedSrcSize() : + * Total input data size to be compressed as a single frame. + * Value will be written in frame header, unless if explicitly forbidden using ZSTD_c_contentSizeFlag. + * This value will also be controlled at end of frame, and trigger an error if not respected. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Note 1 : pledgedSrcSize==0 actually means zero, aka an empty frame. + * In order to mean "unknown content size", pass constant ZSTD_CONTENTSIZE_UNKNOWN. + * ZSTD_CONTENTSIZE_UNKNOWN is default value for any new frame. + * Note 2 : pledgedSrcSize is only valid once, for the next frame. + * It's discarded at the end of the frame, and replaced by ZSTD_CONTENTSIZE_UNKNOWN. + * Note 3 : Whenever all input data is provided and consumed in a single round, + * for example with ZSTD_compress2(), + * or invoking immediately ZSTD_compressStream2(,,,ZSTD_e_end), + * this value is automatically overridden by srcSize instead. + */ +ZSTDLIB_API size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize); + +typedef enum { + ZSTD_reset_session_only = 1, + ZSTD_reset_parameters = 2, + ZSTD_reset_session_and_parameters = 3 +} ZSTD_ResetDirective; + +/*! ZSTD_CCtx_reset() : + * There are 2 different things that can be reset, independently or jointly : + * - The session : will stop compressing current frame, and make CCtx ready to start a new one. + * Useful after an error, or to interrupt any ongoing compression. + * Any internal data not yet flushed is cancelled. + * Compression parameters and dictionary remain unchanged. + * They will be used to compress next frame. + * Resetting session never fails. + * - The parameters : changes all parameters back to "default". + * This also removes any reference to any dictionary or external sequence producer. + * Parameters can only be changed between 2 sessions (i.e. no compression is currently ongoing) + * otherwise the reset fails, and function returns an error value (which can be tested using ZSTD_isError()) + * - Both : similar to resetting the session, followed by resetting parameters. + */ +ZSTDLIB_API size_t ZSTD_CCtx_reset(ZSTD_CCtx* cctx, ZSTD_ResetDirective reset); + +/*! ZSTD_compress2() : + * Behave the same as ZSTD_compressCCtx(), but compression parameters are set using the advanced API. + * (note that this entry point doesn't even expose a compression level parameter). + * ZSTD_compress2() always starts a new frame. + * Should cctx hold data from a previously unfinished frame, everything about it is forgotten. + * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() + * - The function is always blocking, returns when compression is completed. + * NOTE: Providing `dstCapacity >= ZSTD_compressBound(srcSize)` guarantees that zstd will have + * enough space to successfully compress the data, though it is possible it fails for other reasons. + * @return : compressed size written into `dst` (<= `dstCapacity), + * or an error code if it fails (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize); + + +/*********************************************** +* Advanced decompression API (Requires v1.4.0+) +************************************************/ + +/* The advanced API pushes parameters one by one into an existing DCtx context. + * Parameters are sticky, and remain valid for all following frames + * using the same DCtx context. + * It's possible to reset parameters to default values using ZSTD_DCtx_reset(). + * Note : This API is compatible with existing ZSTD_decompressDCtx() and ZSTD_decompressStream(). + * Therefore, no new decompression function is necessary. + */ + +typedef enum { + + ZSTD_d_windowLogMax=100, /* Select a size limit (in power of 2) beyond which + * the streaming API will refuse to allocate memory buffer + * in order to protect the host from unreasonable memory requirements. + * This parameter is only useful in streaming mode, since no internal buffer is allocated in single-pass mode. + * By default, a decompression context accepts window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT). + * Special: value 0 means "use default maximum windowLog". */ + + /* note : additional experimental parameters are also available + * within the experimental section of the API. + * At the time of this writing, they include : + * ZSTD_d_format + * ZSTD_d_stableOutBuffer + * ZSTD_d_forceIgnoreChecksum + * ZSTD_d_refMultipleDDicts + * ZSTD_d_disableHuffmanAssembly + * ZSTD_d_maxBlockSize + * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. + * note : never ever use experimentalParam? names directly + */ + ZSTD_d_experimentalParam1=1000, + ZSTD_d_experimentalParam2=1001, + ZSTD_d_experimentalParam3=1002, + ZSTD_d_experimentalParam4=1003, + ZSTD_d_experimentalParam5=1004, + ZSTD_d_experimentalParam6=1005 + +} ZSTD_dParameter; + +/*! ZSTD_dParam_getBounds() : + * All parameters must belong to an interval with lower and upper bounds, + * otherwise they will either trigger an error or be automatically clamped. + * @return : a structure, ZSTD_bounds, which contains + * - an error status field, which must be tested using ZSTD_isError() + * - both lower and upper bounds, inclusive + */ +ZSTDLIB_API ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam); + +/*! ZSTD_DCtx_setParameter() : + * Set one compression parameter, selected by enum ZSTD_dParameter. + * All parameters have valid bounds. Bounds can be queried using ZSTD_dParam_getBounds(). + * Providing a value beyond bound will either clamp it, or trigger an error (depending on parameter). + * Setting a parameter is only possible during frame initialization (before starting decompression). + * @return : 0, or an error code (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_API size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int value); + +/*! ZSTD_DCtx_reset() : + * Return a DCtx to clean state. + * Session and parameters can be reset jointly or separately. + * Parameters can only be reset when no active frame is being decompressed. + * @return : 0, or an error code, which can be tested with ZSTD_isError() + */ +ZSTDLIB_API size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset); + + +/**************************** +* Streaming +****************************/ + +typedef struct ZSTD_inBuffer_s { + const void* src; /**< start of input buffer */ + size_t size; /**< size of input buffer */ + size_t pos; /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */ +} ZSTD_inBuffer; + +typedef struct ZSTD_outBuffer_s { + void* dst; /**< start of output buffer */ + size_t size; /**< size of output buffer */ + size_t pos; /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */ +} ZSTD_outBuffer; + + + +/*-*********************************************************************** +* Streaming compression - HowTo +* +* A ZSTD_CStream object is required to track streaming operation. +* Use ZSTD_createCStream() and ZSTD_freeCStream() to create/release resources. +* ZSTD_CStream objects can be reused multiple times on consecutive compression operations. +* It is recommended to reuse ZSTD_CStream since it will play nicer with system's memory, by re-using already allocated memory. +* +* For parallel execution, use one separate ZSTD_CStream per thread. +* +* note : since v1.3.0, ZSTD_CStream and ZSTD_CCtx are the same thing. +* +* Parameters are sticky : when starting a new compression on the same context, +* it will reuse the same sticky parameters as previous compression session. +* When in doubt, it's recommended to fully initialize the context before usage. +* Use ZSTD_CCtx_reset() to reset the context and ZSTD_CCtx_setParameter(), +* ZSTD_CCtx_setPledgedSrcSize(), or ZSTD_CCtx_loadDictionary() and friends to +* set more specific parameters, the pledged source size, or load a dictionary. +* +* Use ZSTD_compressStream2() with ZSTD_e_continue as many times as necessary to +* consume input stream. The function will automatically update both `pos` +* fields within `input` and `output`. +* Note that the function may not consume the entire input, for example, because +* the output buffer is already full, in which case `input.pos < input.size`. +* The caller must check if input has been entirely consumed. +* If not, the caller must make some room to receive more compressed data, +* and then present again remaining input data. +* note: ZSTD_e_continue is guaranteed to make some forward progress when called, +* but doesn't guarantee maximal forward progress. This is especially relevant +* when compressing with multiple threads. The call won't block if it can +* consume some input, but if it can't it will wait for some, but not all, +* output to be flushed. +* @return : provides a minimum amount of data remaining to be flushed from internal buffers +* or an error code, which can be tested using ZSTD_isError(). +* +* At any moment, it's possible to flush whatever data might remain stuck within internal buffer, +* using ZSTD_compressStream2() with ZSTD_e_flush. `output->pos` will be updated. +* Note that, if `output->size` is too small, a single invocation with ZSTD_e_flush might not be enough (return code > 0). +* In which case, make some room to receive more compressed data, and call again ZSTD_compressStream2() with ZSTD_e_flush. +* You must continue calling ZSTD_compressStream2() with ZSTD_e_flush until it returns 0, at which point you can change the +* operation. +* note: ZSTD_e_flush will flush as much output as possible, meaning when compressing with multiple threads, it will +* block until the flush is complete or the output buffer is full. +* @return : 0 if internal buffers are entirely flushed, +* >0 if some data still present within internal buffer (the value is minimal estimation of remaining size), +* or an error code, which can be tested using ZSTD_isError(). +* +* Calling ZSTD_compressStream2() with ZSTD_e_end instructs to finish a frame. +* It will perform a flush and write frame epilogue. +* The epilogue is required for decoders to consider a frame completed. +* flush operation is the same, and follows same rules as calling ZSTD_compressStream2() with ZSTD_e_flush. +* You must continue calling ZSTD_compressStream2() with ZSTD_e_end until it returns 0, at which point you are free to +* start a new frame. +* note: ZSTD_e_end will flush as much output as possible, meaning when compressing with multiple threads, it will +* block until the flush is complete or the output buffer is full. +* @return : 0 if frame fully completed and fully flushed, +* >0 if some data still present within internal buffer (the value is minimal estimation of remaining size), +* or an error code, which can be tested using ZSTD_isError(). +* +* *******************************************************************/ + +typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same object (>= v1.3.0) */ + /* Continue to distinguish them for compatibility with older versions <= v1.2.0 */ +/*===== ZSTD_CStream management functions =====*/ +ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void); +ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */ + +/*===== Streaming compression functions =====*/ +typedef enum { + ZSTD_e_continue=0, /* collect more data, encoder decides when to output compressed result, for optimal compression ratio */ + ZSTD_e_flush=1, /* flush any data provided so far, + * it creates (at least) one new block, that can be decoded immediately on reception; + * frame will continue: any future data can still reference previously compressed data, improving compression. + * note : multithreaded compression will block to flush as much output as possible. */ + ZSTD_e_end=2 /* flush any remaining data _and_ close current frame. + * note that frame is only closed after compressed data is fully flushed (return value == 0). + * After that point, any additional data starts a new frame. + * note : each frame is independent (does not reference any content from previous frame). + : note : multithreaded compression will block to flush as much output as possible. */ +} ZSTD_EndDirective; + +/*! ZSTD_compressStream2() : Requires v1.4.0+ + * Behaves about the same as ZSTD_compressStream, with additional control on end directive. + * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() + * - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode) + * - output->pos must be <= dstCapacity, input->pos must be <= srcSize + * - output->pos and input->pos will be updated. They are guaranteed to remain below their respective limit. + * - endOp must be a valid directive + * - When nbWorkers==0 (default), function is blocking : it completes its job before returning to caller. + * - When nbWorkers>=1, function is non-blocking : it copies a portion of input, distributes jobs to internal worker threads, flush to output whatever is available, + * and then immediately returns, just indicating that there is some data remaining to be flushed. + * The function nonetheless guarantees forward progress : it will return only after it reads or write at least 1+ byte. + * - Exception : if the first call requests a ZSTD_e_end directive and provides enough dstCapacity, the function delegates to ZSTD_compress2() which is always blocking. + * - @return provides a minimum amount of data remaining to be flushed from internal buffers + * or an error code, which can be tested using ZSTD_isError(). + * if @return != 0, flush is not fully completed, there is still some data left within internal buffers. + * This is useful for ZSTD_e_flush, since in this case more flushes are necessary to empty all buffers. + * For ZSTD_e_end, @return == 0 when internal buffers are fully flushed and frame is completed. + * - after a ZSTD_e_end directive, if internal buffer is not fully flushed (@return != 0), + * only ZSTD_e_end or ZSTD_e_flush operations are allowed. + * Before starting a new compression job, or changing compression parameters, + * it is required to fully flush internal buffers. + * - note: if an operation ends with an error, it may leave @cctx in an undefined state. + * Therefore, it's UB to invoke ZSTD_compressStream2() of ZSTD_compressStream() on such a state. + * In order to be re-employed after an error, a state must be reset, + * which can be done explicitly (ZSTD_CCtx_reset()), + * or is sometimes implied by methods starting a new compression job (ZSTD_initCStream(), ZSTD_compressCCtx()) + */ +ZSTDLIB_API size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, + ZSTD_outBuffer* output, + ZSTD_inBuffer* input, + ZSTD_EndDirective endOp); + + +/* These buffer sizes are softly recommended. + * They are not required : ZSTD_compressStream*() happily accepts any buffer size, for both input and output. + * Respecting the recommended size just makes it a bit easier for ZSTD_compressStream*(), + * reducing the amount of memory shuffling and buffering, resulting in minor performance savings. + * + * However, note that these recommendations are from the perspective of a C caller program. + * If the streaming interface is invoked from some other language, + * especially managed ones such as Java or Go, through a foreign function interface such as jni or cgo, + * a major performance rule is to reduce crossing such interface to an absolute minimum. + * It's not rare that performance ends being spent more into the interface, rather than compression itself. + * In which cases, prefer using large buffers, as large as practical, + * for both input and output, to reduce the nb of roundtrips. + */ +ZSTDLIB_API size_t ZSTD_CStreamInSize(void); /**< recommended size for input buffer */ +ZSTDLIB_API size_t ZSTD_CStreamOutSize(void); /**< recommended size for output buffer. Guarantee to successfully flush at least one complete compressed block. */ + + +/* ***************************************************************************** + * This following is a legacy streaming API, available since v1.0+ . + * It can be replaced by ZSTD_CCtx_reset() and ZSTD_compressStream2(). + * It is redundant, but remains fully supported. + ******************************************************************************/ + +/*! + * Equivalent to: + * + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) + * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); + * + * Note that ZSTD_initCStream() clears any previously set dictionary. Use the new API + * to compress with a dictionary. + */ +ZSTDLIB_API size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel); +/*! + * Alternative for ZSTD_compressStream2(zcs, output, input, ZSTD_e_continue). + * NOTE: The return value is different. ZSTD_compressStream() returns a hint for + * the next read size (if non-zero and not an error). ZSTD_compressStream2() + * returns the minimum nb of bytes left to flush (if non-zero and not an error). + */ +ZSTDLIB_API size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input); +/*! Equivalent to ZSTD_compressStream2(zcs, output, &emptyInput, ZSTD_e_flush). */ +ZSTDLIB_API size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); +/*! Equivalent to ZSTD_compressStream2(zcs, output, &emptyInput, ZSTD_e_end). */ +ZSTDLIB_API size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); + + +/*-*************************************************************************** +* Streaming decompression - HowTo +* +* A ZSTD_DStream object is required to track streaming operations. +* Use ZSTD_createDStream() and ZSTD_freeDStream() to create/release resources. +* ZSTD_DStream objects can be re-employed multiple times. +* +* Use ZSTD_initDStream() to start a new decompression operation. +* @return : recommended first input size +* Alternatively, use advanced API to set specific properties. +* +* Use ZSTD_decompressStream() repetitively to consume your input. +* The function will update both `pos` fields. +* If `input.pos < input.size`, some input has not been consumed. +* It's up to the caller to present again remaining data. +* +* The function tries to flush all data decoded immediately, respecting output buffer size. +* If `output.pos < output.size`, decoder has flushed everything it could. +* +* However, when `output.pos == output.size`, it's more difficult to know. +* If @return > 0, the frame is not complete, meaning +* either there is still some data left to flush within internal buffers, +* or there is more input to read to complete the frame (or both). +* In which case, call ZSTD_decompressStream() again to flush whatever remains in the buffer. +* Note : with no additional input provided, amount of data flushed is necessarily <= ZSTD_BLOCKSIZE_MAX. +* @return : 0 when a frame is completely decoded and fully flushed, +* or an error code, which can be tested using ZSTD_isError(), +* or any other value > 0, which means there is still some decoding or flushing to do to complete current frame : +* the return value is a suggested next input size (just a hint for better latency) +* that will never request more than the remaining content of the compressed frame. +* *******************************************************************************/ + +typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same object (>= v1.3.0) */ + /* For compatibility with versions <= v1.2.0, prefer differentiating them. */ +/*===== ZSTD_DStream management functions =====*/ +ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void); +ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */ + +/*===== Streaming decompression functions =====*/ + +/*! ZSTD_initDStream() : + * Initialize/reset DStream state for new decompression operation. + * Call before new decompression operation using same DStream. + * + * Note : This function is redundant with the advanced API and equivalent to: + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * ZSTD_DCtx_refDDict(zds, NULL); + */ +ZSTDLIB_API size_t ZSTD_initDStream(ZSTD_DStream* zds); + +/*! ZSTD_decompressStream() : + * Streaming decompression function. + * Call repetitively to consume full input updating it as necessary. + * Function will update both input and output `pos` fields exposing current state via these fields: + * - `input.pos < input.size`, some input remaining and caller should provide remaining input + * on the next call. + * - `output.pos < output.size`, decoder flushed internal output buffer. + * - `output.pos == output.size`, unflushed data potentially present in the internal buffers, + * check ZSTD_decompressStream() @return value, + * if > 0, invoke it again to flush remaining data to output. + * Note : with no additional input, amount of data flushed <= ZSTD_BLOCKSIZE_MAX. + * + * @return : 0 when a frame is completely decoded and fully flushed, + * or an error code, which can be tested using ZSTD_isError(), + * or any other value > 0, which means there is some decoding or flushing to do to complete current frame. + * + * Note: when an operation returns with an error code, the @zds state may be left in undefined state. + * It's UB to invoke `ZSTD_decompressStream()` on such a state. + * In order to re-use such a state, it must be first reset, + * which can be done explicitly (`ZSTD_DCtx_reset()`), + * or is implied for operations starting some new decompression job (`ZSTD_initDStream`, `ZSTD_decompressDCtx()`, `ZSTD_decompress_usingDict()`) + */ +ZSTDLIB_API size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input); + +ZSTDLIB_API size_t ZSTD_DStreamInSize(void); /*!< recommended size for input buffer */ +ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output buffer. Guarantee to successfully flush at least one complete block in all circumstances. */ + + +/************************** +* Simple dictionary API +***************************/ +/*! ZSTD_compress_usingDict() : + * Compression at an explicit compression level using a Dictionary. + * A dictionary can be any arbitrary data segment (also called a prefix), + * or a buffer with specified information (see zdict.h). + * Note : This function loads the dictionary, resulting in significant startup delay. + * It's intended for a dictionary used only once. + * Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */ +ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize, + int compressionLevel); + +/*! ZSTD_decompress_usingDict() : + * Decompression using a known Dictionary. + * Dictionary must be identical to the one used during compression. + * Note : This function loads the dictionary, resulting in significant startup delay. + * It's intended for a dictionary used only once. + * Note : When `dict == NULL || dictSize < 8` no dictionary is used. */ +ZSTDLIB_API size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize); + + +/*********************************** + * Bulk processing dictionary API + **********************************/ +typedef struct ZSTD_CDict_s ZSTD_CDict; + +/*! ZSTD_createCDict() : + * When compressing multiple messages or blocks using the same dictionary, + * it's recommended to digest the dictionary only once, since it's a costly operation. + * ZSTD_createCDict() will create a state from digesting a dictionary. + * The resulting state can be used for future compression operations with very limited startup cost. + * ZSTD_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. + * @dictBuffer can be released after ZSTD_CDict creation, because its content is copied within CDict. + * Note 1 : Consider experimental function `ZSTD_createCDict_byReference()` if you prefer to not duplicate @dictBuffer content. + * Note 2 : A ZSTD_CDict can be created from an empty @dictBuffer, + * in which case the only thing that it transports is the @compressionLevel. + * This can be useful in a pipeline featuring ZSTD_compress_usingCDict() exclusively, + * expecting a ZSTD_CDict parameter with any data, including those without a known dictionary. */ +ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize, + int compressionLevel); + +/*! ZSTD_freeCDict() : + * Function frees memory allocated by ZSTD_createCDict(). + * If a NULL pointer is passed, no operation is performed. */ +ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict); + +/*! ZSTD_compress_usingCDict() : + * Compression using a digested Dictionary. + * Recommended when same dictionary is used multiple times. + * Note : compression level is _decided at dictionary creation time_, + * and frame parameters are hardcoded (dictID=yes, contentSize=yes, checksum=no) */ +ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict); + + +typedef struct ZSTD_DDict_s ZSTD_DDict; + +/*! ZSTD_createDDict() : + * Create a digested dictionary, ready to start decompression operation without startup delay. + * dictBuffer can be released after DDict creation, as its content is copied inside DDict. */ +ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize); + +/*! ZSTD_freeDDict() : + * Function frees memory allocated with ZSTD_createDDict() + * If a NULL pointer is passed, no operation is performed. */ +ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict); + +/*! ZSTD_decompress_usingDDict() : + * Decompression using a digested Dictionary. + * Recommended when same dictionary is used multiple times. */ +ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_DDict* ddict); + + +/******************************** + * Dictionary helper functions + *******************************/ + +/*! ZSTD_getDictID_fromDict() : Requires v1.4.0+ + * Provides the dictID stored within dictionary. + * if @return == 0, the dictionary is not conformant with Zstandard specification. + * It can still be loaded, but as a content-only dictionary. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize); + +/*! ZSTD_getDictID_fromCDict() : Requires v1.5.0+ + * Provides the dictID of the dictionary loaded into `cdict`. + * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. + * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); + +/*! ZSTD_getDictID_fromDDict() : Requires v1.4.0+ + * Provides the dictID of the dictionary loaded into `ddict`. + * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. + * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict); + +/*! ZSTD_getDictID_fromFrame() : Requires v1.4.0+ + * Provides the dictID required to decompressed the frame stored within `src`. + * If @return == 0, the dictID could not be decoded. + * This could for one of the following reasons : + * - The frame does not require a dictionary to be decoded (most common case). + * - The frame was built with dictID intentionally removed. Whatever dictionary is necessary is a hidden piece of information. + * Note : this use case also happens when using a non-conformant dictionary. + * - `srcSize` is too small, and as a result, the frame header could not be decoded (only possible if `srcSize < ZSTD_FRAMEHEADERSIZE_MAX`). + * - This is not a Zstandard frame. + * When identifying the exact failure cause, it's possible to use ZSTD_getFrameHeader(), which will provide a more precise error code. */ +ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); + + +/******************************************************************************* + * Advanced dictionary and prefix API (Requires v1.4.0+) + * + * This API allows dictionaries to be used with ZSTD_compress2(), + * ZSTD_compressStream2(), and ZSTD_decompressDCtx(). + * Dictionaries are sticky, they remain valid when same context is reused, + * they only reset when the context is reset + * with ZSTD_reset_parameters or ZSTD_reset_session_and_parameters. + * In contrast, Prefixes are single-use. + ******************************************************************************/ + + +/*! ZSTD_CCtx_loadDictionary() : Requires v1.4.0+ + * Create an internal CDict from `dict` buffer. + * Decompression will have to use same dictionary. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special: Loading a NULL (or 0-size) dictionary invalidates previous dictionary, + * meaning "return to no-dictionary mode". + * Note 1 : Dictionary is sticky, it will be used for all future compressed frames, + * until parameters are reset, a new dictionary is loaded, or the dictionary + * is explicitly invalidated by loading a NULL dictionary. + * Note 2 : Loading a dictionary involves building tables. + * It's also a CPU consuming operation, with non-negligible impact on latency. + * Tables are dependent on compression parameters, and for this reason, + * compression parameters can no longer be changed after loading a dictionary. + * Note 3 :`dict` content will be copied internally. + * Use experimental ZSTD_CCtx_loadDictionary_byReference() to reference content instead. + * In such a case, dictionary buffer must outlive its users. + * Note 4 : Use ZSTD_CCtx_loadDictionary_advanced() + * to precisely select how dictionary content must be interpreted. + * Note 5 : This method does not benefit from LDM (long distance mode). + * If you want to employ LDM on some large dictionary content, + * prefer employing ZSTD_CCtx_refPrefix() described below. + */ +ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); + +/*! ZSTD_CCtx_refCDict() : Requires v1.4.0+ + * Reference a prepared dictionary, to be used for all future compressed frames. + * Note that compression parameters are enforced from within CDict, + * and supersede any compression parameter previously set within CCtx. + * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs. + * The ignored parameters will be used again if the CCtx is returned to no-dictionary mode. + * The dictionary will remain valid for future compressed frames using same CCtx. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special : Referencing a NULL CDict means "return to no-dictionary mode". + * Note 1 : Currently, only one dictionary can be managed. + * Referencing a new dictionary effectively "discards" any previous one. + * Note 2 : CDict is just referenced, its lifetime must outlive its usage within CCtx. */ +ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); + +/*! ZSTD_CCtx_refPrefix() : Requires v1.4.0+ + * Reference a prefix (single-usage dictionary) for next compressed frame. + * A prefix is **only used once**. Tables are discarded at end of frame (ZSTD_e_end). + * Decompression will need same prefix to properly regenerate data. + * Compressing with a prefix is similar in outcome as performing a diff and compressing it, + * but performs much faster, especially during decompression (compression speed is tunable with compression level). + * This method is compatible with LDM (long distance mode). + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special: Adding any prefix (including NULL) invalidates any previous prefix or dictionary + * Note 1 : Prefix buffer is referenced. It **must** outlive compression. + * Its content must remain unmodified during compression. + * Note 2 : If the intention is to diff some large src data blob with some prior version of itself, + * ensure that the window size is large enough to contain the entire source. + * See ZSTD_c_windowLog. + * Note 3 : Referencing a prefix involves building tables, which are dependent on compression parameters. + * It's a CPU consuming operation, with non-negligible impact on latency. + * If there is a need to use the same prefix multiple times, consider loadDictionary instead. + * Note 4 : By default, the prefix is interpreted as raw content (ZSTD_dct_rawContent). + * Use experimental ZSTD_CCtx_refPrefix_advanced() to alter dictionary interpretation. */ +ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, + const void* prefix, size_t prefixSize); + +/*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+ + * Create an internal DDict from dict buffer, to be used to decompress all future frames. + * The dictionary remains valid for all future frames, until explicitly invalidated, or + * a new dictionary is loaded. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special : Adding a NULL (or 0-size) dictionary invalidates any previous dictionary, + * meaning "return to no-dictionary mode". + * Note 1 : Loading a dictionary involves building tables, + * which has a non-negligible impact on CPU usage and latency. + * It's recommended to "load once, use many times", to amortize the cost + * Note 2 :`dict` content will be copied internally, so `dict` can be released after loading. + * Use ZSTD_DCtx_loadDictionary_byReference() to reference dictionary content instead. + * Note 3 : Use ZSTD_DCtx_loadDictionary_advanced() to take control of + * how dictionary content is loaded and interpreted. + */ +ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); + +/*! ZSTD_DCtx_refDDict() : Requires v1.4.0+ + * Reference a prepared dictionary, to be used to decompress next frames. + * The dictionary remains active for decompression of future frames using same DCtx. + * + * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function + * will store the DDict references in a table, and the DDict used for decompression + * will be determined at decompression time, as per the dict ID in the frame. + * The memory for the table is allocated on the first call to refDDict, and can be + * freed with ZSTD_freeDCtx(). + * + * If called with ZSTD_d_refMultipleDDicts disabled (the default), only one dictionary + * will be managed, and referencing a dictionary effectively "discards" any previous one. + * + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Special: referencing a NULL DDict means "return to no-dictionary mode". + * Note 2 : DDict is just referenced, its lifetime must outlive its usage from DCtx. + */ +ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); + +/*! ZSTD_DCtx_refPrefix() : Requires v1.4.0+ + * Reference a prefix (single-usage dictionary) to decompress next frame. + * This is the reverse operation of ZSTD_CCtx_refPrefix(), + * and must use the same prefix as the one used during compression. + * Prefix is **only used once**. Reference is discarded at end of frame. + * End of frame is reached when ZSTD_decompressStream() returns 0. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + * Note 1 : Adding any prefix (including NULL) invalidates any previously set prefix or dictionary + * Note 2 : Prefix buffer is referenced. It **must** outlive decompression. + * Prefix buffer must remain unmodified up to the end of frame, + * reached when ZSTD_decompressStream() returns 0. + * Note 3 : By default, the prefix is treated as raw content (ZSTD_dct_rawContent). + * Use ZSTD_CCtx_refPrefix_advanced() to alter dictMode (Experimental section) + * Note 4 : Referencing a raw content prefix has almost no cpu nor memory cost. + * A full dictionary is more costly, as it requires building tables. + */ +ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, + const void* prefix, size_t prefixSize); + +/* === Memory management === */ + +/*! ZSTD_sizeof_*() : Requires v1.4.0+ + * These functions give the _current_ memory usage of selected object. + * Note that object memory usage can evolve (increase or decrease) over time. */ +ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx); +ZSTDLIB_API size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx); +ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs); +ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds); +ZSTDLIB_API size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict); +ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict); + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_H_235446 */ + + +/* ************************************************************************************** + * ADVANCED AND EXPERIMENTAL FUNCTIONS + **************************************************************************************** + * The definitions in the following section are considered experimental. + * They are provided for advanced scenarios. + * They should never be used with a dynamic library, as prototypes may change in the future. + * Use them only in association with static linking. + * ***************************************************************************************/ + +#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY) +#define ZSTD_H_ZSTD_STATIC_LINKING_ONLY + +#if defined (__cplusplus) +extern "C" { +#endif + +/* This can be overridden externally to hide static symbols. */ +#ifndef ZSTDLIB_STATIC_API +# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZSTDLIB_STATIC_API __declspec(dllexport) ZSTDLIB_VISIBLE +# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZSTDLIB_STATIC_API __declspec(dllimport) ZSTDLIB_VISIBLE +# else +# define ZSTDLIB_STATIC_API ZSTDLIB_VISIBLE +# endif +#endif + +/**************************************************************************************** + * experimental API (static linking only) + **************************************************************************************** + * The following symbols and constants + * are not planned to join "stable API" status in the near future. + * They can still change in future versions. + * Some of them are planned to remain in the static_only section indefinitely. + * Some of them might be removed in the future (especially when redundant with existing stable functions) + * ***************************************************************************************/ + +#define ZSTD_FRAMEHEADERSIZE_PREFIX(format) ((format) == ZSTD_f_zstd1 ? 5 : 1) /* minimum input size required to query frame header size */ +#define ZSTD_FRAMEHEADERSIZE_MIN(format) ((format) == ZSTD_f_zstd1 ? 6 : 2) +#define ZSTD_FRAMEHEADERSIZE_MAX 18 /* can be useful for static allocation */ +#define ZSTD_SKIPPABLEHEADERSIZE 8 + +/* compression parameter bounds */ +#define ZSTD_WINDOWLOG_MAX_32 30 +#define ZSTD_WINDOWLOG_MAX_64 31 +#define ZSTD_WINDOWLOG_MAX ((int)(sizeof(size_t) == 4 ? ZSTD_WINDOWLOG_MAX_32 : ZSTD_WINDOWLOG_MAX_64)) +#define ZSTD_WINDOWLOG_MIN 10 +#define ZSTD_HASHLOG_MAX ((ZSTD_WINDOWLOG_MAX < 30) ? ZSTD_WINDOWLOG_MAX : 30) +#define ZSTD_HASHLOG_MIN 6 +#define ZSTD_CHAINLOG_MAX_32 29 +#define ZSTD_CHAINLOG_MAX_64 30 +#define ZSTD_CHAINLOG_MAX ((int)(sizeof(size_t) == 4 ? ZSTD_CHAINLOG_MAX_32 : ZSTD_CHAINLOG_MAX_64)) +#define ZSTD_CHAINLOG_MIN ZSTD_HASHLOG_MIN +#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1) +#define ZSTD_SEARCHLOG_MIN 1 +#define ZSTD_MINMATCH_MAX 7 /* only for ZSTD_fast, other strategies are limited to 6 */ +#define ZSTD_MINMATCH_MIN 3 /* only for ZSTD_btopt+, faster strategies are limited to 4 */ +#define ZSTD_TARGETLENGTH_MAX ZSTD_BLOCKSIZE_MAX +#define ZSTD_TARGETLENGTH_MIN 0 /* note : comparing this constant to an unsigned results in a tautological test */ +#define ZSTD_STRATEGY_MIN ZSTD_fast +#define ZSTD_STRATEGY_MAX ZSTD_btultra2 +#define ZSTD_BLOCKSIZE_MAX_MIN (1 << 10) /* The minimum valid max blocksize. Maximum blocksizes smaller than this make compressBound() inaccurate. */ + + +#define ZSTD_OVERLAPLOG_MIN 0 +#define ZSTD_OVERLAPLOG_MAX 9 + +#define ZSTD_WINDOWLOG_LIMIT_DEFAULT 27 /* by default, the streaming decoder will refuse any frame + * requiring larger than (1< 0: + * If litLength != 0: + * rep == 1 --> offset == repeat_offset_1 + * rep == 2 --> offset == repeat_offset_2 + * rep == 3 --> offset == repeat_offset_3 + * If litLength == 0: + * rep == 1 --> offset == repeat_offset_2 + * rep == 2 --> offset == repeat_offset_3 + * rep == 3 --> offset == repeat_offset_1 - 1 + * + * Note: This field is optional. ZSTD_generateSequences() will calculate the value of + * 'rep', but repeat offsets do not necessarily need to be calculated from an external + * sequence provider perspective. For example, ZSTD_compressSequences() does not + * use this 'rep' field at all (as of now). + */ +} ZSTD_Sequence; + +typedef struct { + unsigned windowLog; /**< largest match distance : larger == more compression, more memory needed during decompression */ + unsigned chainLog; /**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */ + unsigned hashLog; /**< dispatch table : larger == faster, more memory */ + unsigned searchLog; /**< nb of searches : larger == more compression, slower */ + unsigned minMatch; /**< match length searched : larger == faster decompression, sometimes less compression */ + unsigned targetLength; /**< acceptable match size for optimal parser (only) : larger == more compression, slower */ + ZSTD_strategy strategy; /**< see ZSTD_strategy definition above */ +} ZSTD_compressionParameters; + +typedef struct { + int contentSizeFlag; /**< 1: content size will be in frame header (when known) */ + int checksumFlag; /**< 1: generate a 32-bits checksum using XXH64 algorithm at end of frame, for error detection */ + int noDictIDFlag; /**< 1: no dictID will be saved into frame header (dictID is only useful for dictionary compression) */ +} ZSTD_frameParameters; + +typedef struct { + ZSTD_compressionParameters cParams; + ZSTD_frameParameters fParams; +} ZSTD_parameters; + +typedef enum { + ZSTD_dct_auto = 0, /* dictionary is "full" when starting with ZSTD_MAGIC_DICTIONARY, otherwise it is "rawContent" */ + ZSTD_dct_rawContent = 1, /* ensures dictionary is always loaded as rawContent, even if it starts with ZSTD_MAGIC_DICTIONARY */ + ZSTD_dct_fullDict = 2 /* refuses to load a dictionary if it does not respect Zstandard's specification, starting with ZSTD_MAGIC_DICTIONARY */ +} ZSTD_dictContentType_e; + +typedef enum { + ZSTD_dlm_byCopy = 0, /**< Copy dictionary content internally */ + ZSTD_dlm_byRef = 1 /**< Reference dictionary content -- the dictionary buffer must outlive its users. */ +} ZSTD_dictLoadMethod_e; + +typedef enum { + ZSTD_f_zstd1 = 0, /* zstd frame format, specified in zstd_compression_format.md (default) */ + ZSTD_f_zstd1_magicless = 1 /* Variant of zstd frame format, without initial 4-bytes magic number. + * Useful to save 4 bytes per generated frame. + * Decoder cannot recognise automatically this format, requiring this instruction. */ +} ZSTD_format_e; + +typedef enum { + /* Note: this enum controls ZSTD_d_forceIgnoreChecksum */ + ZSTD_d_validateChecksum = 0, + ZSTD_d_ignoreChecksum = 1 +} ZSTD_forceIgnoreChecksum_e; + +typedef enum { + /* Note: this enum controls ZSTD_d_refMultipleDDicts */ + ZSTD_rmd_refSingleDDict = 0, + ZSTD_rmd_refMultipleDDicts = 1 +} ZSTD_refMultipleDDicts_e; + +typedef enum { + /* Note: this enum and the behavior it controls are effectively internal + * implementation details of the compressor. They are expected to continue + * to evolve and should be considered only in the context of extremely + * advanced performance tuning. + * + * Zstd currently supports the use of a CDict in three ways: + * + * - The contents of the CDict can be copied into the working context. This + * means that the compression can search both the dictionary and input + * while operating on a single set of internal tables. This makes + * the compression faster per-byte of input. However, the initial copy of + * the CDict's tables incurs a fixed cost at the beginning of the + * compression. For small compressions (< 8 KB), that copy can dominate + * the cost of the compression. + * + * - The CDict's tables can be used in-place. In this model, compression is + * slower per input byte, because the compressor has to search two sets of + * tables. However, this model incurs no start-up cost (as long as the + * working context's tables can be reused). For small inputs, this can be + * faster than copying the CDict's tables. + * + * - The CDict's tables are not used at all, and instead we use the working + * context alone to reload the dictionary and use params based on the source + * size. See ZSTD_compress_insertDictionary() and ZSTD_compress_usingDict(). + * This method is effective when the dictionary sizes are very small relative + * to the input size, and the input size is fairly large to begin with. + * + * Zstd has a simple internal heuristic that selects which strategy to use + * at the beginning of a compression. However, if experimentation shows that + * Zstd is making poor choices, it is possible to override that choice with + * this enum. + */ + ZSTD_dictDefaultAttach = 0, /* Use the default heuristic. */ + ZSTD_dictForceAttach = 1, /* Never copy the dictionary. */ + ZSTD_dictForceCopy = 2, /* Always copy the dictionary. */ + ZSTD_dictForceLoad = 3 /* Always reload the dictionary */ +} ZSTD_dictAttachPref_e; + +typedef enum { + ZSTD_lcm_auto = 0, /**< Automatically determine the compression mode based on the compression level. + * Negative compression levels will be uncompressed, and positive compression + * levels will be compressed. */ + ZSTD_lcm_huffman = 1, /**< Always attempt Huffman compression. Uncompressed literals will still be + * emitted if Huffman compression is not profitable. */ + ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */ +} ZSTD_literalCompressionMode_e; + +typedef enum { + /* Note: This enum controls features which are conditionally beneficial. + * Zstd can take a decision on whether or not to enable the feature (ZSTD_ps_auto), + * but setting the switch to ZSTD_ps_enable or ZSTD_ps_disable force enable/disable the feature. + */ + ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */ + ZSTD_ps_enable = 1, /* Force-enable the feature */ + ZSTD_ps_disable = 2 /* Do not use the feature */ +} ZSTD_ParamSwitch_e; +#define ZSTD_paramSwitch_e ZSTD_ParamSwitch_e /* old name */ + +/*************************************** +* Frame header and size functions +***************************************/ + +/*! ZSTD_findDecompressedSize() : + * `src` should point to the start of a series of ZSTD encoded and/or skippable frames + * `srcSize` must be the _exact_ size of this series + * (i.e. there should be a frame boundary at `src + srcSize`) + * @return : - decompressed size of all data in all successive frames + * - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN + * - if an error occurred: ZSTD_CONTENTSIZE_ERROR + * + * note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode. + * When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. + * In which case, it's necessary to use streaming mode to decompress data. + * note 2 : decompressed size is always present when compression is done with ZSTD_compress() + * note 3 : decompressed size can be very large (64-bits value), + * potentially larger than what local system can handle as a single memory segment. + * In which case, it's necessary to use streaming mode to decompress data. + * note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified. + * Always ensure result fits within application's authorized limits. + * Each application can set its own limits. + * note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to + * read each contained frame header. This is fast as most of the data is skipped, + * however it does mean that all frame data must be present and valid. */ +ZSTDLIB_STATIC_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize); + +/*! ZSTD_decompressBound() : + * `src` should point to the start of a series of ZSTD encoded and/or skippable frames + * `srcSize` must be the _exact_ size of this series + * (i.e. there should be a frame boundary at `src + srcSize`) + * @return : - upper-bound for the decompressed size of all data in all successive frames + * - if an error occurred: ZSTD_CONTENTSIZE_ERROR + * + * note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame. + * note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`. + * in this case, `ZSTD_findDecompressedSize` and `ZSTD_decompressBound` return the same value. + * note 3 : when the decompressed size field isn't available, the upper-bound for that frame is calculated by: + * upper-bound = # blocks * min(128 KB, Window_Size) + */ +ZSTDLIB_STATIC_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize); + +/*! ZSTD_frameHeaderSize() : + * srcSize must be large enough, aka >= ZSTD_FRAMEHEADERSIZE_PREFIX. + * @return : size of the Frame Header, + * or an error code (if srcSize is too small) */ +ZSTDLIB_STATIC_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize); + +typedef enum { ZSTD_frame, ZSTD_skippableFrame } ZSTD_FrameType_e; +#define ZSTD_frameType_e ZSTD_FrameType_e /* old name */ +typedef struct { + unsigned long long frameContentSize; /* if == ZSTD_CONTENTSIZE_UNKNOWN, it means this field is not available. 0 means "empty" */ + unsigned long long windowSize; /* can be very large, up to <= frameContentSize */ + unsigned blockSizeMax; + ZSTD_FrameType_e frameType; /* if == ZSTD_skippableFrame, frameContentSize is the size of skippable content */ + unsigned headerSize; + unsigned dictID; /* for ZSTD_skippableFrame, contains the skippable magic variant [0-15] */ + unsigned checksumFlag; + unsigned _reserved1; + unsigned _reserved2; +} ZSTD_FrameHeader; +#define ZSTD_frameHeader ZSTD_FrameHeader /* old name */ + +/*! ZSTD_getFrameHeader() : + * decode Frame Header into `zfhPtr`, or requires larger `srcSize`. + * @return : 0 => header is complete, `zfhPtr` is correctly filled, + * >0 => `srcSize` is too small, @return value is the wanted `srcSize` amount, `zfhPtr` is not filled, + * or an error code, which can be tested using ZSTD_isError() */ +ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize); +/*! ZSTD_getFrameHeader_advanced() : + * same as ZSTD_getFrameHeader(), + * with added capability to select a format (like ZSTD_f_zstd1_magicless) */ +ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format); + +/*! ZSTD_decompressionMargin() : + * Zstd supports in-place decompression, where the input and output buffers overlap. + * In this case, the output buffer must be at least (Margin + Output_Size) bytes large, + * and the input buffer must be at the end of the output buffer. + * + * _______________________ Output Buffer ________________________ + * | | + * | ____ Input Buffer ____| + * | | | + * v v v + * |---------------------------------------|-----------|----------| + * ^ ^ ^ + * |___________________ Output_Size ___________________|_ Margin _| + * + * NOTE: See also ZSTD_DECOMPRESSION_MARGIN(). + * NOTE: This applies only to single-pass decompression through ZSTD_decompress() or + * ZSTD_decompressDCtx(). + * NOTE: This function supports multi-frame input. + * + * @param src The compressed frame(s) + * @param srcSize The size of the compressed frame(s) + * @returns The decompression margin or an error that can be checked with ZSTD_isError(). + */ +ZSTDLIB_STATIC_API size_t ZSTD_decompressionMargin(const void* src, size_t srcSize); + +/*! ZSTD_DECOMPRESS_MARGIN() : + * Similar to ZSTD_decompressionMargin(), but instead of computing the margin from + * the compressed frame, compute it from the original size and the blockSizeLog. + * See ZSTD_decompressionMargin() for details. + * + * WARNING: This macro does not support multi-frame input, the input must be a single + * zstd frame. If you need that support use the function, or implement it yourself. + * + * @param originalSize The original uncompressed size of the data. + * @param blockSize The block size == MIN(windowSize, ZSTD_BLOCKSIZE_MAX). + * Unless you explicitly set the windowLog smaller than + * ZSTD_BLOCKSIZELOG_MAX you can just use ZSTD_BLOCKSIZE_MAX. + */ +#define ZSTD_DECOMPRESSION_MARGIN(originalSize, blockSize) ((size_t)( \ + ZSTD_FRAMEHEADERSIZE_MAX /* Frame header */ + \ + 4 /* checksum */ + \ + ((originalSize) == 0 ? 0 : 3 * (((originalSize) + (blockSize) - 1) / blockSize)) /* 3 bytes per block */ + \ + (blockSize) /* One block of margin */ \ + )) + +typedef enum { + ZSTD_sf_noBlockDelimiters = 0, /* ZSTD_Sequence[] has no block delimiters, just sequences */ + ZSTD_sf_explicitBlockDelimiters = 1 /* ZSTD_Sequence[] contains explicit block delimiters */ +} ZSTD_SequenceFormat_e; +#define ZSTD_sequenceFormat_e ZSTD_SequenceFormat_e /* old name */ + +/*! ZSTD_sequenceBound() : + * `srcSize` : size of the input buffer + * @return : upper-bound for the number of sequences that can be generated + * from a buffer of srcSize bytes + * + * note : returns number of sequences - to get bytes, multiply by sizeof(ZSTD_Sequence). + */ +ZSTDLIB_STATIC_API size_t ZSTD_sequenceBound(size_t srcSize); + +/*! ZSTD_generateSequences() : + * WARNING: This function is meant for debugging and informational purposes ONLY! + * Its implementation is flawed, and it will be deleted in a future version. + * It is not guaranteed to succeed, as there are several cases where it will give + * up and fail. You should NOT use this function in production code. + * + * This function is deprecated, and will be removed in a future version. + * + * Generate sequences using ZSTD_compress2(), given a source buffer. + * + * @param zc The compression context to be used for ZSTD_compress2(). Set any + * compression parameters you need on this context. + * @param outSeqs The output sequences buffer of size @p outSeqsSize + * @param outSeqsCapacity The size of the output sequences buffer. + * ZSTD_sequenceBound(srcSize) is an upper bound on the number + * of sequences that can be generated. + * @param src The source buffer to generate sequences from of size @p srcSize. + * @param srcSize The size of the source buffer. + * + * Each block will end with a dummy sequence + * with offset == 0, matchLength == 0, and litLength == length of last literals. + * litLength may be == 0, and if so, then the sequence of (of: 0 ml: 0 ll: 0) + * simply acts as a block delimiter. + * + * @returns The number of sequences generated, necessarily less than + * ZSTD_sequenceBound(srcSize), or an error code that can be checked + * with ZSTD_isError(). + */ +ZSTD_DEPRECATED("For debugging only, will be replaced by ZSTD_extractSequences()") +ZSTDLIB_STATIC_API size_t +ZSTD_generateSequences(ZSTD_CCtx* zc, + ZSTD_Sequence* outSeqs, size_t outSeqsCapacity, + const void* src, size_t srcSize); + +/*! ZSTD_mergeBlockDelimiters() : + * Given an array of ZSTD_Sequence, remove all sequences that represent block delimiters/last literals + * by merging them into the literals of the next sequence. + * + * As such, the final generated result has no explicit representation of block boundaries, + * and the final last literals segment is not represented in the sequences. + * + * The output of this function can be fed into ZSTD_compressSequences() with CCtx + * setting of ZSTD_c_blockDelimiters as ZSTD_sf_noBlockDelimiters + * @return : number of sequences left after merging + */ +ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t seqsSize); + +/*! ZSTD_compressSequences() : + * Compress an array of ZSTD_Sequence, associated with @src buffer, into dst. + * @src contains the entire input (not just the literals). + * If @srcSize > sum(sequence.length), the remaining bytes are considered all literals + * If a dictionary is included, then the cctx should reference the dict (see: ZSTD_CCtx_refCDict(), ZSTD_CCtx_loadDictionary(), etc.). + * The entire source is compressed into a single frame. + * + * The compression behavior changes based on cctx params. In particular: + * If ZSTD_c_blockDelimiters == ZSTD_sf_noBlockDelimiters, the array of ZSTD_Sequence is expected to contain + * no block delimiters (defined in ZSTD_Sequence). Block boundaries are roughly determined based on + * the block size derived from the cctx, and sequences may be split. This is the default setting. + * + * If ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, the array of ZSTD_Sequence is expected to contain + * valid block delimiters (defined in ZSTD_Sequence). Behavior is undefined if no block delimiters are provided. + * + * When ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, it's possible to decide generating repcodes + * using the advanced parameter ZSTD_c_repcodeResolution. Repcodes will improve compression ratio, though the benefit + * can vary greatly depending on Sequences. On the other hand, repcode resolution is an expensive operation. + * By default, it's disabled at low (<10) compression levels, and enabled above the threshold (>=10). + * ZSTD_c_repcodeResolution makes it possible to directly manage this processing in either direction. + * + * If ZSTD_c_validateSequences == 0, this function blindly accepts the Sequences provided. Invalid Sequences cause undefined + * behavior. If ZSTD_c_validateSequences == 1, then the function will detect invalid Sequences (see doc/zstd_compression_format.md for + * specifics regarding offset/matchlength requirements) and then bail out and return an error. + * + * In addition to the two adjustable experimental params, there are other important cctx params. + * - ZSTD_c_minMatch MUST be set as less than or equal to the smallest match generated by the match finder. It has a minimum value of ZSTD_MINMATCH_MIN. + * - ZSTD_c_compressionLevel accordingly adjusts the strength of the entropy coder, as it would in typical compression. + * - ZSTD_c_windowLog affects offset validation: this function will return an error at higher debug levels if a provided offset + * is larger than what the spec allows for a given window log and dictionary (if present). See: doc/zstd_compression_format.md + * + * Note: Repcodes are, as of now, always re-calculated within this function, ZSTD_Sequence.rep is effectively unused. + * Dev Note: Once ability to ingest repcodes become available, the explicit block delims mode must respect those repcodes exactly, + * and cannot emit an RLE block that disagrees with the repcode history. + * @return : final compressed size, or a ZSTD error code. + */ +ZSTDLIB_STATIC_API size_t +ZSTD_compressSequences(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const ZSTD_Sequence* inSeqs, size_t inSeqsSize, + const void* src, size_t srcSize); + + +/*! ZSTD_compressSequencesAndLiterals() : + * This is a variant of ZSTD_compressSequences() which, + * instead of receiving (src,srcSize) as input parameter, receives (literals,litSize), + * aka all the literals, already extracted and laid out into a single continuous buffer. + * This can be useful if the process generating the sequences also happens to generate the buffer of literals, + * thus skipping an extraction + caching stage. + * It's a speed optimization, useful when the right conditions are met, + * but it also features the following limitations: + * - Only supports explicit delimiter mode + * - Currently does not support Sequences validation (so input Sequences are trusted) + * - Not compatible with frame checksum, which must be disabled + * - If any block is incompressible, will fail and return an error + * - @litSize must be == sum of all @.litLength fields in @inSeqs. Any discrepancy will generate an error. + * - @litBufCapacity is the size of the underlying buffer into which literals are written, starting at address @literals. + * @litBufCapacity must be at least 8 bytes larger than @litSize. + * - @decompressedSize must be correct, and correspond to the sum of all Sequences. Any discrepancy will generate an error. + * @return : final compressed size, or a ZSTD error code. + */ +ZSTDLIB_STATIC_API size_t +ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const ZSTD_Sequence* inSeqs, size_t nbSequences, + const void* literals, size_t litSize, size_t litBufCapacity, + size_t decompressedSize); + + +/*! ZSTD_writeSkippableFrame() : + * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer. + * + * Skippable frames begin with a 4-byte magic number. There are 16 possible choices of magic number, + * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15. + * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, + * so the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant. + * + * Returns an error if destination buffer is not large enough, if the source size is not representable + * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid). + * + * @return : number of bytes written or a ZSTD error. + */ +ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + unsigned magicVariant); + +/*! ZSTD_readSkippableFrame() : + * Retrieves the content of a zstd skippable frame starting at @src, and writes it to @dst buffer. + * + * The parameter @magicVariant will receive the magicVariant that was supplied when the frame was written, + * i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START. + * This can be NULL if the caller is not interested in the magicVariant. + * + * Returns an error if destination buffer is not large enough, or if the frame is not skippable. + * + * @return : number of bytes written or a ZSTD error. + */ +ZSTDLIB_STATIC_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, + unsigned* magicVariant, + const void* src, size_t srcSize); + +/*! ZSTD_isSkippableFrame() : + * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame. + */ +ZSTDLIB_STATIC_API unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size); + + + +/*************************************** +* Memory management +***************************************/ + +/*! ZSTD_estimate*() : + * These functions make it possible to estimate memory usage + * of a future {D,C}Ctx, before its creation. + * This is useful in combination with ZSTD_initStatic(), + * which makes it possible to employ a static buffer for ZSTD_CCtx* state. + * + * ZSTD_estimateCCtxSize() will provide a memory budget large enough + * to compress data of any size using one-shot compression ZSTD_compressCCtx() or ZSTD_compress2() + * associated with any compression level up to max specified one. + * The estimate will assume the input may be arbitrarily large, + * which is the worst case. + * + * Note that the size estimation is specific for one-shot compression, + * it is not valid for streaming (see ZSTD_estimateCStreamSize*()) + * nor other potential ways of using a ZSTD_CCtx* state. + * + * When srcSize can be bound by a known and rather "small" value, + * this knowledge can be used to provide a tighter budget estimation + * because the ZSTD_CCtx* state will need less memory for small inputs. + * This tighter estimation can be provided by employing more advanced functions + * ZSTD_estimateCCtxSize_usingCParams(), which can be used in tandem with ZSTD_getCParams(), + * and ZSTD_estimateCCtxSize_usingCCtxParams(), which can be used in tandem with ZSTD_CCtxParams_setParameter(). + * Both can be used to estimate memory using custom compression parameters and arbitrary srcSize limits. + * + * Note : only single-threaded compression is supported. + * ZSTD_estimateCCtxSize_usingCCtxParams() will return an error code if ZSTD_c_nbWorkers is >= 1. + */ +ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize(int maxCompressionLevel); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDCtxSize(void); + +/*! ZSTD_estimateCStreamSize() : + * ZSTD_estimateCStreamSize() will provide a memory budget large enough for streaming compression + * using any compression level up to the max specified one. + * It will also consider src size to be arbitrarily "large", which is a worst case scenario. + * If srcSize is known to always be small, ZSTD_estimateCStreamSize_usingCParams() can provide a tighter estimation. + * ZSTD_estimateCStreamSize_usingCParams() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel. + * ZSTD_estimateCStreamSize_usingCCtxParams() can be used in tandem with ZSTD_CCtxParams_setParameter(). Only single-threaded compression is supported. This function will return an error code if ZSTD_c_nbWorkers is >= 1. + * Note : CStream size estimation is only correct for single-threaded compression. + * ZSTD_estimateCStreamSize_usingCCtxParams() will return an error code if ZSTD_c_nbWorkers is >= 1. + * Note 2 : ZSTD_estimateCStreamSize* functions are not compatible with the Block-Level Sequence Producer API at this time. + * Size estimates assume that no external sequence producer is registered. + * + * ZSTD_DStream memory budget depends on frame's window Size. + * This information can be passed manually, using ZSTD_estimateDStreamSize, + * or deducted from a valid frame Header, using ZSTD_estimateDStreamSize_fromFrame(); + * Any frame requesting a window size larger than max specified one will be rejected. + * Note : if streaming is init with function ZSTD_init?Stream_usingDict(), + * an internal ?Dict will be created, which additional size is not estimated here. + * In this case, get total size by adding ZSTD_estimate?DictSize + */ +ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize(int maxCompressionLevel); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize(size_t maxWindowSize); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize); + +/*! ZSTD_estimate?DictSize() : + * ZSTD_estimateCDictSize() will bet that src size is relatively "small", and content is copied, like ZSTD_createCDict(). + * ZSTD_estimateCDictSize_advanced() makes it possible to control compression parameters precisely, like ZSTD_createCDict_advanced(). + * Note : dictionaries created by reference (`ZSTD_dlm_byRef`) are logically smaller. + */ +ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize(size_t dictSize, int compressionLevel); +ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize_advanced(size_t dictSize, ZSTD_compressionParameters cParams, ZSTD_dictLoadMethod_e dictLoadMethod); +ZSTDLIB_STATIC_API size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod); + +/*! ZSTD_initStatic*() : + * Initialize an object using a pre-allocated fixed-size buffer. + * workspace: The memory area to emplace the object into. + * Provided pointer *must be 8-bytes aligned*. + * Buffer must outlive object. + * workspaceSize: Use ZSTD_estimate*Size() to determine + * how large workspace must be to support target scenario. + * @return : pointer to object (same address as workspace, just different type), + * or NULL if error (size too small, incorrect alignment, etc.) + * Note : zstd will never resize nor malloc() when using a static buffer. + * If the object requires more memory than available, + * zstd will just error out (typically ZSTD_error_memory_allocation). + * Note 2 : there is no corresponding "free" function. + * Since workspace is allocated externally, it must be freed externally too. + * Note 3 : cParams : use ZSTD_getCParams() to convert a compression level + * into its associated cParams. + * Limitation 1 : currently not compatible with internal dictionary creation, triggered by + * ZSTD_CCtx_loadDictionary(), ZSTD_initCStream_usingDict() or ZSTD_initDStream_usingDict(). + * Limitation 2 : static cctx currently not compatible with multi-threading. + * Limitation 3 : static dctx is incompatible with legacy support. + */ +ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_initStaticCCtx(void* workspace, size_t workspaceSize); +ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_initStaticCStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticCCtx() */ + +ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_initStaticDCtx(void* workspace, size_t workspaceSize); +ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_initStaticDStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticDCtx() */ + +ZSTDLIB_STATIC_API const ZSTD_CDict* ZSTD_initStaticCDict( + void* workspace, size_t workspaceSize, + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_compressionParameters cParams); + +ZSTDLIB_STATIC_API const ZSTD_DDict* ZSTD_initStaticDDict( + void* workspace, size_t workspaceSize, + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType); + + +/*! Custom memory allocation : + * These prototypes make it possible to pass your own allocation/free functions. + * ZSTD_customMem is provided at creation time, using ZSTD_create*_advanced() variants listed below. + * All allocation/free operations will be completed using these custom variants instead of regular ones. + */ +typedef void* (*ZSTD_allocFunction) (void* opaque, size_t size); +typedef void (*ZSTD_freeFunction) (void* opaque, void* address); +typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem; +static +#ifdef __GNUC__ +__attribute__((__unused__)) +#endif + +#if defined(__clang__) && __clang_major__ >= 5 +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif +ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */ +#if defined(__clang__) && __clang_major__ >= 5 +#pragma clang diagnostic pop +#endif + +ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem); +ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem); +ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem); +ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem); + +ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_compressionParameters cParams, + ZSTD_customMem customMem); + +/*! Thread pool : + * These prototypes make it possible to share a thread pool among multiple compression contexts. + * This can limit resources for applications with multiple threads where each one uses + * a threaded compression mode (via ZSTD_c_nbWorkers parameter). + * ZSTD_createThreadPool creates a new thread pool with a given number of threads. + * Note that the lifetime of such pool must exist while being used. + * ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value + * to use an internal thread pool). + * ZSTD_freeThreadPool frees a thread pool, accepts NULL pointer. + */ +typedef struct POOL_ctx_s ZSTD_threadPool; +ZSTDLIB_STATIC_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads); +ZSTDLIB_STATIC_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool); + + +/* + * This API is temporary and is expected to change or disappear in the future! + */ +ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced2( + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + const ZSTD_CCtx_params* cctxParams, + ZSTD_customMem customMem); + +ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_advanced( + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + ZSTD_customMem customMem); + + +/*************************************** +* Advanced compression functions +***************************************/ + +/*! ZSTD_createCDict_byReference() : + * Create a digested dictionary for compression + * Dictionary content is just referenced, not duplicated. + * As a consequence, `dictBuffer` **must** outlive CDict, + * and its content must remain unmodified throughout the lifetime of CDict. + * note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */ +ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel); + +/*! ZSTD_getCParams() : + * @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize. + * `estimatedSrcSize` value is optional, select 0 if not known */ +ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize); + +/*! ZSTD_getParams() : + * same as ZSTD_getCParams(), but @return a full `ZSTD_parameters` object instead of sub-component `ZSTD_compressionParameters`. + * All fields of `ZSTD_frameParameters` are set to default : contentSize=1, checksum=0, noDictID=0 */ +ZSTDLIB_STATIC_API ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize); + +/*! ZSTD_checkCParams() : + * Ensure param values remain within authorized range. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()) */ +ZSTDLIB_STATIC_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params); + +/*! ZSTD_adjustCParams() : + * optimize params for a given `srcSize` and `dictSize`. + * `srcSize` can be unknown, in which case use ZSTD_CONTENTSIZE_UNKNOWN. + * `dictSize` must be `0` when there is no dictionary. + * cPar can be invalid : all parameters will be clamped within valid range in the @return struct. + * This function never fails (wide contract) */ +ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize); + +/*! ZSTD_CCtx_setCParams() : + * Set all parameters provided within @p cparams into the working @p cctx. + * Note : if modifying parameters during compression (MT mode only), + * note that changes to the .windowLog parameter will be ignored. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()). + * On failure, no parameters are updated. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setCParams(ZSTD_CCtx* cctx, ZSTD_compressionParameters cparams); + +/*! ZSTD_CCtx_setFParams() : + * Set all parameters provided within @p fparams into the working @p cctx. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setFParams(ZSTD_CCtx* cctx, ZSTD_frameParameters fparams); + +/*! ZSTD_CCtx_setParams() : + * Set all parameters provided within @p params into the working @p cctx. + * @return 0 on success, or an error code (can be checked with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParams(ZSTD_CCtx* cctx, ZSTD_parameters params); + +/*! ZSTD_compress_advanced() : + * Note : this function is now DEPRECATED. + * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters. + * This prototype will generate compilation warnings. */ +ZSTD_DEPRECATED("use ZSTD_compress2") +ZSTDLIB_STATIC_API +size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const void* dict,size_t dictSize, + ZSTD_parameters params); + +/*! ZSTD_compress_usingCDict_advanced() : + * Note : this function is now DEPRECATED. + * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_loadDictionary() and other parameter setters. + * This prototype will generate compilation warnings. */ +ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary") +ZSTDLIB_STATIC_API +size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + const ZSTD_CDict* cdict, + ZSTD_frameParameters fParams); + + +/*! ZSTD_CCtx_loadDictionary_byReference() : + * Same as ZSTD_CCtx_loadDictionary(), but dictionary content is referenced, instead of being copied into CCtx. + * It saves some memory, but also requires that `dict` outlives its usage within `cctx` */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_byReference(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); + +/*! ZSTD_CCtx_loadDictionary_advanced() : + * Same as ZSTD_CCtx_loadDictionary(), but gives finer control over + * how to load the dictionary (by copy ? by reference ?) + * and how to interpret it (automatic ? force raw mode ? full mode only ?) */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType); + +/*! ZSTD_CCtx_refPrefix_advanced() : + * Same as ZSTD_CCtx_refPrefix(), but gives finer control over + * how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType); + +/* === experimental parameters === */ +/* these parameters can be used with ZSTD_setParameter() + * they are not guaranteed to remain supported in the future */ + + /* Enables rsyncable mode, + * which makes compressed files more rsync friendly + * by adding periodic synchronization points to the compressed data. + * The target average block size is ZSTD_c_jobSize / 2. + * It's possible to modify the job size to increase or decrease + * the granularity of the synchronization point. + * Once the jobSize is smaller than the window size, + * it will result in compression ratio degradation. + * NOTE 1: rsyncable mode only works when multithreading is enabled. + * NOTE 2: rsyncable performs poorly in combination with long range mode, + * since it will decrease the effectiveness of synchronization points, + * though mileage may vary. + * NOTE 3: Rsyncable mode limits maximum compression speed to ~400 MB/s. + * If the selected compression level is already running significantly slower, + * the overall speed won't be significantly impacted. + */ + #define ZSTD_c_rsyncable ZSTD_c_experimentalParam1 + +/* Select a compression format. + * The value must be of type ZSTD_format_e. + * See ZSTD_format_e enum definition for details */ +#define ZSTD_c_format ZSTD_c_experimentalParam2 + +/* Force back-reference distances to remain < windowSize, + * even when referencing into Dictionary content (default:0) */ +#define ZSTD_c_forceMaxWindow ZSTD_c_experimentalParam3 + +/* Controls whether the contents of a CDict + * are used in place, or copied into the working context. + * Accepts values from the ZSTD_dictAttachPref_e enum. + * See the comments on that enum for an explanation of the feature. */ +#define ZSTD_c_forceAttachDict ZSTD_c_experimentalParam4 + +/* Controlled with ZSTD_ParamSwitch_e enum. + * Default is ZSTD_ps_auto. + * Set to ZSTD_ps_disable to never compress literals. + * Set to ZSTD_ps_enable to always compress literals. (Note: uncompressed literals + * may still be emitted if huffman is not beneficial to use.) + * + * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use + * literals compression based on the compression parameters - specifically, + * negative compression levels do not use literal compression. + */ +#define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5 + +/* User's best guess of source size. + * Hint is not valid when srcSizeHint == 0. + * There is no guarantee that hint is close to actual source size, + * but compression ratio may regress significantly if guess considerably underestimates */ +#define ZSTD_c_srcSizeHint ZSTD_c_experimentalParam7 + +/* Controls whether the new and experimental "dedicated dictionary search + * structure" can be used. This feature is still rough around the edges, be + * prepared for surprising behavior! + * + * How to use it: + * + * When using a CDict, whether to use this feature or not is controlled at + * CDict creation, and it must be set in a CCtxParams set passed into that + * construction (via ZSTD_createCDict_advanced2()). A compression will then + * use the feature or not based on how the CDict was constructed; the value of + * this param, set in the CCtx, will have no effect. + * + * However, when a dictionary buffer is passed into a CCtx, such as via + * ZSTD_CCtx_loadDictionary(), this param can be set on the CCtx to control + * whether the CDict that is created internally can use the feature or not. + * + * What it does: + * + * Normally, the internal data structures of the CDict are analogous to what + * would be stored in a CCtx after compressing the contents of a dictionary. + * To an approximation, a compression using a dictionary can then use those + * data structures to simply continue what is effectively a streaming + * compression where the simulated compression of the dictionary left off. + * Which is to say, the search structures in the CDict are normally the same + * format as in the CCtx. + * + * It is possible to do better, since the CDict is not like a CCtx: the search + * structures are written once during CDict creation, and then are only read + * after that, while the search structures in the CCtx are both read and + * written as the compression goes along. This means we can choose a search + * structure for the dictionary that is read-optimized. + * + * This feature enables the use of that different structure. + * + * Note that some of the members of the ZSTD_compressionParameters struct have + * different semantics and constraints in the dedicated search structure. It is + * highly recommended that you simply set a compression level in the CCtxParams + * you pass into the CDict creation call, and avoid messing with the cParams + * directly. + * + * Effects: + * + * This will only have any effect when the selected ZSTD_strategy + * implementation supports this feature. Currently, that's limited to + * ZSTD_greedy, ZSTD_lazy, and ZSTD_lazy2. + * + * Note that this means that the CDict tables can no longer be copied into the + * CCtx, so the dict attachment mode ZSTD_dictForceCopy will no longer be + * usable. The dictionary can only be attached or reloaded. + * + * In general, you should expect compression to be faster--sometimes very much + * so--and CDict creation to be slightly slower. Eventually, we will probably + * make this mode the default. + */ +#define ZSTD_c_enableDedicatedDictSearch ZSTD_c_experimentalParam8 + +/* ZSTD_c_stableInBuffer + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable. + * + * Tells the compressor that input data presented with ZSTD_inBuffer + * will ALWAYS be the same between calls. + * Technically, the @src pointer must never be changed, + * and the @pos field can only be updated by zstd. + * However, it's possible to increase the @size field, + * allowing scenarios where more data can be appended after compressions starts. + * These conditions are checked by the compressor, + * and compression will fail if they are not respected. + * Also, data in the ZSTD_inBuffer within the range [src, src + pos) + * MUST not be modified during compression or it will result in data corruption. + * + * When this flag is enabled zstd won't allocate an input window buffer, + * because the user guarantees it can reference the ZSTD_inBuffer until + * the frame is complete. But, it will still allocate an output buffer + * large enough to fit a block (see ZSTD_c_stableOutBuffer). This will also + * avoid the memcpy() from the input buffer to the input window buffer. + * + * NOTE: So long as the ZSTD_inBuffer always points to valid memory, using + * this flag is ALWAYS memory safe, and will never access out-of-bounds + * memory. However, compression WILL fail if conditions are not respected. + * + * WARNING: The data in the ZSTD_inBuffer in the range [src, src + pos) MUST + * not be modified during compression or it will result in data corruption. + * This is because zstd needs to reference data in the ZSTD_inBuffer to find + * matches. Normally zstd maintains its own window buffer for this purpose, + * but passing this flag tells zstd to rely on user provided buffer instead. + */ +#define ZSTD_c_stableInBuffer ZSTD_c_experimentalParam9 + +/* ZSTD_c_stableOutBuffer + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable. + * + * Tells he compressor that the ZSTD_outBuffer will not be resized between + * calls. Specifically: (out.size - out.pos) will never grow. This gives the + * compressor the freedom to say: If the compressed data doesn't fit in the + * output buffer then return ZSTD_error_dstSizeTooSmall. This allows us to + * always decompress directly into the output buffer, instead of decompressing + * into an internal buffer and copying to the output buffer. + * + * When this flag is enabled zstd won't allocate an output buffer, because + * it can write directly to the ZSTD_outBuffer. It will still allocate the + * input window buffer (see ZSTD_c_stableInBuffer). + * + * Zstd will check that (out.size - out.pos) never grows and return an error + * if it does. While not strictly necessary, this should prevent surprises. + */ +#define ZSTD_c_stableOutBuffer ZSTD_c_experimentalParam10 + +/* ZSTD_c_blockDelimiters + * Default is 0 == ZSTD_sf_noBlockDelimiters. + * + * For use with sequence compression API: ZSTD_compressSequences(). + * + * Designates whether or not the given array of ZSTD_Sequence contains block delimiters + * and last literals, which are defined as sequences with offset == 0 and matchLength == 0. + * See the definition of ZSTD_Sequence for more specifics. + */ +#define ZSTD_c_blockDelimiters ZSTD_c_experimentalParam11 + +/* ZSTD_c_validateSequences + * Default is 0 == disabled. Set to 1 to enable sequence validation. + * + * For use with sequence compression API: ZSTD_compressSequences*(). + * Designates whether or not provided sequences are validated within ZSTD_compressSequences*() + * during function execution. + * + * When Sequence validation is disabled (default), Sequences are compressed as-is, + * so they must correct, otherwise it would result in a corruption error. + * + * Sequence validation adds some protection, by ensuring that all values respect boundary conditions. + * If a Sequence is detected invalid (see doc/zstd_compression_format.md for + * specifics regarding offset/matchlength requirements) then the function will bail out and + * return an error. + */ +#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12 + +/* ZSTD_c_blockSplitterLevel + * note: this parameter only influences the first splitter stage, + * which is active before producing the sequences. + * ZSTD_c_splitAfterSequences controls the next splitter stage, + * which is active after sequence production. + * Note that both can be combined. + * Allowed values are between 0 and ZSTD_BLOCKSPLITTER_LEVEL_MAX included. + * 0 means "auto", which will select a value depending on current ZSTD_c_strategy. + * 1 means no splitting. + * Then, values from 2 to 6 are sorted in increasing cpu load order. + * + * Note that currently the first block is never split, + * to ensure expansion guarantees in presence of incompressible data. + */ +#define ZSTD_BLOCKSPLITTER_LEVEL_MAX 6 +#define ZSTD_c_blockSplitterLevel ZSTD_c_experimentalParam20 + +/* ZSTD_c_splitAfterSequences + * This is a stronger splitter algorithm, + * based on actual sequences previously produced by the selected parser. + * It's also slower, and as a consequence, mostly used for high compression levels. + * While the post-splitter does overlap with the pre-splitter, + * both can nonetheless be combined, + * notably with ZSTD_c_blockSplitterLevel at ZSTD_BLOCKSPLITTER_LEVEL_MAX, + * resulting in higher compression ratio than just one of them. + * + * Default is ZSTD_ps_auto. + * Set to ZSTD_ps_disable to never use block splitter. + * Set to ZSTD_ps_enable to always use block splitter. + * + * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use + * block splitting based on the compression parameters. + */ +#define ZSTD_c_splitAfterSequences ZSTD_c_experimentalParam13 + +/* ZSTD_c_useRowMatchFinder + * Controlled with ZSTD_ParamSwitch_e enum. + * Default is ZSTD_ps_auto. + * Set to ZSTD_ps_disable to never use row-based matchfinder. + * Set to ZSTD_ps_enable to force usage of row-based matchfinder. + * + * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use + * the row-based matchfinder based on support for SIMD instructions and the window log. + * Note that this only pertains to compression strategies: greedy, lazy, and lazy2 + */ +#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14 + +/* ZSTD_c_deterministicRefPrefix + * Default is 0 == disabled. Set to 1 to enable. + * + * Zstd produces different results for prefix compression when the prefix is + * directly adjacent to the data about to be compressed vs. when it isn't. + * This is because zstd detects that the two buffers are contiguous and it can + * use a more efficient match finding algorithm. However, this produces different + * results than when the two buffers are non-contiguous. This flag forces zstd + * to always load the prefix in non-contiguous mode, even if it happens to be + * adjacent to the data, to guarantee determinism. + * + * If you really care about determinism when using a dictionary or prefix, + * like when doing delta compression, you should select this option. It comes + * at a speed penalty of about ~2.5% if the dictionary and data happened to be + * contiguous, and is free if they weren't contiguous. We don't expect that + * intentionally making the dictionary and data contiguous will be worth the + * cost to memcpy() the data. + */ +#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15 + +/* ZSTD_c_prefetchCDictTables + * Controlled with ZSTD_ParamSwitch_e enum. Default is ZSTD_ps_auto. + * + * In some situations, zstd uses CDict tables in-place rather than copying them + * into the working context. (See docs on ZSTD_dictAttachPref_e above for details). + * In such situations, compression speed is seriously impacted when CDict tables are + * "cold" (outside CPU cache). This parameter instructs zstd to prefetch CDict tables + * when they are used in-place. + * + * For sufficiently small inputs, the cost of the prefetch will outweigh the benefit. + * For sufficiently large inputs, zstd will by default memcpy() CDict tables + * into the working context, so there is no need to prefetch. This parameter is + * targeted at a middle range of input sizes, where a prefetch is cheap enough to be + * useful but memcpy() is too expensive. The exact range of input sizes where this + * makes sense is best determined by careful experimentation. + * + * Note: for this parameter, ZSTD_ps_auto is currently equivalent to ZSTD_ps_disable, + * but in the future zstd may conditionally enable this feature via an auto-detection + * heuristic for cold CDicts. + * Use ZSTD_ps_disable to opt out of prefetching under any circumstances. + */ +#define ZSTD_c_prefetchCDictTables ZSTD_c_experimentalParam16 + +/* ZSTD_c_enableSeqProducerFallback + * Allowed values are 0 (disable) and 1 (enable). The default setting is 0. + * + * Controls whether zstd will fall back to an internal sequence producer if an + * external sequence producer is registered and returns an error code. This fallback + * is block-by-block: the internal sequence producer will only be called for blocks + * where the external sequence producer returns an error code. Fallback parsing will + * follow any other cParam settings, such as compression level, the same as in a + * normal (fully-internal) compression operation. + * + * The user is strongly encouraged to read the full Block-Level Sequence Producer API + * documentation (below) before setting this parameter. */ +#define ZSTD_c_enableSeqProducerFallback ZSTD_c_experimentalParam17 + +/* ZSTD_c_maxBlockSize + * Allowed values are between 1KB and ZSTD_BLOCKSIZE_MAX (128KB). + * The default is ZSTD_BLOCKSIZE_MAX, and setting to 0 will set to the default. + * + * This parameter can be used to set an upper bound on the blocksize + * that overrides the default ZSTD_BLOCKSIZE_MAX. It cannot be used to set upper + * bounds greater than ZSTD_BLOCKSIZE_MAX or bounds lower than 1KB (will make + * compressBound() inaccurate). Only currently meant to be used for testing. + */ +#define ZSTD_c_maxBlockSize ZSTD_c_experimentalParam18 + +/* ZSTD_c_repcodeResolution + * This parameter only has an effect if ZSTD_c_blockDelimiters is + * set to ZSTD_sf_explicitBlockDelimiters (may change in the future). + * + * This parameter affects how zstd parses external sequences, + * provided via the ZSTD_compressSequences*() API + * or from an external block-level sequence producer. + * + * If set to ZSTD_ps_enable, the library will check for repeated offsets within + * external sequences, even if those repcodes are not explicitly indicated in + * the "rep" field. Note that this is the only way to exploit repcode matches + * while using compressSequences*() or an external sequence producer, since zstd + * currently ignores the "rep" field of external sequences. + * + * If set to ZSTD_ps_disable, the library will not exploit repeated offsets in + * external sequences, regardless of whether the "rep" field has been set. This + * reduces sequence compression overhead by about 25% while sacrificing some + * compression ratio. + * + * The default value is ZSTD_ps_auto, for which the library will enable/disable + * based on compression level (currently: level<10 disables, level>=10 enables). + */ +#define ZSTD_c_repcodeResolution ZSTD_c_experimentalParam19 +#define ZSTD_c_searchForExternalRepcodes ZSTD_c_experimentalParam19 /* older name */ + + +/*! ZSTD_CCtx_getParameter() : + * Get the requested compression parameter value, selected by enum ZSTD_cParameter, + * and store it into int* value. + * @return : 0, or an error code (which can be tested with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value); + + +/*! ZSTD_CCtx_params : + * Quick howto : + * - ZSTD_createCCtxParams() : Create a ZSTD_CCtx_params structure + * - ZSTD_CCtxParams_setParameter() : Push parameters one by one into + * an existing ZSTD_CCtx_params structure. + * This is similar to + * ZSTD_CCtx_setParameter(). + * - ZSTD_CCtx_setParametersUsingCCtxParams() : Apply parameters to + * an existing CCtx. + * These parameters will be applied to + * all subsequent frames. + * - ZSTD_compressStream2() : Do compression using the CCtx. + * - ZSTD_freeCCtxParams() : Free the memory, accept NULL pointer. + * + * This can be used with ZSTD_estimateCCtxSize_advanced_usingCCtxParams() + * for static allocation of CCtx for single-threaded compression. + */ +ZSTDLIB_STATIC_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void); +ZSTDLIB_STATIC_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */ + +/*! ZSTD_CCtxParams_reset() : + * Reset params to default values. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_reset(ZSTD_CCtx_params* params); + +/*! ZSTD_CCtxParams_init() : + * Initializes the compression parameters of cctxParams according to + * compression level. All other parameters are reset to their default values. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel); + +/*! ZSTD_CCtxParams_init_advanced() : + * Initializes the compression and frame parameters of cctxParams according to + * params. All other parameters are reset to their default values. + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params); + +/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+ + * Similar to ZSTD_CCtx_setParameter. + * Set one compression parameter, selected by enum ZSTD_cParameter. + * Parameters must be applied to a ZSTD_CCtx using + * ZSTD_CCtx_setParametersUsingCCtxParams(). + * @result : a code representing success or failure (which can be tested with + * ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int value); + +/*! ZSTD_CCtxParams_getParameter() : + * Similar to ZSTD_CCtx_getParameter. + * Get the requested value of one compression parameter, selected by enum ZSTD_cParameter. + * @result : 0, or an error code (which can be tested with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value); + +/*! ZSTD_CCtx_setParametersUsingCCtxParams() : + * Apply a set of ZSTD_CCtx_params to the compression context. + * This can be done even after compression is started, + * if nbWorkers==0, this will have no impact until a new compression is started. + * if nbWorkers>=1, new parameters will be picked up at next job, + * with a few restrictions (windowLog, pledgedSrcSize, nbWorkers, jobSize, and overlapLog are not updated). + */ +ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParametersUsingCCtxParams( + ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params); + +/*! ZSTD_compressStream2_simpleArgs() : + * Same as ZSTD_compressStream2(), + * but using only integral types as arguments. + * This variant might be helpful for binders from dynamic languages + * which have troubles handling structures containing memory pointers. + */ +ZSTDLIB_STATIC_API size_t ZSTD_compressStream2_simpleArgs ( + ZSTD_CCtx* cctx, + void* dst, size_t dstCapacity, size_t* dstPos, + const void* src, size_t srcSize, size_t* srcPos, + ZSTD_EndDirective endOp); + + +/*************************************** +* Advanced decompression functions +***************************************/ + +/*! ZSTD_isFrame() : + * Tells if the content of `buffer` starts with a valid Frame Identifier. + * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0. + * Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled. + * Note 3 : Skippable Frame Identifiers are considered valid. */ +ZSTDLIB_STATIC_API unsigned ZSTD_isFrame(const void* buffer, size_t size); + +/*! ZSTD_createDDict_byReference() : + * Create a digested dictionary, ready to start decompression operation without startup delay. + * Dictionary content is referenced, and therefore stays in dictBuffer. + * It is important that dictBuffer outlives DDict, + * it must remain read accessible throughout the lifetime of DDict */ +ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize); + +/*! ZSTD_DCtx_loadDictionary_byReference() : + * Same as ZSTD_DCtx_loadDictionary(), + * but references `dict` content instead of copying it into `dctx`. + * This saves memory if `dict` remains around., + * However, it's imperative that `dict` remains accessible (and unmodified) while being used, so it must outlive decompression. */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_byReference(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); + +/*! ZSTD_DCtx_loadDictionary_advanced() : + * Same as ZSTD_DCtx_loadDictionary(), + * but gives direct control over + * how to load the dictionary (by copy ? by reference ?) + * and how to interpret it (automatic ? force raw mode ? full mode only ?). */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_advanced(ZSTD_DCtx* dctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType); + +/*! ZSTD_DCtx_refPrefix_advanced() : + * Same as ZSTD_DCtx_refPrefix(), but gives finer control over + * how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType); + +/*! ZSTD_DCtx_setMaxWindowSize() : + * Refuses allocating internal buffers for frames requiring a window size larger than provided limit. + * This protects a decoder context from reserving too much memory for itself (potential attack scenario). + * This parameter is only useful in streaming mode, since no internal buffer is allocated in single-pass mode. + * By default, a decompression context accepts all window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT) + * @return : 0, or an error code (which can be tested using ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize); + +/*! ZSTD_DCtx_getParameter() : + * Get the requested decompression parameter value, selected by enum ZSTD_dParameter, + * and store it into int* value. + * @return : 0, or an error code (which can be tested with ZSTD_isError()). + */ +ZSTDLIB_STATIC_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value); + +/* ZSTD_d_format + * experimental parameter, + * allowing selection between ZSTD_format_e input compression formats + */ +#define ZSTD_d_format ZSTD_d_experimentalParam1 +/* ZSTD_d_stableOutBuffer + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable. + * + * Tells the decompressor that the ZSTD_outBuffer will ALWAYS be the same + * between calls, except for the modifications that zstd makes to pos (the + * caller must not modify pos). This is checked by the decompressor, and + * decompression will fail if it ever changes. Therefore the ZSTD_outBuffer + * MUST be large enough to fit the entire decompressed frame. This will be + * checked when the frame content size is known. The data in the ZSTD_outBuffer + * in the range [dst, dst + pos) MUST not be modified during decompression + * or you will get data corruption. + * + * When this flag is enabled zstd won't allocate an output buffer, because + * it can write directly to the ZSTD_outBuffer, but it will still allocate + * an input buffer large enough to fit any compressed block. This will also + * avoid the memcpy() from the internal output buffer to the ZSTD_outBuffer. + * If you need to avoid the input buffer allocation use the buffer-less + * streaming API. + * + * NOTE: So long as the ZSTD_outBuffer always points to valid memory, using + * this flag is ALWAYS memory safe, and will never access out-of-bounds + * memory. However, decompression WILL fail if you violate the preconditions. + * + * WARNING: The data in the ZSTD_outBuffer in the range [dst, dst + pos) MUST + * not be modified during decompression or you will get data corruption. This + * is because zstd needs to reference data in the ZSTD_outBuffer to regenerate + * matches. Normally zstd maintains its own buffer for this purpose, but passing + * this flag tells zstd to use the user provided buffer. + */ +#define ZSTD_d_stableOutBuffer ZSTD_d_experimentalParam2 + +/* ZSTD_d_forceIgnoreChecksum + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable + * + * Tells the decompressor to skip checksum validation during decompression, regardless + * of whether checksumming was specified during compression. This offers some + * slight performance benefits, and may be useful for debugging. + * Param has values of type ZSTD_forceIgnoreChecksum_e + */ +#define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3 + +/* ZSTD_d_refMultipleDDicts + * Experimental parameter. + * Default is 0 == disabled. Set to 1 to enable + * + * If enabled and dctx is allocated on the heap, then additional memory will be allocated + * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict() + * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead + * store all references. At decompression time, the appropriate dictID is selected + * from the set of DDicts based on the dictID in the frame. + * + * Usage is simply calling ZSTD_refDDict() on multiple dict buffers. + * + * Param has values of byte ZSTD_refMultipleDDicts_e + * + * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory + * allocation for the hash table. ZSTD_freeDCtx() also frees this memory. + * Memory is allocated as per ZSTD_DCtx::customMem. + * + * Although this function allocates memory for the table, the user is still responsible for + * memory management of the underlying ZSTD_DDict* themselves. + */ +#define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4 + +/* ZSTD_d_disableHuffmanAssembly + * Set to 1 to disable the Huffman assembly implementation. + * The default value is 0, which allows zstd to use the Huffman assembly + * implementation if available. + * + * This parameter can be used to disable Huffman assembly at runtime. + * If you want to disable it at compile time you can define the macro + * ZSTD_DISABLE_ASM. + */ +#define ZSTD_d_disableHuffmanAssembly ZSTD_d_experimentalParam5 + +/* ZSTD_d_maxBlockSize + * Allowed values are between 1KB and ZSTD_BLOCKSIZE_MAX (128KB). + * The default is ZSTD_BLOCKSIZE_MAX, and setting to 0 will set to the default. + * + * Forces the decompressor to reject blocks whose content size is + * larger than the configured maxBlockSize. When maxBlockSize is + * larger than the windowSize, the windowSize is used instead. + * This saves memory on the decoder when you know all blocks are small. + * + * This option is typically used in conjunction with ZSTD_c_maxBlockSize. + * + * WARNING: This causes the decoder to reject otherwise valid frames + * that have block sizes larger than the configured maxBlockSize. + */ +#define ZSTD_d_maxBlockSize ZSTD_d_experimentalParam6 + + +/*! ZSTD_DCtx_setFormat() : + * This function is REDUNDANT. Prefer ZSTD_DCtx_setParameter(). + * Instruct the decoder context about what kind of data to decode next. + * This instruction is mandatory to decode data without a fully-formed header, + * such ZSTD_f_zstd1_magicless for example. + * @return : 0, or an error code (which can be tested using ZSTD_isError()). */ +ZSTD_DEPRECATED("use ZSTD_DCtx_setParameter() instead") +ZSTDLIB_STATIC_API +size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format); + +/*! ZSTD_decompressStream_simpleArgs() : + * Same as ZSTD_decompressStream(), + * but using only integral types as arguments. + * This can be helpful for binders from dynamic languages + * which have troubles handling structures containing memory pointers. + */ +ZSTDLIB_STATIC_API size_t ZSTD_decompressStream_simpleArgs ( + ZSTD_DCtx* dctx, + void* dst, size_t dstCapacity, size_t* dstPos, + const void* src, size_t srcSize, size_t* srcPos); + + +/******************************************************************** +* Advanced streaming functions +* Warning : most of these functions are now redundant with the Advanced API. +* Once Advanced API reaches "stable" status, +* redundant functions will be deprecated, and then at some point removed. +********************************************************************/ + +/*===== Advanced Streaming compression functions =====*/ + +/*! ZSTD_initCStream_srcSize() : + * This function is DEPRECATED, and equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) + * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * + * pledgedSrcSize must be correct. If it is not known at init time, use + * ZSTD_CONTENTSIZE_UNKNOWN. Note that, for compatibility with older programs, + * "0" also disables frame content size field. It may be enabled in the future. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, + int compressionLevel, + unsigned long long pledgedSrcSize); + +/*! ZSTD_initCStream_usingDict() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); + * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); + * + * Creates of an internal CDict (incompatible with static CCtx), except if + * dict == NULL or dictSize < 8, in which case no dict is used. + * Note: dict is loaded with ZSTD_dct_auto (treated as a full zstd dictionary if + * it begins with ZSTD_MAGIC_DICTIONARY, else as raw content) and ZSTD_dlm_byCopy. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, + const void* dict, size_t dictSize, + int compressionLevel); + +/*! ZSTD_initCStream_advanced() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setParams(zcs, params); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); + * + * dict is loaded with ZSTD_dct_auto and ZSTD_dlm_byCopy. + * pledgedSrcSize must be correct. + * If srcSize is not known at init time, use value ZSTD_CONTENTSIZE_UNKNOWN. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, + const void* dict, size_t dictSize, + ZSTD_parameters params, + unsigned long long pledgedSrcSize); + +/*! ZSTD_initCStream_usingCDict() : + * This function is DEPRECATED, and equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_refCDict(zcs, cdict); + * + * note : cdict will just be referenced, and must outlive compression session + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); + +/*! ZSTD_initCStream_usingCDict_advanced() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setFParams(zcs, fParams); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * ZSTD_CCtx_refCDict(zcs, cdict); + * + * same as ZSTD_initCStream_usingCDict(), with control over frame parameters. + * pledgedSrcSize must be correct. If srcSize is not known at init time, use + * value ZSTD_CONTENTSIZE_UNKNOWN. + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, + const ZSTD_CDict* cdict, + ZSTD_frameParameters fParams, + unsigned long long pledgedSrcSize); + +/*! ZSTD_resetCStream() : + * This function is DEPRECATED, and is equivalent to: + * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); + * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); + * Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but + * ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be + * explicitly specified. + * + * start a new frame, using same parameters from previous frame. + * This is typically useful to skip dictionary loading stage, since it will reuse it in-place. + * Note that zcs must be init at least once before using ZSTD_resetCStream(). + * If pledgedSrcSize is not known at reset time, use macro ZSTD_CONTENTSIZE_UNKNOWN. + * If pledgedSrcSize > 0, its value must be correct, as it will be written in header, and controlled at the end. + * For the time being, pledgedSrcSize==0 is interpreted as "srcSize unknown" for compatibility with older programs, + * but it will change to mean "empty" in future version, so use macro ZSTD_CONTENTSIZE_UNKNOWN instead. + * @return : 0, or an error code (which can be tested using ZSTD_isError()) + * This prototype will generate compilation warnings. + */ +ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API +size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); + + +typedef struct { + unsigned long long ingested; /* nb input bytes read and buffered */ + unsigned long long consumed; /* nb input bytes actually compressed */ + unsigned long long produced; /* nb of compressed bytes generated and buffered */ + unsigned long long flushed; /* nb of compressed bytes flushed : not provided; can be tracked from caller side */ + unsigned currentJobID; /* MT only : latest started job nb */ + unsigned nbActiveWorkers; /* MT only : nb of workers actively compressing at probe time */ +} ZSTD_frameProgression; + +/* ZSTD_getFrameProgression() : + * tells how much data has been ingested (read from input) + * consumed (input actually compressed) and produced (output) for current frame. + * Note : (ingested - consumed) is amount of input data buffered internally, not yet compressed. + * Aggregates progression inside active worker threads. + */ +ZSTDLIB_STATIC_API ZSTD_frameProgression ZSTD_getFrameProgression(const ZSTD_CCtx* cctx); + +/*! ZSTD_toFlushNow() : + * Tell how many bytes are ready to be flushed immediately. + * Useful for multithreading scenarios (nbWorkers >= 1). + * Probe the oldest active job, defined as oldest job not yet entirely flushed, + * and check its output buffer. + * @return : amount of data stored in oldest job and ready to be flushed immediately. + * if @return == 0, it means either : + * + there is no active job (could be checked with ZSTD_frameProgression()), or + * + oldest job is still actively compressing data, + * but everything it has produced has also been flushed so far, + * therefore flush speed is limited by production speed of oldest job + * irrespective of the speed of concurrent (and newer) jobs. + */ +ZSTDLIB_STATIC_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx); + + +/*===== Advanced Streaming decompression functions =====*/ + +/*! + * This function is deprecated, and is equivalent to: + * + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * ZSTD_DCtx_loadDictionary(zds, dict, dictSize); + * + * note: no dictionary will be used if dict == NULL or dictSize < 8 + */ +ZSTD_DEPRECATED("use ZSTD_DCtx_reset + ZSTD_DCtx_loadDictionary, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); + +/*! + * This function is deprecated, and is equivalent to: + * + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * ZSTD_DCtx_refDDict(zds, ddict); + * + * note : ddict is referenced, it must outlive decompression session + */ +ZSTD_DEPRECATED("use ZSTD_DCtx_reset + ZSTD_DCtx_refDDict, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict); + +/*! + * This function is deprecated, and is equivalent to: + * + * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); + * + * reuse decompression parameters from previous init; saves dictionary loading + */ +ZSTD_DEPRECATED("use ZSTD_DCtx_reset, see zstd.h for detailed instructions") +ZSTDLIB_STATIC_API size_t ZSTD_resetDStream(ZSTD_DStream* zds); + + +/* ********************* BLOCK-LEVEL SEQUENCE PRODUCER API ********************* + * + * *** OVERVIEW *** + * The Block-Level Sequence Producer API allows users to provide their own custom + * sequence producer which libzstd invokes to process each block. The produced list + * of sequences (literals and matches) is then post-processed by libzstd to produce + * valid compressed blocks. + * + * This block-level offload API is a more granular complement of the existing + * frame-level offload API compressSequences() (introduced in v1.5.1). It offers + * an easier migration story for applications already integrated with libzstd: the + * user application continues to invoke the same compression functions + * ZSTD_compress2() or ZSTD_compressStream2() as usual, and transparently benefits + * from the specific advantages of the external sequence producer. For example, + * the sequence producer could be tuned to take advantage of known characteristics + * of the input, to offer better speed / ratio, or could leverage hardware + * acceleration not available within libzstd itself. + * + * See contrib/externalSequenceProducer for an example program employing the + * Block-Level Sequence Producer API. + * + * *** USAGE *** + * The user is responsible for implementing a function of type + * ZSTD_sequenceProducer_F. For each block, zstd will pass the following + * arguments to the user-provided function: + * + * - sequenceProducerState: a pointer to a user-managed state for the sequence + * producer. + * + * - outSeqs, outSeqsCapacity: an output buffer for the sequence producer. + * outSeqsCapacity is guaranteed >= ZSTD_sequenceBound(srcSize). The memory + * backing outSeqs is managed by the CCtx. + * + * - src, srcSize: an input buffer for the sequence producer to parse. + * srcSize is guaranteed to be <= ZSTD_BLOCKSIZE_MAX. + * + * - dict, dictSize: a history buffer, which may be empty, which the sequence + * producer may reference as it parses the src buffer. Currently, zstd will + * always pass dictSize == 0 into external sequence producers, but this will + * change in the future. + * + * - compressionLevel: a signed integer representing the zstd compression level + * set by the user for the current operation. The sequence producer may choose + * to use this information to change its compression strategy and speed/ratio + * tradeoff. Note: the compression level does not reflect zstd parameters set + * through the advanced API. + * + * - windowSize: a size_t representing the maximum allowed offset for external + * sequences. Note that sequence offsets are sometimes allowed to exceed the + * windowSize if a dictionary is present, see doc/zstd_compression_format.md + * for details. + * + * The user-provided function shall return a size_t representing the number of + * sequences written to outSeqs. This return value will be treated as an error + * code if it is greater than outSeqsCapacity. The return value must be non-zero + * if srcSize is non-zero. The ZSTD_SEQUENCE_PRODUCER_ERROR macro is provided + * for convenience, but any value greater than outSeqsCapacity will be treated as + * an error code. + * + * If the user-provided function does not return an error code, the sequences + * written to outSeqs must be a valid parse of the src buffer. Data corruption may + * occur if the parse is not valid. A parse is defined to be valid if the + * following conditions hold: + * - The sum of matchLengths and literalLengths must equal srcSize. + * - All sequences in the parse, except for the final sequence, must have + * matchLength >= ZSTD_MINMATCH_MIN. The final sequence must have + * matchLength >= ZSTD_MINMATCH_MIN or matchLength == 0. + * - All offsets must respect the windowSize parameter as specified in + * doc/zstd_compression_format.md. + * - If the final sequence has matchLength == 0, it must also have offset == 0. + * + * zstd will only validate these conditions (and fail compression if they do not + * hold) if the ZSTD_c_validateSequences cParam is enabled. Note that sequence + * validation has a performance cost. + * + * If the user-provided function returns an error, zstd will either fall back + * to an internal sequence producer or fail the compression operation. The user can + * choose between the two behaviors by setting the ZSTD_c_enableSeqProducerFallback + * cParam. Fallback compression will follow any other cParam settings, such as + * compression level, the same as in a normal compression operation. + * + * The user shall instruct zstd to use a particular ZSTD_sequenceProducer_F + * function by calling + * ZSTD_registerSequenceProducer(cctx, + * sequenceProducerState, + * sequenceProducer) + * This setting will persist until the next parameter reset of the CCtx. + * + * The sequenceProducerState must be initialized by the user before calling + * ZSTD_registerSequenceProducer(). The user is responsible for destroying the + * sequenceProducerState. + * + * *** LIMITATIONS *** + * This API is compatible with all zstd compression APIs which respect advanced parameters. + * However, there are three limitations: + * + * First, the ZSTD_c_enableLongDistanceMatching cParam is not currently supported. + * COMPRESSION WILL FAIL if it is enabled and the user tries to compress with a block-level + * external sequence producer. + * - Note that ZSTD_c_enableLongDistanceMatching is auto-enabled by default in some + * cases (see its documentation for details). Users must explicitly set + * ZSTD_c_enableLongDistanceMatching to ZSTD_ps_disable in such cases if an external + * sequence producer is registered. + * - As of this writing, ZSTD_c_enableLongDistanceMatching is disabled by default + * whenever ZSTD_c_windowLog < 128MB, but that's subject to change. Users should + * check the docs on ZSTD_c_enableLongDistanceMatching whenever the Block-Level Sequence + * Producer API is used in conjunction with advanced settings (like ZSTD_c_windowLog). + * + * Second, history buffers are not currently supported. Concretely, zstd will always pass + * dictSize == 0 to the external sequence producer (for now). This has two implications: + * - Dictionaries are not currently supported. Compression will *not* fail if the user + * references a dictionary, but the dictionary won't have any effect. + * - Stream history is not currently supported. All advanced compression APIs, including + * streaming APIs, work with external sequence producers, but each block is treated as + * an independent chunk without history from previous blocks. + * + * Third, multi-threading within a single compression is not currently supported. In other words, + * COMPRESSION WILL FAIL if ZSTD_c_nbWorkers > 0 and an external sequence producer is registered. + * Multi-threading across compressions is fine: simply create one CCtx per thread. + * + * Long-term, we plan to overcome all three limitations. There is no technical blocker to + * overcoming them. It is purely a question of engineering effort. + */ + +#define ZSTD_SEQUENCE_PRODUCER_ERROR ((size_t)(-1)) + +typedef size_t (*ZSTD_sequenceProducer_F) ( + void* sequenceProducerState, + ZSTD_Sequence* outSeqs, size_t outSeqsCapacity, + const void* src, size_t srcSize, + const void* dict, size_t dictSize, + int compressionLevel, + size_t windowSize +); + +/*! ZSTD_registerSequenceProducer() : + * Instruct zstd to use a block-level external sequence producer function. + * + * The sequenceProducerState must be initialized by the caller, and the caller is + * responsible for managing its lifetime. This parameter is sticky across + * compressions. It will remain set until the user explicitly resets compression + * parameters. + * + * Sequence producer registration is considered to be an "advanced parameter", + * part of the "advanced API". This means it will only have an effect on compression + * APIs which respect advanced parameters, such as compress2() and compressStream2(). + * Older compression APIs such as compressCCtx(), which predate the introduction of + * "advanced parameters", will ignore any external sequence producer setting. + * + * The sequence producer can be "cleared" by registering a NULL function pointer. This + * removes all limitations described above in the "LIMITATIONS" section of the API docs. + * + * The user is strongly encouraged to read the full API documentation (above) before + * calling this function. */ +ZSTDLIB_STATIC_API void +ZSTD_registerSequenceProducer( + ZSTD_CCtx* cctx, + void* sequenceProducerState, + ZSTD_sequenceProducer_F sequenceProducer +); + +/*! ZSTD_CCtxParams_registerSequenceProducer() : + * Same as ZSTD_registerSequenceProducer(), but operates on ZSTD_CCtx_params. + * This is used for accurate size estimation with ZSTD_estimateCCtxSize_usingCCtxParams(), + * which is needed when creating a ZSTD_CCtx with ZSTD_initStaticCCtx(). + * + * If you are using the external sequence producer API in a scenario where ZSTD_initStaticCCtx() + * is required, then this function is for you. Otherwise, you probably don't need it. + * + * See tests/zstreamtest.c for example usage. */ +ZSTDLIB_STATIC_API void +ZSTD_CCtxParams_registerSequenceProducer( + ZSTD_CCtx_params* params, + void* sequenceProducerState, + ZSTD_sequenceProducer_F sequenceProducer +); + + +/********************************************************************* +* Buffer-less and synchronous inner streaming functions (DEPRECATED) +* +* This API is deprecated, and will be removed in a future version. +* It allows streaming (de)compression with user allocated buffers. +* However, it is hard to use, and not as well tested as the rest of +* our API. +* +* Please use the normal streaming API instead: ZSTD_compressStream2, +* and ZSTD_decompressStream. +* If there is functionality that you need, but it doesn't provide, +* please open an issue on our GitHub. +********************************************************************* */ + +/** + Buffer-less streaming compression (synchronous mode) + + A ZSTD_CCtx object is required to track streaming operations. + Use ZSTD_createCCtx() / ZSTD_freeCCtx() to manage resource. + ZSTD_CCtx object can be reused multiple times within successive compression operations. + + Start by initializing a context. + Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression. + + Then, consume your input using ZSTD_compressContinue(). + There are some important considerations to keep in mind when using this advanced function : + - ZSTD_compressContinue() has no internal buffer. It uses externally provided buffers only. + - Interface is synchronous : input is consumed entirely and produces 1+ compressed blocks. + - Caller must ensure there is enough space in `dst` to store compressed data under worst case scenario. + Worst case evaluation is provided by ZSTD_compressBound(). + ZSTD_compressContinue() doesn't guarantee recover after a failed compression. + - ZSTD_compressContinue() presumes prior input ***is still accessible and unmodified*** (up to maximum distance size, see WindowLog). + It remembers all previous contiguous blocks, plus one separated memory segment (which can itself consists of multiple contiguous blocks) + - ZSTD_compressContinue() detects that prior input has been overwritten when `src` buffer overlaps. + In which case, it will "discard" the relevant memory section from its history. + + Finish a frame with ZSTD_compressEnd(), which will write the last block(s) and optional checksum. + It's possible to use srcSize==0, in which case, it will write a final empty block to end the frame. + Without last block mark, frames are considered unfinished (hence corrupted) by compliant decoders. + + `ZSTD_CCtx` object can be reused (ZSTD_compressBegin()) to compress again. +*/ + +/*===== Buffer-less streaming compression functions =====*/ +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel); +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel); +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */ + +ZSTD_DEPRECATED("This function will likely be removed in a future release. It is misleading and has very limited utility.") +ZSTDLIB_STATIC_API +size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize is not known, use ZSTD_CONTENTSIZE_UNKNOWN */ + +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); +ZSTD_DEPRECATED("The buffer-less API is deprecated in favor of the normal streaming API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); + +/* The ZSTD_compressBegin_advanced() and ZSTD_compressBegin_usingCDict_advanced() are now DEPRECATED and will generate a compiler warning */ +ZSTD_DEPRECATED("use advanced API to access custom parameters") +ZSTDLIB_STATIC_API +size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */ +ZSTD_DEPRECATED("use advanced API to access custom parameters") +ZSTDLIB_STATIC_API +size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */ +/** + Buffer-less streaming decompression (synchronous mode) + + A ZSTD_DCtx object is required to track streaming operations. + Use ZSTD_createDCtx() / ZSTD_freeDCtx() to manage it. + A ZSTD_DCtx object can be reused multiple times. + + First typical operation is to retrieve frame parameters, using ZSTD_getFrameHeader(). + Frame header is extracted from the beginning of compressed frame, so providing only the frame's beginning is enough. + Data fragment must be large enough to ensure successful decoding. + `ZSTD_frameHeaderSize_max` bytes is guaranteed to always be large enough. + result : 0 : successful decoding, the `ZSTD_frameHeader` structure is correctly filled. + >0 : `srcSize` is too small, please provide at least result bytes on next attempt. + errorCode, which can be tested using ZSTD_isError(). + + It fills a ZSTD_FrameHeader structure with important information to correctly decode the frame, + such as the dictionary ID, content size, or maximum back-reference distance (`windowSize`). + Note that these values could be wrong, either because of data corruption, or because a 3rd party deliberately spoofs false information. + As a consequence, check that values remain within valid application range. + For example, do not allocate memory blindly, check that `windowSize` is within expectation. + Each application can set its own limits, depending on local restrictions. + For extended interoperability, it is recommended to support `windowSize` of at least 8 MB. + + ZSTD_decompressContinue() needs previous data blocks during decompression, up to `windowSize` bytes. + ZSTD_decompressContinue() is very sensitive to contiguity, + if 2 blocks don't follow each other, make sure that either the compressor breaks contiguity at the same place, + or that previous contiguous segment is large enough to properly handle maximum back-reference distance. + There are multiple ways to guarantee this condition. + + The most memory efficient way is to use a round buffer of sufficient size. + Sufficient size is determined by invoking ZSTD_decodingBufferSize_min(), + which can return an error code if required value is too large for current system (in 32-bits mode). + In a round buffer methodology, ZSTD_decompressContinue() decompresses each block next to previous one, + up to the moment there is not enough room left in the buffer to guarantee decoding another full block, + which maximum size is provided in `ZSTD_frameHeader` structure, field `blockSizeMax`. + At which point, decoding can resume from the beginning of the buffer. + Note that already decoded data stored in the buffer should be flushed before being overwritten. + + There are alternatives possible, for example using two or more buffers of size `windowSize` each, though they consume more memory. + + Finally, if you control the compression process, you can also ignore all buffer size rules, + as long as the encoder and decoder progress in "lock-step", + aka use exactly the same buffer sizes, break contiguity at the same place, etc. + + Once buffers are setup, start decompression, with ZSTD_decompressBegin(). + If decompression requires a dictionary, use ZSTD_decompressBegin_usingDict() or ZSTD_decompressBegin_usingDDict(). + + Then use ZSTD_nextSrcSizeToDecompress() and ZSTD_decompressContinue() alternatively. + ZSTD_nextSrcSizeToDecompress() tells how many bytes to provide as 'srcSize' to ZSTD_decompressContinue(). + ZSTD_decompressContinue() requires this _exact_ amount of bytes, or it will fail. + + result of ZSTD_decompressContinue() is the number of bytes regenerated within 'dst' (necessarily <= dstCapacity). + It can be zero : it just means ZSTD_decompressContinue() has decoded some metadata item. + It can also be an error code, which can be tested with ZSTD_isError(). + + A frame is fully decoded when ZSTD_nextSrcSizeToDecompress() returns zero. + Context can then be reset to start a new decompression. + + Note : it's possible to know if next input to present is a header or a block, using ZSTD_nextInputType(). + This information is not required to properly decode a frame. + + == Special case : skippable frames == + + Skippable frames allow integration of user-defined data into a flow of concatenated frames. + Skippable frames will be ignored (skipped) by decompressor. + The format of skippable frames is as follows : + a) Skippable frame ID - 4 Bytes, Little endian format, any value from 0x184D2A50 to 0x184D2A5F + b) Frame Size - 4 Bytes, Little endian format, unsigned 32-bits + c) Frame Content - any content (User Data) of length equal to Frame Size + For skippable frames ZSTD_getFrameHeader() returns zfhPtr->frameType==ZSTD_skippableFrame. + For skippable frames ZSTD_decompressContinue() always returns 0 : it only skips the content. +*/ + +/*===== Buffer-less streaming decompression functions =====*/ + +ZSTDLIB_STATIC_API size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize); /**< when frame content size is not known, pass in frameContentSize == ZSTD_CONTENTSIZE_UNKNOWN */ + +ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx); +ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); +ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); + +ZSTDLIB_STATIC_API size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx); +ZSTDLIB_STATIC_API size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); + +/* misc */ +ZSTD_DEPRECATED("This function will likely be removed in the next minor release. It is misleading and has very limited utility.") +ZSTDLIB_STATIC_API void ZSTD_copyDCtx(ZSTD_DCtx* dctx, const ZSTD_DCtx* preparedDCtx); +typedef enum { ZSTDnit_frameHeader, ZSTDnit_blockHeader, ZSTDnit_block, ZSTDnit_lastBlock, ZSTDnit_checksum, ZSTDnit_skippableFrame } ZSTD_nextInputType_e; +ZSTDLIB_STATIC_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx); + + + + +/* ========================================= */ +/** Block level API (DEPRECATED) */ +/* ========================================= */ + +/*! + + This API is deprecated in favor of the regular compression API. + You can get the frame header down to 2 bytes by setting: + - ZSTD_c_format = ZSTD_f_zstd1_magicless + - ZSTD_c_contentSizeFlag = 0 + - ZSTD_c_checksumFlag = 0 + - ZSTD_c_dictIDFlag = 0 + + This API is not as well tested as our normal API, so we recommend not using it. + We will be removing it in a future version. If the normal API doesn't provide + the functionality you need, please open a GitHub issue. + + Block functions produce and decode raw zstd blocks, without frame metadata. + Frame metadata cost is typically ~12 bytes, which can be non-negligible for very small blocks (< 100 bytes). + But users will have to take in charge needed metadata to regenerate data, such as compressed and content sizes. + + A few rules to respect : + - Compressing and decompressing require a context structure + + Use ZSTD_createCCtx() and ZSTD_createDCtx() + - It is necessary to init context before starting + + compression : any ZSTD_compressBegin*() variant, including with dictionary + + decompression : any ZSTD_decompressBegin*() variant, including with dictionary + - Block size is limited, it must be <= ZSTD_getBlockSize() <= ZSTD_BLOCKSIZE_MAX == 128 KB + + If input is larger than a block size, it's necessary to split input data into multiple blocks + + For inputs larger than a single block, consider using regular ZSTD_compress() instead. + Frame metadata is not that costly, and quickly becomes negligible as source size grows larger than a block. + - When a block is considered not compressible enough, ZSTD_compressBlock() result will be 0 (zero) ! + ===> In which case, nothing is produced into `dst` ! + + User __must__ test for such outcome and deal directly with uncompressed data + + A block cannot be declared incompressible if ZSTD_compressBlock() return value was != 0. + Doing so would mess up with statistics history, leading to potential data corruption. + + ZSTD_decompressBlock() _doesn't accept uncompressed data as input_ !! + + In case of multiple successive blocks, should some of them be uncompressed, + decoder must be informed of their existence in order to follow proper history. + Use ZSTD_insertBlock() for such a case. +*/ + +/*===== Raw zstd block functions =====*/ +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_getBlockSize (const ZSTD_CCtx* cctx); +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_compressBlock (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); +ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.") +ZSTDLIB_STATIC_API size_t ZSTD_insertBlock (ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert uncompressed block into `dctx` history. Useful for multi-blocks decompression. */ + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */ diff --git a/board/mentalnet/overlay/usr/include/zstd_errors.h b/board/mentalnet/overlay/usr/include/zstd_errors.h new file mode 100644 index 0000000..8ebc95c --- /dev/null +++ b/board/mentalnet/overlay/usr/include/zstd_errors.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_ERRORS_H_398273423 +#define ZSTD_ERRORS_H_398273423 + +#if defined (__cplusplus) +extern "C" { +#endif + +/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */ +#ifndef ZSTDERRORLIB_VISIBLE + /* Backwards compatibility with old macro name */ +# ifdef ZSTDERRORLIB_VISIBILITY +# define ZSTDERRORLIB_VISIBLE ZSTDERRORLIB_VISIBILITY +# elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDERRORLIB_VISIBLE __attribute__ ((visibility ("default"))) +# else +# define ZSTDERRORLIB_VISIBLE +# endif +#endif + +#ifndef ZSTDERRORLIB_HIDDEN +# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) +# define ZSTDERRORLIB_HIDDEN __attribute__ ((visibility ("hidden"))) +# else +# define ZSTDERRORLIB_HIDDEN +# endif +#endif + +#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) +# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBLE +#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) +# define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#else +# define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBLE +#endif + +/*-********************************************* + * Error codes list + *-********************************************* + * Error codes _values_ are pinned down since v1.3.1 only. + * Therefore, don't rely on values if you may link to any version < v1.3.1. + * + * Only values < 100 are considered stable. + * + * note 1 : this API shall be used with static linking only. + * dynamic linking is not yet officially supported. + * note 2 : Prefer relying on the enum than on its value whenever possible + * This is the only supported way to use the error list < v1.3.1 + * note 3 : ZSTD_isError() is always correct, whatever the library version. + **********************************************/ +typedef enum { + ZSTD_error_no_error = 0, + ZSTD_error_GENERIC = 1, + ZSTD_error_prefix_unknown = 10, + ZSTD_error_version_unsupported = 12, + ZSTD_error_frameParameter_unsupported = 14, + ZSTD_error_frameParameter_windowTooLarge = 16, + ZSTD_error_corruption_detected = 20, + ZSTD_error_checksum_wrong = 22, + ZSTD_error_literals_headerWrong = 24, + ZSTD_error_dictionary_corrupted = 30, + ZSTD_error_dictionary_wrong = 32, + ZSTD_error_dictionaryCreation_failed = 34, + ZSTD_error_parameter_unsupported = 40, + ZSTD_error_parameter_combination_unsupported = 41, + ZSTD_error_parameter_outOfBound = 42, + ZSTD_error_tableLog_tooLarge = 44, + ZSTD_error_maxSymbolValue_tooLarge = 46, + ZSTD_error_maxSymbolValue_tooSmall = 48, + ZSTD_error_cannotProduce_uncompressedBlock = 49, + ZSTD_error_stabilityCondition_notRespected = 50, + ZSTD_error_stage_wrong = 60, + ZSTD_error_init_missing = 62, + ZSTD_error_memory_allocation = 64, + ZSTD_error_workSpace_tooSmall= 66, + ZSTD_error_dstSize_tooSmall = 70, + ZSTD_error_srcSize_wrong = 72, + ZSTD_error_dstBuffer_null = 74, + ZSTD_error_noForwardProgress_destFull = 80, + ZSTD_error_noForwardProgress_inputEmpty = 82, + /* following error codes are __NOT STABLE__, they can be removed or changed in future versions */ + ZSTD_error_frameIndex_tooLarge = 100, + ZSTD_error_seekableIO = 102, + ZSTD_error_dstBuffer_wrong = 104, + ZSTD_error_srcBuffer_wrong = 105, + ZSTD_error_sequenceProducer_failed = 106, + ZSTD_error_externalSequences_invalid = 107, + ZSTD_error_maxCode = 120 /* never EVER use this value directly, it can change in future versions! Use ZSTD_isError() instead */ +} ZSTD_ErrorCode; + +ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code); /**< Same as ZSTD_getErrorName, but using a `ZSTD_ErrorCode` enum argument */ + + +#if defined (__cplusplus) +} +#endif + +#endif /* ZSTD_ERRORS_H_398273423 */ diff --git a/board/mentalnet/overlay/usr/lib/libc.so b/board/mentalnet/overlay/usr/lib/libc.so new file mode 100644 index 0000000..cd8724c --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/libc.so @@ -0,0 +1,5 @@ +/* GNU ld script + Use the shared library, but some functions are only in + the static library, so try that secondarily. */ +OUTPUT_FORMAT(elf32-i386) +GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.2 ) ) diff --git a/board/mentalnet/overlay/usr/lib/libc_nonshared.a b/board/mentalnet/overlay/usr/lib/libc_nonshared.a new file mode 100644 index 0000000000000000000000000000000000000000..acc3099fc3f9cb83fcb858987438934ec58abe65 GIT binary patch literal 5822 zcmeHLL2nyH6dpSvO`~AaCE2<-pZ5S%)FUz-psyv z`+3$cUvR6%()&F_R-+7$=O=RG=kgOHmX*^(W@%X?xzTXKQjb#Vv{H$01MT`#DQfSF z$9m?DQfKbCzVq46dU3DYlq*HI++yxfG!TtpdCVF^d;(eOX?Q-na&4%maVNT~ z*g5P$8#qobpvuMP>@d)T+X$Nu^K#cXClkL>-PzInKx$sVeiOPAiY2B&t` z%PZAN#YY~DoVRl$_VD_pc1#c z6K8unJHNp|7X6uU>^0VtsqVexl~j5rl_{jG*;M!BVG0iWFmyS@iT}{7S7sbK)!#?; z0W>UH{$!VW!?3yjd!`L{ADTAXjcHMAk$BF`+|{YcIp^y1 z^tHmGvp6|5S8#w`sa2ekyR}mGU=(*wFbY;Jm6z;9K2&&E-| zqw_no*S2=-?P_J)tNOQ;P3K<8S*^O8p0d}fm7Q(urfvBeNb@Y1%Y5cuDD#ZxPkjl> zGnd@Hh_=ol)D)f>n?pa_#8cLxS=|Z>j#00NbA*}XJ=I95`YdLFr*Pe7A~EJzJDmDK=!9#NQ<)zknKs+u;XVa2 z)z=LkXEP4P6-JpH%6IZvwfH*;hu$!J%3h-!+J{7BY~whz4;wlFE{;R*0yl50 zE6)+-Pz&oeX#ls8jKJcmBuO9yF>L%a8XAb4SaE}Qvi z|8h1nuZt(Roig@Mi%W;Nr;tngW>N!%RJvf&DbMn0b7?=8sib3UcX$VRQYf zrj3|?Y}#lKgf{)X!i!?$qlFyX*maT{Y}H#^ulZh8zTkp;Ml zP2rhRqTD-(qqEQ-$GsI!Hbgif%Dt^{In3o8;a=i|&*)bCMY*?zv39ukM>;V?{6)F< zCt!H55s^Ja@2~d(Xoq`e5kJN@j(gMC&|To-xc44#Tfm9Pb40oK2G(uLz30XQDh*5d zKOm3p`ac0C_l}$gD^udR_W)~B+T>o%vh9BUpOjz8&2m@O+$8*pex6SrN|Eyptm9JR z9AM(V_qiU0YmraQca3~n(4#@Y^>0RO)$|`7vSzb^|Hz$ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/float.h b/board/mentalnet/overlay/usr/lib/tcc/include/float.h new file mode 100644 index 0000000..4caa423 --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/float.h @@ -0,0 +1,75 @@ +#ifndef _FLOAT_H_ +#define _FLOAT_H_ + +#define FLT_RADIX 2 + +/* IEEE float */ +#define FLT_MANT_DIG 24 +#define FLT_DIG 6 +#define FLT_ROUNDS 1 +#define FLT_EPSILON 1.19209290e-07F +#define FLT_MIN_EXP (-125) +#define FLT_MIN 1.17549435e-38F +#define FLT_MIN_10_EXP (-37) +#define FLT_MAX_EXP 128 +#define FLT_MAX 3.40282347e+38F +#define FLT_MAX_10_EXP 38 + +/* IEEE double */ +#define DBL_MANT_DIG 53 +#define DBL_DIG 15 +#define DBL_EPSILON 2.2204460492503131e-16 +#define DBL_MIN_EXP (-1021) +#define DBL_MIN 2.2250738585072014e-308 +#define DBL_MIN_10_EXP (-307) +#define DBL_MAX_EXP 1024 +#define DBL_MAX 1.7976931348623157e+308 +#define DBL_MAX_10_EXP 308 + +/* horrible intel long double */ +#if defined __i386__ || defined __x86_64__ + +#define LDBL_MANT_DIG 64 +#define LDBL_DIG 18 +#define LDBL_EPSILON 1.08420217248550443401e-19L +#define LDBL_MIN_EXP (-16381) +#define LDBL_MIN 3.36210314311209350626e-4932L +#define LDBL_MIN_10_EXP (-4931) +#define LDBL_MAX_EXP 16384 +#define LDBL_MAX 1.18973149535723176502e+4932L +#define LDBL_MAX_10_EXP 4932 +#define DECIMAL_DIG 21 + +#elif defined __aarch64__ || defined __riscv +/* + * Use values from: + * gcc -dM -E -xc /dev/null | grep LDBL | sed -e "s/__//g" + */ +#define LDBL_MANT_DIG 113 +#define LDBL_DIG 33 +#define LDBL_EPSILON 1.92592994438723585305597794258492732e-34L +#define LDBL_MIN_EXP (-16381) +#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L +#define LDBL_MIN_10_EXP (-4931) +#define LDBL_MAX_EXP 16384 +#define LDBL_MAX 1.18973149535723176508575932662800702e+4932L +#define LDBL_MAX_10_EXP 4932 +#define DECIMAL_DIG 36 + +#else + +/* same as IEEE double */ +#define LDBL_MANT_DIG 53 +#define LDBL_DIG 15 +#define LDBL_EPSILON 2.2204460492503131e-16L +#define LDBL_MIN_EXP (-1021) +#define LDBL_MIN 2.2250738585072014e-308L +#define LDBL_MIN_10_EXP (-307) +#define LDBL_MAX_EXP 1024 +#define LDBL_MAX 1.7976931348623157e+308L +#define LDBL_MAX_10_EXP 308 +#define DECIMAL_DIG 17 + +#endif + +#endif /* _FLOAT_H_ */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/stdalign.h b/board/mentalnet/overlay/usr/lib/tcc/include/stdalign.h new file mode 100644 index 0000000..ae46c34 --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/stdalign.h @@ -0,0 +1,16 @@ +#ifndef _STDALIGN_H +#define _STDALIGN_H + +#if __STDC_VERSION__ < 201112L && (defined(__GNUC__) || defined(__TINYC__)) +# define _Alignas(t) __attribute__((__aligned__(t))) +# define _Alignof(t) __alignof__(t) +#endif + +#define alignas _Alignas +#define alignof _Alignof + +#define __alignas_is_defined 1 +#define __alignof_is_defined 1 + +#endif /* _STDALIGN_H */ + diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/stdarg.h b/board/mentalnet/overlay/usr/lib/tcc/include/stdarg.h new file mode 100644 index 0000000..aa784da --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/stdarg.h @@ -0,0 +1,14 @@ +#ifndef _STDARG_H +#define _STDARG_H + +typedef __builtin_va_list va_list; +#define va_start __builtin_va_start +#define va_arg __builtin_va_arg +#define va_copy __builtin_va_copy +#define va_end __builtin_va_end + +/* fix a buggy dependency on GCC in libio.h */ +typedef va_list __gnuc_va_list; +#define _VA_LIST_DEFINED + +#endif /* _STDARG_H */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/stdatomic.h b/board/mentalnet/overlay/usr/lib/tcc/include/stdatomic.h new file mode 100644 index 0000000..85932a5 --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/stdatomic.h @@ -0,0 +1,171 @@ +/* This file is derived from clang's stdatomic.h */ + +/*===---- stdatomic.h - Standard header for atomic types and operations -----=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef _STDATOMIC_H +#define _STDATOMIC_H + +#include +#include +#include + +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 + +/* Memory ordering */ +typedef enum { + memory_order_relaxed = __ATOMIC_RELAXED, + memory_order_consume = __ATOMIC_CONSUME, + memory_order_acquire = __ATOMIC_ACQUIRE, + memory_order_release = __ATOMIC_RELEASE, + memory_order_acq_rel = __ATOMIC_ACQ_REL, + memory_order_seq_cst = __ATOMIC_SEQ_CST, +} memory_order; + +/* Atomic typedefs */ +typedef _Atomic(_Bool) atomic_bool; +typedef _Atomic(char) atomic_char; +typedef _Atomic(signed char) atomic_schar; +typedef _Atomic(unsigned char) atomic_uchar; +typedef _Atomic(short) atomic_short; +typedef _Atomic(unsigned short) atomic_ushort; +typedef _Atomic(int) atomic_int; +typedef _Atomic(unsigned int) atomic_uint; +typedef _Atomic(long) atomic_long; +typedef _Atomic(unsigned long) atomic_ulong; +typedef _Atomic(long long) atomic_llong; +typedef _Atomic(unsigned long long) atomic_ullong; +typedef _Atomic(uint_least16_t) atomic_char16_t; +typedef _Atomic(uint_least32_t) atomic_char32_t; +typedef _Atomic(wchar_t) atomic_wchar_t; +typedef _Atomic(int_least8_t) atomic_int_least8_t; +typedef _Atomic(uint_least8_t) atomic_uint_least8_t; +typedef _Atomic(int_least16_t) atomic_int_least16_t; +typedef _Atomic(uint_least16_t) atomic_uint_least16_t; +typedef _Atomic(int_least32_t) atomic_int_least32_t; +typedef _Atomic(uint_least32_t) atomic_uint_least32_t; +typedef _Atomic(int_least64_t) atomic_int_least64_t; +typedef _Atomic(uint_least64_t) atomic_uint_least64_t; +typedef _Atomic(int_fast8_t) atomic_int_fast8_t; +typedef _Atomic(uint_fast8_t) atomic_uint_fast8_t; +typedef _Atomic(int_fast16_t) atomic_int_fast16_t; +typedef _Atomic(uint_fast16_t) atomic_uint_fast16_t; +typedef _Atomic(int_fast32_t) atomic_int_fast32_t; +typedef _Atomic(uint_fast32_t) atomic_uint_fast32_t; +typedef _Atomic(int_fast64_t) atomic_int_fast64_t; +typedef _Atomic(uint_fast64_t) atomic_uint_fast64_t; +typedef _Atomic(intptr_t) atomic_intptr_t; +typedef _Atomic(uintptr_t) atomic_uintptr_t; +typedef _Atomic(size_t) atomic_size_t; +typedef _Atomic(ptrdiff_t) atomic_ptrdiff_t; +typedef _Atomic(intmax_t) atomic_intmax_t; +typedef _Atomic(uintmax_t) atomic_uintmax_t; + +/* Atomic flag */ +typedef struct { + atomic_bool value; +} atomic_flag; + +#define ATOMIC_FLAG_INIT {0} +#define ATOMIC_VAR_INIT(value) (value) + +/* Generic routines */ +#define atomic_init(object, desired) \ + atomic_store_explicit(object, desired, __ATOMIC_RELAXED) + +#define __atomic_store_n(ptr, val, order) \ + (*(ptr) = (val), __atomic_store((ptr), &(typeof(*(ptr))){val}, (order))) +#define atomic_store_explicit(object, desired, order) \ + ({ __typeof__ (object) ptr = (object); \ + __typeof__ (*ptr) tmp = (desired); \ + __atomic_store (ptr, &tmp, (order)); \ + }) +#define atomic_store(object, desired) \ + atomic_store_explicit (object, desired, __ATOMIC_SEQ_CST) + +#define __atomic_load_n(ptr, order) \ + ({ typeof(*(ptr)) __val; \ + __atomic_load((ptr), &__val, (order)); \ + __val; }) +#define atomic_load_explicit(object, order) \ + ({ __typeof__ (object) ptr = (object); \ + __typeof__ ((void)0,*ptr) tmp; \ + __atomic_load (ptr, &tmp, (order)); \ + tmp; \ + }) +#define atomic_load(object) atomic_load_explicit (object, __ATOMIC_SEQ_CST) + +#define atomic_exchange_explicit(object, desired, order) \ + ({ __typeof__ (object) ptr = (object); \ + __typeof__ (*ptr) val = (desired); \ + __typeof__ (*ptr) tmp; \ + __atomic_exchange (ptr, &val, &tmp, (order)); \ + tmp; \ + }) +#define atomic_exchange(object, desired) \ + atomic_exchange_explicit (object, desired, __ATOMIC_SEQ_CST) +#define __atomic_compare_exchange_n(ptr, expected, desired, weak, success, failure) \ + ({ typeof(*(ptr)) __desired = (desired); \ + __atomic_compare_exchange((ptr), (expected), &__desired, \ + (weak), (success), (failure)); }) +#define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \ + ({ __typeof__ (object) ptr = (object); \ + __typeof__ (*ptr) tmp = desired; \ + __atomic_compare_exchange(ptr, expected, &tmp, 0, success, failure); \ + }) +#define atomic_compare_exchange_strong(object, expected, desired) \ + atomic_compare_exchange_strong_explicit (object, expected, desired, \ + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) +#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \ + ({ __typeof__ (object) ptr = (object); \ + __typeof__ (*ptr) tmp = desired; \ + __atomic_compare_exchange(ptr, expected, &tmp, 1, success, failure); \ + }) +#define atomic_compare_exchange_weak(object, expected, desired) \ + atomic_compare_exchange_weak_explicit (object, expected, desired, \ + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) + +#define atomic_fetch_add(object, operand) \ + __atomic_fetch_add(object, operand, __ATOMIC_SEQ_CST) +#define atomic_fetch_add_explicit __atomic_fetch_add + +#define atomic_fetch_sub(object, operand) \ + __atomic_fetch_sub(object, operand, __ATOMIC_SEQ_CST) +#define atomic_fetch_sub_explicit __atomic_fetch_sub + +#define atomic_fetch_or(object, operand) \ + __atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST) +#define atomic_fetch_or_explicit __atomic_fetch_or + +#define atomic_fetch_xor(object, operand) \ + __atomic_fetch_xor(object, operand, __ATOMIC_SEQ_CST) +#define atomic_fetch_xor_explicit __atomic_fetch_xor + +#define atomic_fetch_and(object, operand) \ + __atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST) +#define atomic_fetch_and_explicit __atomic_fetch_and + +extern void atomic_thread_fence (memory_order); +#define __atomic_thread_fence(order) atomic_thread_fence (order) +extern void atomic_signal_fence (memory_order); +#define __atomic_signal_fence(order) atomic_signal_fence(order) +#define atomic_signal_fence(order) __atomic_signal_fence (order) +extern bool __atomic_is_lock_free(size_t size, void *ptr); +#define atomic_is_lock_free(OBJ) __atomic_is_lock_free (sizeof (*(OBJ)), (OBJ)) + +extern bool atomic_flag_test_and_set(void *object); +extern bool atomic_flag_test_and_set_explicit(void *object, memory_order order); +extern void atomic_flag_clear(void *object); +extern void atomic_flag_clear_explicit(void *object, memory_order order); +#endif /* _STDATOMIC_H */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/stdbool.h b/board/mentalnet/overlay/usr/lib/tcc/include/stdbool.h new file mode 100644 index 0000000..d2ee446 --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/stdbool.h @@ -0,0 +1,11 @@ +#ifndef _STDBOOL_H +#define _STDBOOL_H + +/* ISOC99 boolean */ + +#define bool _Bool +#define true 1 +#define false 0 +#define __bool_true_false_are_defined 1 + +#endif /* _STDBOOL_H */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/stddef.h b/board/mentalnet/overlay/usr/lib/tcc/include/stddef.h new file mode 100644 index 0000000..6a56f6e --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/stddef.h @@ -0,0 +1,39 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +typedef __SIZE_TYPE__ size_t; +typedef __PTRDIFF_TYPE__ ssize_t; +typedef __WCHAR_TYPE__ wchar_t; +typedef __PTRDIFF_TYPE__ ptrdiff_t; +typedef __PTRDIFF_TYPE__ intptr_t; +typedef __SIZE_TYPE__ uintptr_t; + +#if __STDC_VERSION__ >= 201112L +typedef union { long long __ll; long double __ld; } max_align_t; +#endif + +#ifndef NULL +#define NULL ((void*)0) +#endif + +#undef offsetof +#define offsetof(type, field) __builtin_offsetof(type, field) + +void *alloca(size_t size); + +#endif + +/* Older glibc require a wint_t from (when requested + by __need_wint_t, as otherwise stddef.h isn't allowed to + define this type). Note that this must be outside the normal + _STDDEF_H guard, so that it works even when we've included the file + already (without requiring wint_t). Some other libs define _WINT_T + if they've already provided that type, so we can use that as guard. + TCC defines __WINT_TYPE__ for us. */ +#if defined (__need_wint_t) +#ifndef _WINT_T +#define _WINT_T +typedef __WINT_TYPE__ wint_t; +#endif +#undef __need_wint_t +#endif diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/stdnoreturn.h b/board/mentalnet/overlay/usr/lib/tcc/include/stdnoreturn.h new file mode 100644 index 0000000..4d580ea --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/stdnoreturn.h @@ -0,0 +1,7 @@ +#ifndef _STDNORETURN_H +#define _STDNORETURN_H + +/* ISOC11 noreturn */ +#define noreturn _Noreturn + +#endif /* _STDNORETURN_H */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/tccdefs.h b/board/mentalnet/overlay/usr/lib/tcc/include/tccdefs.h new file mode 100644 index 0000000..2655c1d --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/tccdefs.h @@ -0,0 +1,338 @@ +/* tccdefs.h + + Nothing is defined before this file except target machine, target os + and the few things related to option settings in tccpp.c:tcc_predefs(). + + This file is either included at runtime as is, or converted and + included as C-strings at compile-time (depending on CONFIG_TCC_PREDEFS). + + Note that line indent matters: + + - in lines starting at column 1, platform macros are replaced by + corresponding TCC target compile-time macros. See conftest.c for + the list of platform macros supported in lines starting at column 1. + + - only lines indented >= 4 are actually included into the executable, + check tccdefs_.h. +*/ + +#if __SIZEOF_POINTER__ == 4 + /* 32bit systems. */ +#if defined __OpenBSD__ + #define __SIZE_TYPE__ unsigned long + #define __PTRDIFF_TYPE__ long +#else + #define __SIZE_TYPE__ unsigned int + #define __PTRDIFF_TYPE__ int +#endif + #define __ILP32__ 1 + #define __INT64_TYPE__ long long +#elif __SIZEOF_LONG__ == 4 + /* 64bit Windows. */ + #define __SIZE_TYPE__ unsigned long long + #define __PTRDIFF_TYPE__ long long + #define __LLP64__ 1 + #define __INT64_TYPE__ long long +#else + /* Other 64bit systems. */ + #define __SIZE_TYPE__ unsigned long + #define __PTRDIFF_TYPE__ long + #define __LP64__ 1 +# if defined __linux__ + #define __INT64_TYPE__ long +# else /* APPLE, BSD */ + #define __INT64_TYPE__ long long +# endif +#endif + #define __SIZEOF_INT__ 4 + #define __INT_MAX__ 0x7fffffff +#if __SIZEOF_LONG__ == 4 + #define __LONG_MAX__ 0x7fffffffL +#else + #define __LONG_MAX__ 0x7fffffffffffffffL +#endif + #define __SIZEOF_LONG_LONG__ 8 + #define __LONG_LONG_MAX__ 0x7fffffffffffffffLL + #define __CHAR_BIT__ 8 + #define __ORDER_LITTLE_ENDIAN__ 1234 + #define __ORDER_BIG_ENDIAN__ 4321 + #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#if defined _WIN32 + #define __WCHAR_TYPE__ unsigned short + #define __WINT_TYPE__ unsigned short +#elif defined __linux__ + #define __WCHAR_TYPE__ int + #define __WINT_TYPE__ unsigned int +#else + #define __WCHAR_TYPE__ int + #define __WINT_TYPE__ int +#endif + + #if __STDC_VERSION__ >= 201112L + # define __STDC_NO_ATOMICS__ 1 + # define __STDC_NO_COMPLEX__ 1 + # define __STDC_NO_THREADS__ 1 +#if !defined _WIN32 + # define __STDC_UTF_16__ 1 + # define __STDC_UTF_32__ 1 +#endif + #endif + +#if defined _WIN32 + #define __declspec(x) __attribute__((x)) + #define __cdecl + +#elif defined __FreeBSD__ + #define __GNUC__ 9 + #define __GNUC_MINOR__ 3 + #define __GNUC_PATCHLEVEL__ 0 + #define __GNUC_STDC_INLINE__ 1 + #define __NO_TLS 1 + #define __RUNETYPE_INTERNAL 1 +# if __SIZEOF_POINTER__ == 8 + #define __SIZEOF_SIZE_T__ 8 + #define __SIZEOF_PTRDIFF_T__ 8 +#else + #define __SIZEOF_SIZE_T__ 4 + #define __SIZEOF_PTRDIFF_T__ 4 +# endif + +#elif defined __FreeBSD_kernel__ + +#elif defined __NetBSD__ + #define __GNUC__ 4 + #define __GNUC_MINOR__ 1 + #define __GNUC_PATCHLEVEL__ 0 + #define _Pragma(x) + #define __ELF__ 1 +#if defined __aarch64__ + #define _LOCORE /* avoids usage of __asm */ +#endif + +#elif defined __OpenBSD__ + #define __GNUC__ 4 + #define _ANSI_LIBRARY 1 + +#elif defined __APPLE__ + /* emulate APPLE-GCC to make libc's headerfiles compile: */ + #define __GNUC__ 4 /* darwin emits warning on GCC<4 */ + #define __APPLE_CC__ 1 /* for */ + #define __LITTLE_ENDIAN__ 1 + #define _DONT_USE_CTYPE_INLINE_ 1 + /* avoids usage of GCC/clang specific builtins in libc-headerfiles: */ + #define __FINITE_MATH_ONLY__ 1 + #define _FORTIFY_SOURCE 0 + //#define __has_builtin(x) 0 + #define _Float16 short unsigned int /* fake type just for size & alignment (macOS Sequoia) */ + +#elif defined __ANDROID__ + #define BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD + +#else + /* Linux */ + +#endif + + /* Some derived integer types needed to get stdint.h to compile correctly on some platforms */ +#ifndef __NetBSD__ + #define __UINTPTR_TYPE__ unsigned __PTRDIFF_TYPE__ + #define __INTPTR_TYPE__ __PTRDIFF_TYPE__ +#endif + #define __INT32_TYPE__ int + +#if !defined _WIN32 + /* glibc defines. We do not support __USER_NAME_PREFIX__ */ + #define __REDIRECT(name, proto, alias) name proto __asm__ (#alias) + #define __REDIRECT_NTH(name, proto, alias) name proto __asm__ (#alias) __THROW + #define __REDIRECT_NTHNL(name, proto, alias) name proto __asm__ (#alias) __THROWNL +#endif + + /* not implemented */ + #define __PRETTY_FUNCTION__ __FUNCTION__ + #define __has_builtin(x) 0 + #define __has_feature(x) 0 + #define __has_attribute(x) 0 + /* C23 Keywords */ + #define _Nonnull + #define _Nullable + #define _Nullable_result + #define _Null_unspecified + + /* skip __builtin... with -E */ + #ifndef __TCC_PP__ + + #define __builtin_offsetof(type, field) ((__SIZE_TYPE__)&((type*)0)->field) + #define __builtin_extract_return_addr(x) x +#if !defined __linux__ && !defined _WIN32 + /* used by math.h */ + #define __builtin_huge_val() 1e500 + #define __builtin_huge_valf() 1e50f + #define __builtin_huge_vall() 1e5000L +# if defined __APPLE__ + #define __builtin_nanf(ignored_string) (0.0F/0.0F) + /* used by floats.h to implement FLT_ROUNDS C99 macro. 1 == to nearest */ + #define __builtin_flt_rounds() 1 + /* used by _fd_def.h */ + #define __builtin_bzero(p, ignored_size) bzero(p, sizeof(*(p))) +# else + #define __builtin_nanf(ignored_string) (0.0F/0.0F) +# endif +#endif + + /* GCC's __uint128_t appears in some Linux/OSX header files. + Just make it some type with same size and alignment. */ + struct __uint128__ { char x[16]; } __attribute((__aligned__(16))); + #define __int128_t struct __uint128__ + #define __uint128_t struct __uint128__ + + /* __builtin_va_list */ +#if defined __x86_64__ +#if !defined _WIN32 + /* GCC compatible definition of va_list. */ + /* This should be in sync with the declaration in our lib/va_list.c */ + typedef struct { + unsigned gp_offset, fp_offset; + union { + unsigned overflow_offset; + char *overflow_arg_area; + }; + char *reg_save_area; + } __builtin_va_list[1]; + + void *__va_arg(__builtin_va_list ap, int arg_type, int size, int align); + #define __builtin_va_start(ap, last) \ + (*(ap) = *(__builtin_va_list)((char*)__builtin_frame_address(0) - 24)) + #define __builtin_va_arg(ap, t) \ + (*(t *)(__va_arg(ap, __builtin_va_arg_types(t), sizeof(t), __alignof__(t)))) + #define __builtin_va_copy(dest, src) (*(dest) = *(src)) + +#else /* _WIN64 */ + typedef char *__builtin_va_list; + #define __builtin_va_arg(ap, t) ((sizeof(t) > 8 || (sizeof(t) & (sizeof(t) - 1))) \ + ? **(t **)((ap += 8) - 8) : *(t *)((ap += 8) - 8)) +#endif + +#elif defined __arm__ + typedef char *__builtin_va_list; + #define _tcc_alignof(type) ((int)&((struct {char c;type x;} *)0)->x) + #define _tcc_align(addr,type) (((unsigned)addr + _tcc_alignof(type) - 1) \ + & ~(_tcc_alignof(type) - 1)) + #define __builtin_va_start(ap,last) (ap = ((char *)&(last)) + ((sizeof(last)+3)&~3)) + #define __builtin_va_arg(ap,type) (ap = (void *) ((_tcc_align(ap,type)+sizeof(type)+3) \ + &~3), *(type *)(ap - ((sizeof(type)+3)&~3))) + +#elif defined __aarch64__ +#if defined _WIN32 + typedef char *__builtin_va_list; +#elif defined __APPLE__ + typedef struct { + void *__stack; + } __builtin_va_list; + +#else + typedef struct { + void *__stack, *__gr_top, *__vr_top; + int __gr_offs, __vr_offs; + } __builtin_va_list; + +#endif +#elif defined __riscv + typedef char *__builtin_va_list; + #define __va_reg_size (__riscv_xlen >> 3) + #define _tcc_align(addr,type) (((unsigned long)addr + __alignof__(type) - 1) \ + & -(__alignof__(type))) + #define __builtin_va_arg(ap,type) (*(sizeof(type) > (2*__va_reg_size) ? *(type **)((ap += __va_reg_size) - __va_reg_size) : (ap = (va_list)(_tcc_align(ap,type) + (sizeof(type)+__va_reg_size - 1)& -__va_reg_size), (type *)(ap - ((sizeof(type)+ __va_reg_size - 1)& -__va_reg_size))))) + +#else /* __i386__ */ + typedef char *__builtin_va_list; + #define __builtin_va_start(ap,last) (ap = ((char *)&(last)) + ((sizeof(last)+3)&~3)) + #define __builtin_va_arg(ap,t) (*(t*)((ap+=(sizeof(t)+3)&~3)-((sizeof(t)+3)&~3))) + +#endif + #define __builtin_va_end(ap) (void)(ap) + #ifndef __builtin_va_copy + # define __builtin_va_copy(dest, src) (dest) = (src) + #endif + + /* TCC BBUILTIN AND BOUNDS ALIASES */ + #ifdef __leading_underscore + # define __RENAME(X) __asm__("_"X) + #else + # define __RENAME(X) __asm__(X) + #endif + + #ifdef __TCC_BCHECK__ + # define __BUILTINBC(ret,name,params) ret __builtin_##name params __RENAME("__bound_"#name); + # define __BOUND(ret,name,params) ret name params __RENAME("__bound_"#name); + #else + # define __BUILTINBC(ret,name,params) ret __builtin_##name params __RENAME(#name); + # define __BOUND(ret,name,params) + #endif +#ifdef _WIN32 + #define __BOTH __BOUND + #define __BUILTIN(ret,name,params) +#else + #define __BOTH(ret,name,params) __BUILTINBC(ret,name,params)__BOUND(ret,name,params) + #define __BUILTIN(ret,name,params) ret __builtin_##name params __RENAME(#name); +#endif + + __BOTH(void*, memcpy, (void *, const void*, __SIZE_TYPE__)) + __BOTH(void*, memmove, (void *, const void*, __SIZE_TYPE__)) + __BOTH(void*, memset, (void *, int, __SIZE_TYPE__)) + __BOTH(int, memcmp, (const void *, const void*, __SIZE_TYPE__)) + __BOTH(__SIZE_TYPE__, strlen, (const char *)) + __BOTH(char*, strcpy, (char *, const char *)) + __BOTH(char*, strncpy, (char *, const char*, __SIZE_TYPE__)) + __BOTH(int, strcmp, (const char*, const char*)) + __BOTH(int, strncmp, (const char*, const char*, __SIZE_TYPE__)) + __BOTH(char*, strcat, (char*, const char*)) + __BOTH(char*, strncat, (char*, const char*, __SIZE_TYPE__)) + __BOTH(char*, strchr, (const char*, int)) + __BOTH(char*, strrchr, (const char*, int)) + __BOTH(char*, strdup, (const char*)) +#if defined __ARM_EABI__ + __BOUND(void*,__aeabi_memcpy,(void*,const void*,__SIZE_TYPE__)) + __BOUND(void*,__aeabi_memmove,(void*,const void*,__SIZE_TYPE__)) + __BOUND(void*,__aeabi_memmove4,(void*,const void*,__SIZE_TYPE__)) + __BOUND(void*,__aeabi_memmove8,(void*,const void*,__SIZE_TYPE__)) + __BOUND(void*,__aeabi_memset,(void*,int,__SIZE_TYPE__)) +#endif + +#if defined __linux__ || defined __APPLE__ // HAVE MALLOC_REDIR + #define __MAYBE_REDIR __BUILTIN +#else + #define __MAYBE_REDIR __BOTH +#endif + __MAYBE_REDIR(void*, malloc, (__SIZE_TYPE__)) + __MAYBE_REDIR(void*, realloc, (void *, __SIZE_TYPE__)) + __MAYBE_REDIR(void*, calloc, (__SIZE_TYPE__, __SIZE_TYPE__)) + __MAYBE_REDIR(void*, memalign, (__SIZE_TYPE__, __SIZE_TYPE__)) + __MAYBE_REDIR(void, free, (void*)) + __BOTH(void*, alloca, (__SIZE_TYPE__)) + void *alloca(__SIZE_TYPE__); + __BUILTIN(void, abort, (void)) + __BOUND(void, longjmp, ()) +#if !defined _WIN32 + __BOUND(void*, mmap, ()) + __BOUND(int, munmap, ()) +#endif + #undef __BUILTINBC + #undef __BUILTIN + #undef __BOUND + #undef __BOTH + #undef __MAYBE_REDIR + #undef __RENAME + + #define __BUILTIN_EXTERN(name,u) \ + int __builtin_##name(u int); \ + int __builtin_##name##l(u long); \ + int __builtin_##name##ll(u long long); + __BUILTIN_EXTERN(ffs,) + __BUILTIN_EXTERN(clz, unsigned) + __BUILTIN_EXTERN(ctz, unsigned) + __BUILTIN_EXTERN(clrsb,) + __BUILTIN_EXTERN(popcount, unsigned) + __BUILTIN_EXTERN(parity, unsigned) + #undef __BUILTIN_EXTERN + + #endif /* ndef __TCC_PP__ */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/tgmath.h b/board/mentalnet/overlay/usr/lib/tcc/include/tgmath.h new file mode 100644 index 0000000..5d3e357 --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/tgmath.h @@ -0,0 +1,89 @@ +/* + * ISO C Standard: 7.22 Type-generic math + */ + +#ifndef _TGMATH_H +#define _TGMATH_H + +#include + +#ifndef __cplusplus +#define __tgmath_real(x, F) \ + _Generic ((x), float: F##f, long double: F##l, default: F)(x) +#define __tgmath_real_2_1(x, y, F) \ + _Generic ((x), float: F##f, long double: F##l, default: F)(x, y) +#define __tgmath_real_2(x, y, F) \ + _Generic ((x)+(y), float: F##f, long double: F##l, default: F)(x, y) +#define __tgmath_real_3_2(x, y, z, F) \ + _Generic ((x)+(y), float: F##f, long double: F##l, default: F)(x, y, z) +#define __tgmath_real_3(x, y, z, F) \ + _Generic ((x)+(y)+(z), float: F##f, long double: F##l, default: F)(x, y, z) + +/* Functions defined in both and (7.22p4) */ +#define acos(z) __tgmath_real(z, acos) +#define asin(z) __tgmath_real(z, asin) +#define atan(z) __tgmath_real(z, atan) +#define acosh(z) __tgmath_real(z, acosh) +#define asinh(z) __tgmath_real(z, asinh) +#define atanh(z) __tgmath_real(z, atanh) +#define cos(z) __tgmath_real(z, cos) +#define sin(z) __tgmath_real(z, sin) +#define tan(z) __tgmath_real(z, tan) +#define cosh(z) __tgmath_real(z, cosh) +#define sinh(z) __tgmath_real(z, sinh) +#define tanh(z) __tgmath_real(z, tanh) +#define exp(z) __tgmath_real(z, exp) +#define log(z) __tgmath_real(z, log) +#define pow(z1,z2) __tgmath_real_2(z1, z2, pow) +#define sqrt(z) __tgmath_real(z, sqrt) +#define fabs(z) __tgmath_real(z, fabs) + +/* Functions defined in only (7.22p5) */ +#define atan2(x,y) __tgmath_real_2(x, y, atan2) +#define cbrt(x) __tgmath_real(x, cbrt) +#define ceil(x) __tgmath_real(x, ceil) +#define copysign(x,y) __tgmath_real_2(x, y, copysign) +#define erf(x) __tgmath_real(x, erf) +#define erfc(x) __tgmath_real(x, erfc) +#define exp2(x) __tgmath_real(x, exp2) +#define expm1(x) __tgmath_real(x, expm1) +#define fdim(x,y) __tgmath_real_2(x, y, fdim) +#define floor(x) __tgmath_real(x, floor) +#define fma(x,y,z) __tgmath_real_3(x, y, z, fma) +#define fmax(x,y) __tgmath_real_2(x, y, fmax) +#define fmin(x,y) __tgmath_real_2(x, y, fmin) +#define fmod(x,y) __tgmath_real_2(x, y, fmod) +#define frexp(x,y) __tgmath_real_2_1(x, y, frexp) +#define hypot(x,y) __tgmath_real_2(x, y, hypot) +#define ilogb(x) __tgmath_real(x, ilogb) +#define ldexp(x,y) __tgmath_real_2_1(x, y, ldexp) +#define lgamma(x) __tgmath_real(x, lgamma) +#define llrint(x) __tgmath_real(x, llrint) +#define llround(x) __tgmath_real(x, llround) +#define log10(x) __tgmath_real(x, log10) +#define log1p(x) __tgmath_real(x, log1p) +#define log2(x) __tgmath_real(x, log2) +#define logb(x) __tgmath_real(x, logb) +#define lrint(x) __tgmath_real(x, lrint) +#define lround(x) __tgmath_real(x, lround) +#define nearbyint(x) __tgmath_real(x, nearbyint) +#define nextafter(x,y) __tgmath_real_2(x, y, nextafter) +#define nexttoward(x,y) __tgmath_real_2(x, y, nexttoward) +#define remainder(x,y) __tgmath_real_2(x, y, remainder) +#define remquo(x,y,z) __tgmath_real_3_2(x, y, z, remquo) +#define rint(x) __tgmath_real(x, rint) +#define round(x) __tgmath_real(x, round) +#define scalbln(x,y) __tgmath_real_2_1(x, y, scalbln) +#define scalbn(x,y) __tgmath_real_2_1(x, y, scalbn) +#define tgamma(x) __tgmath_real(x, tgamma) +#define trunc(x) __tgmath_real(x, trunc) + +/* Functions defined in only (7.22p6) +#define carg(z) __tgmath_cplx_only(z, carg) +#define cimag(z) __tgmath_cplx_only(z, cimag) +#define conj(z) __tgmath_cplx_only(z, conj) +#define cproj(z) __tgmath_cplx_only(z, cproj) +#define creal(z) __tgmath_cplx_only(z, creal) +*/ +#endif /* __cplusplus */ +#endif /* _TGMATH_H */ diff --git a/board/mentalnet/overlay/usr/lib/tcc/include/varargs.h b/board/mentalnet/overlay/usr/lib/tcc/include/varargs.h new file mode 100644 index 0000000..d614366 --- /dev/null +++ b/board/mentalnet/overlay/usr/lib/tcc/include/varargs.h @@ -0,0 +1,12 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ +#ifndef _VARARGS_H +#define _VARARGS_H + +#error "TinyCC no longer implements ." +#error "Revise your code to use ." + +#endif diff --git a/board/mentalnet/overlay/usr/lib/tcc/libtcc1.a b/board/mentalnet/overlay/usr/lib/tcc/libtcc1.a new file mode 100644 index 0000000000000000000000000000000000000000..bb3d42c966827435aba0c9ddb4cda9046eb573ee GIT binary patch literal 39848 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 literal 0 HcmV?d00001 diff --git a/board/mentalnet/overlay/usr/sbin/serv b/board/mentalnet/overlay/usr/sbin/serv new file mode 100755 index 0000000..2ab3db4 --- /dev/null +++ b/board/mentalnet/overlay/usr/sbin/serv @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright (C) 2026 Mark Robillard Jr (MARKMENTAL) +# SPDX-License-Identifier: GPL-3.0-or-later + +action="" +now="0" +target="" + +while [ "$#" -gt 0 ]; do + case "$1" in + enable|disable) + action="$1" + ;; + --now) + now="1" + ;; + *) + target="$1" + ;; + esac + shift +done + +if [ -z "$action" ] || [ -z "$target" ]; then + echo "Usage: serv {enable|disable} [--now] " >&2 + exit 1 +fi + +dir="${target%/*}" +file="${target##*/}" + +if [ "$dir" = "$target" ]; then + dir="." +fi + +case "$action" in + enable) + case "$file" in + disabled-*) + newfile="${file#disabled-}" + mv "$dir/$file" "$dir/$newfile" + if [ "$now" = "1" ]; then + "$dir/$newfile" start + fi + ;; + *) + if [ "$now" = "1" ]; then + "$dir/$file" start + fi + ;; + esac + ;; + disable) + case "$file" in + disabled-*) + if [ "$now" = "1" ]; then + "$dir/$file" stop + fi + ;; + *) + newfile="disabled-$file" + mv "$dir/$file" "$dir/$newfile" + if [ "$now" = "1" ]; then + "$dir/$newfile" stop + fi + ;; + esac + ;; + *) + echo "Error: unknown action '$action'. Use 'enable' or 'disable'." >&2 + exit 1 + ;; +esac + + diff --git a/board/mentalnet/overlay/var/www/html/index.html b/board/mentalnet/overlay/var/www/html/index.html new file mode 100644 index 0000000..664707c --- /dev/null +++ b/board/mentalnet/overlay/var/www/html/index.html @@ -0,0 +1,4 @@ +

Welcome to Mentalnet GNU/Linux!

+

Replace this page with your own cool stuff.

+

P.S, here is a picture of Tux The Linux Penguin! + diff --git a/board/mentalnet/overlay/var/www/html/tux.jpg b/board/mentalnet/overlay/var/www/html/tux.jpg new file mode 100644 index 0000000000000000000000000000000000000000..445296df2d1e9e1d56dc3216c9488bb1bf5372b8 GIT binary patch literal 14275 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 Qd=+v%{

(M(i%6cHrL`7<0<6aAvC|*Vp=i*)KDe!D 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