sync code with last improvements from OpenBSD
This commit is contained in:
parent
cb9f36df51
commit
6b5b190599
@ -89,7 +89,7 @@ wr_start(void)
|
|||||||
if (!wrblksz)
|
if (!wrblksz)
|
||||||
wrblksz = frmt->bsz;
|
wrblksz = frmt->bsz;
|
||||||
if (wrblksz > MAXBLK) {
|
if (wrblksz > MAXBLK) {
|
||||||
paxwarn(1, "Write block size of %d too large, maximium is: %d",
|
paxwarn(1, "Write block size of %d too large, maximum is: %d",
|
||||||
wrblksz, MAXBLK);
|
wrblksz, MAXBLK);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
@ -134,7 +134,7 @@ rd_start(void)
|
|||||||
buf = &(bufmem[BLKMULT]);
|
buf = &(bufmem[BLKMULT]);
|
||||||
if ((act == APPND) && wrblksz) {
|
if ((act == APPND) && wrblksz) {
|
||||||
if (wrblksz > MAXBLK) {
|
if (wrblksz > MAXBLK) {
|
||||||
paxwarn(1,"Write block size %d too large, maximium is: %d",
|
paxwarn(1,"Write block size %d too large, maximum is: %d",
|
||||||
wrblksz, MAXBLK);
|
wrblksz, MAXBLK);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
@ -734,7 +734,7 @@
|
|||||||
./usr/lib/crtendS.o
|
./usr/lib/crtendS.o
|
||||||
./usr/lib/gcrt0.o
|
./usr/lib/gcrt0.o
|
||||||
./usr/lib/libagentx.so.1.1
|
./usr/lib/libagentx.so.1.1
|
||||||
./usr/lib/libc.so.97.0
|
./usr/lib/libc.so.97.1
|
||||||
./usr/lib/libcbor.so.2.0
|
./usr/lib/libcbor.so.2.0
|
||||||
./usr/lib/libcrypto.so.52.0
|
./usr/lib/libcrypto.so.52.0
|
||||||
./usr/lib/libcurses.so.14.0
|
./usr/lib/libcurses.so.14.0
|
||||||
@ -759,7 +759,7 @@
|
|||||||
./usr/lib/libpanelw.so.6.0
|
./usr/lib/libpanelw.so.6.0
|
||||||
./usr/lib/libpcap.so.9.0
|
./usr/lib/libpcap.so.9.0
|
||||||
./usr/lib/libperl.so.23.0
|
./usr/lib/libperl.so.23.0
|
||||||
./usr/lib/libpthread.so.27.0
|
./usr/lib/libpthread.so.27.1
|
||||||
./usr/lib/libradius.so.1.0
|
./usr/lib/libradius.so.1.0
|
||||||
./usr/lib/libreadline.so.4.0
|
./usr/lib/libreadline.so.4.0
|
||||||
./usr/lib/librpcsvc.so.3.0
|
./usr/lib/librpcsvc.so.3.0
|
||||||
@ -2999,7 +2999,7 @@
|
|||||||
./usr/share/relink/kernel.tgz
|
./usr/share/relink/kernel.tgz
|
||||||
./usr/share/relink/usr
|
./usr/share/relink/usr
|
||||||
./usr/share/relink/usr/lib
|
./usr/share/relink/usr/lib
|
||||||
./usr/share/relink/usr/lib/libc.so.97.0.a
|
./usr/share/relink/usr/lib/libc.so.97.1.a
|
||||||
./usr/share/relink/usr/lib/libcrypto.so.52.0.a
|
./usr/share/relink/usr/lib/libcrypto.so.52.0.a
|
||||||
./usr/share/relink/usr/libexec
|
./usr/share/relink/usr/libexec
|
||||||
./usr/share/relink/usr/libexec/ld.so.a
|
./usr/share/relink/usr/libexec/ld.so.a
|
||||||
|
@ -1435,6 +1435,7 @@
|
|||||||
./usr/include/time.h
|
./usr/include/time.h
|
||||||
./usr/include/tls.h
|
./usr/include/tls.h
|
||||||
./usr/include/ttyent.h
|
./usr/include/ttyent.h
|
||||||
|
./usr/include/uchar.h
|
||||||
./usr/include/ufs
|
./usr/include/ufs
|
||||||
./usr/include/ufs/ext2fs
|
./usr/include/ufs/ext2fs
|
||||||
./usr/include/ufs/ext2fs/ext2fs.h
|
./usr/include/ufs/ext2fs/ext2fs.h
|
||||||
@ -2295,6 +2296,7 @@
|
|||||||
./usr/share/man/man3/btowc.3
|
./usr/share/man/man3/btowc.3
|
||||||
./usr/share/man/man3/btree.3
|
./usr/share/man/man3/btree.3
|
||||||
./usr/share/man/man3/bzero.3
|
./usr/share/man/man3/bzero.3
|
||||||
|
./usr/share/man/man3/c16rtomb.3
|
||||||
./usr/share/man/man3/cacos.3
|
./usr/share/man/man3/cacos.3
|
||||||
./usr/share/man/man3/cacosh.3
|
./usr/share/man/man3/cacosh.3
|
||||||
./usr/share/man/man3/carg.3
|
./usr/share/man/man3/carg.3
|
||||||
@ -2715,6 +2717,7 @@
|
|||||||
./usr/share/man/man3/malloc.3
|
./usr/share/man/man3/malloc.3
|
||||||
./usr/share/man/man3/mblen.3
|
./usr/share/man/man3/mblen.3
|
||||||
./usr/share/man/man3/mbrlen.3
|
./usr/share/man/man3/mbrlen.3
|
||||||
|
./usr/share/man/man3/mbrtoc16.3
|
||||||
./usr/share/man/man3/mbrtowc.3
|
./usr/share/man/man3/mbrtowc.3
|
||||||
./usr/share/man/man3/mbsinit.3
|
./usr/share/man/man3/mbsinit.3
|
||||||
./usr/share/man/man3/mbsrtowcs.3
|
./usr/share/man/man3/mbsrtowcs.3
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile,v 1.230 2022/08/30 18:50:06 krw Exp $
|
# $OpenBSD: Makefile,v 1.231 2023/08/20 15:02:50 schwarze Exp $
|
||||||
# $NetBSD: Makefile,v 1.59 1996/05/15 21:36:43 jtc Exp $
|
# $NetBSD: Makefile,v 1.59 1996/05/15 21:36:43 jtc Exp $
|
||||||
|
|
||||||
# @(#)Makefile 5.45.1.1 (Berkeley) 5/6/91
|
# @(#)Makefile 5.45.1.1 (Berkeley) 5/6/91
|
||||||
@ -27,7 +27,7 @@ FILES= a.out.h ar.h asr.h assert.h \
|
|||||||
signal.h siphash.h sndio.h spawn.h stdbool.h stddef.h \
|
signal.h siphash.h sndio.h spawn.h stdbool.h stddef.h \
|
||||||
stdio.h stdlib.h string.h strings.h sysexits.h \
|
stdio.h stdlib.h string.h strings.h sysexits.h \
|
||||||
tar.h tgmath.h tib.h time.h ttyent.h \
|
tar.h tgmath.h tib.h time.h ttyent.h \
|
||||||
unistd.h utime.h utmp.h uuid.h \
|
uchar.h unistd.h utime.h utmp.h uuid.h \
|
||||||
vis.h \
|
vis.h \
|
||||||
wchar.h wctype.h
|
wchar.h wctype.h
|
||||||
|
|
||||||
|
38
include/uchar.h
Normal file
38
include/uchar.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* $OpenBSD: uchar.h,v 1.1 2023/08/20 15:02:50 schwarze Exp $ */
|
||||||
|
/*
|
||||||
|
* Written by Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
* and placed in the public domain on March 19, 2022.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _UCHAR_H_
|
||||||
|
#define _UCHAR_H_
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#ifndef _MBSTATE_T_DEFINED_
|
||||||
|
#define _MBSTATE_T_DEFINED_
|
||||||
|
typedef __mbstate_t mbstate_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _SIZE_T_DEFINED_
|
||||||
|
#define _SIZE_T_DEFINED_
|
||||||
|
typedef __size_t size_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __STDC_UTF_16__ 1
|
||||||
|
#define __STDC_UTF_32__ 1
|
||||||
|
|
||||||
|
typedef __uint16_t char16_t;
|
||||||
|
typedef __uint32_t char32_t;
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
size_t mbrtoc16(char16_t * __restrict, const char * __restrict, size_t,
|
||||||
|
mbstate_t * __restrict);
|
||||||
|
size_t c16rtomb(char * __restrict, char16_t, mbstate_t * __restrict);
|
||||||
|
size_t mbrtoc32(char32_t * __restrict, const char * __restrict, size_t,
|
||||||
|
mbstate_t * __restrict);
|
||||||
|
size_t c32rtomb(char * __restrict, char32_t, mbstate_t * __restrict);
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* !_UCHAR_H_ */
|
@ -121,6 +121,7 @@ _thread_sys_issetugid
|
|||||||
_thread_sys_kevent
|
_thread_sys_kevent
|
||||||
_thread_sys_kill
|
_thread_sys_kill
|
||||||
_thread_sys_kqueue
|
_thread_sys_kqueue
|
||||||
|
_thread_sys_kqueue1
|
||||||
_thread_sys_ktrace
|
_thread_sys_ktrace
|
||||||
_thread_sys_lchown
|
_thread_sys_lchown
|
||||||
_thread_sys_link
|
_thread_sys_link
|
||||||
@ -322,6 +323,7 @@ issetugid
|
|||||||
kevent
|
kevent
|
||||||
kill
|
kill
|
||||||
kqueue
|
kqueue
|
||||||
|
kqueue1
|
||||||
ktrace
|
ktrace
|
||||||
lchown
|
lchown
|
||||||
link
|
link
|
||||||
@ -958,6 +960,8 @@ SipHash_Update
|
|||||||
/* locale */
|
/* locale */
|
||||||
__mb_cur_max
|
__mb_cur_max
|
||||||
btowc
|
btowc
|
||||||
|
c16rtomb
|
||||||
|
c32rtomb
|
||||||
duplocale
|
duplocale
|
||||||
freelocale
|
freelocale
|
||||||
isalnum_l
|
isalnum_l
|
||||||
@ -1007,6 +1011,8 @@ mbsnrtowcs
|
|||||||
mbsrtowcs
|
mbsrtowcs
|
||||||
mbstowcs
|
mbstowcs
|
||||||
newlocale
|
newlocale
|
||||||
|
mbrtoc16
|
||||||
|
mbrtoc32
|
||||||
mbtowc
|
mbtowc
|
||||||
nl_langinfo
|
nl_langinfo
|
||||||
nl_langinfo_l
|
nl_langinfo_l
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: event.h,v 1.1 2023/05/18 16:11:09 guenther Exp $ */
|
/* $OpenBSD: event.h,v 1.2 2023/08/20 15:17:53 visa Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2023 Philip Guenther <guenther@openbsd.org>
|
* Copyright (c) 2023 Philip Guenther <guenther@openbsd.org>
|
||||||
*
|
*
|
||||||
@ -22,5 +22,6 @@
|
|||||||
|
|
||||||
PROTO_NORMAL(kevent);
|
PROTO_NORMAL(kevent);
|
||||||
PROTO_NORMAL(kqueue);
|
PROTO_NORMAL(kqueue);
|
||||||
|
PROTO_NORMAL(kqueue1);
|
||||||
|
|
||||||
#endif /* !_LIBC_SYS_EVENT_H_ */
|
#endif /* !_LIBC_SYS_EVENT_H_ */
|
||||||
|
17
lib/libc/hidden/uchar.h
Normal file
17
lib/libc/hidden/uchar.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/* $OpenBSD: uchar.h,v 1.1 2023/08/20 15:02:51 schwarze Exp $ */
|
||||||
|
/*
|
||||||
|
* Written by Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
* and placed in the public domain on March 19, 2022.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LIBC_UCHAR_H_
|
||||||
|
#define _LIBC_UCHAR_H_
|
||||||
|
|
||||||
|
#include_next <uchar.h>
|
||||||
|
|
||||||
|
PROTO_STD_DEPRECATED(c16rtomb);
|
||||||
|
PROTO_STD_DEPRECATED(c32rtomb);
|
||||||
|
PROTO_STD_DEPRECATED(mbrtoc16);
|
||||||
|
PROTO_STD_DEPRECATED(mbrtoc32);
|
||||||
|
|
||||||
|
#endif /* !_LIBC_UCHAR_H_ */
|
@ -1,14 +1,15 @@
|
|||||||
# $OpenBSD: Makefile.inc,v 1.26 2022/07/27 20:00:11 guenther Exp $
|
# $OpenBSD: Makefile.inc,v 1.27 2023/08/20 15:02:51 schwarze Exp $
|
||||||
|
|
||||||
# locale sources
|
# locale sources
|
||||||
.PATH: ${LIBCSRCDIR}/locale
|
.PATH: ${LIBCSRCDIR}/locale
|
||||||
|
|
||||||
SRCS+= btowc.c _def_messages.c _def_monetary.c _def_numeric.c _def_time.c \
|
SRCS+= _def_messages.c _def_monetary.c _def_numeric.c _def_time.c \
|
||||||
localeconv.c nl_langinfo.c nl_langinfo_l.c setlocale.c \
|
localeconv.c nl_langinfo.c nl_langinfo_l.c setlocale.c \
|
||||||
duplocale.c freelocale.c newlocale.c uselocale.c \
|
duplocale.c freelocale.c newlocale.c uselocale.c \
|
||||||
__mb_cur_max.c _CurrentRuneLocale.c _get_locname.c \
|
__mb_cur_max.c _CurrentRuneLocale.c _get_locname.c \
|
||||||
isctype_l.c iswctype.c iswctype_l.c wctype.c \
|
isctype_l.c iswctype.c iswctype_l.c wctype.c \
|
||||||
mblen.c mbrlen.c mbstowcs.c mbtowc.c multibyte_citrus.c wcscoll.c \
|
mblen.c mbrlen.c mbrtoc16.c mbrtoc32.c mbstowcs.c mbtowc.c \
|
||||||
|
btowc.c c16rtomb.c c32rtomb.c multibyte_citrus.c wcscoll.c \
|
||||||
wcscoll_l.c \
|
wcscoll_l.c \
|
||||||
wcstombs.c wctob.c wctomb.c wcstof.c wcstod.c wcstold.c wcstol.c \
|
wcstombs.c wctob.c wctomb.c wcstof.c wcstod.c wcstold.c wcstol.c \
|
||||||
wcstoul.c wcstoll.c wcstoull.c wcstoimax.c wcstoumax.c \
|
wcstoul.c wcstoll.c wcstoull.c wcstoimax.c wcstoumax.c \
|
||||||
@ -17,7 +18,8 @@ SRCS+= btowc.c _def_messages.c _def_monetary.c _def_numeric.c _def_time.c \
|
|||||||
|
|
||||||
MAN+= nl_langinfo.3 setlocale.3 newlocale.3 uselocale.3 localeconv.3 \
|
MAN+= nl_langinfo.3 setlocale.3 newlocale.3 uselocale.3 localeconv.3 \
|
||||||
iswalnum.3 towlower.3 \
|
iswalnum.3 towlower.3 \
|
||||||
btowc.3 mblen.3 mbrlen.3 mbrtowc.3 mbsinit.3 mbsrtowcs.3 \
|
btowc.3 c16rtomb.3 mblen.3 mbrlen.3 mbrtoc16.3 mbrtowc.3 \
|
||||||
|
mbsinit.3 mbsrtowcs.3 \
|
||||||
mbstowcs.3 mbtowc.3 wcrtomb.3 wcscoll.3 wcsrtombs.3 wcstod.3 \
|
mbstowcs.3 mbtowc.3 wcrtomb.3 wcscoll.3 wcsrtombs.3 wcstod.3 \
|
||||||
wcstol.3 wcstombs.3 wcsxfrm.3 wctob.3 wctomb.3 \
|
wcstol.3 wcstombs.3 wcsxfrm.3 wctob.3 wctomb.3 \
|
||||||
wctype.3 iswctype.3 wctrans.3 towctrans.3 wcwidth.3
|
wctype.3 iswctype.3 wctrans.3 towctrans.3 wcwidth.3
|
||||||
|
207
lib/libc/locale/c16rtomb.3
Normal file
207
lib/libc/locale/c16rtomb.3
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
.\" $OpenBSD: c16rtomb.3,v 1.1 2023/08/20 15:02:51 schwarze Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 2023 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this software for any
|
||||||
|
.\" purpose with or without fee is hereby granted, provided that the above
|
||||||
|
.\" copyright notice and this permission notice appear in all copies.
|
||||||
|
.\"
|
||||||
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
.\"
|
||||||
|
.Dd $Mdocdate: August 20 2023 $
|
||||||
|
.Dt C16RTOMB 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm c16rtomb
|
||||||
|
.Nd convert one UTF-16 encoded character to UTF-8
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.In uchar.h
|
||||||
|
.Ft size_t
|
||||||
|
.Fo c16rtomb
|
||||||
|
.Fa "char * restrict s"
|
||||||
|
.Fa "char16_t c16"
|
||||||
|
.Fa "mbstate_t * restrict mbs"
|
||||||
|
.Fc
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
This function converts one UTF-16 encoded character to UTF-8.
|
||||||
|
In some cases, it is necessary to call the function twice
|
||||||
|
to convert a single character.
|
||||||
|
.Pp
|
||||||
|
First, call
|
||||||
|
.Fn c16rtomb
|
||||||
|
passing the first 16-bit code unit of the UTF-16 encoded character in
|
||||||
|
.Fa c16 .
|
||||||
|
If the return value is greater than 0, the character is part of the UCS-2
|
||||||
|
range, the complete UTF-8 encoding consisting of at most
|
||||||
|
.Dv MB_CUR_MAX
|
||||||
|
bytes has been written to the storage starting at
|
||||||
|
.Fa s ,
|
||||||
|
and the function does not need to be called again.
|
||||||
|
.Pp
|
||||||
|
If the return value is 0, the first 16-bit code unit is a UTF-16
|
||||||
|
high surrogate and the function needs to be called a second time,
|
||||||
|
this time passing the second 16-bit code unit of the UTF-16 encoded
|
||||||
|
character in
|
||||||
|
.Fa c16
|
||||||
|
and passing the same
|
||||||
|
.Fa mbs
|
||||||
|
again that was also passed to the first call.
|
||||||
|
If the second 16-bit code unit is a UTF-16 low surrogate,
|
||||||
|
the second call returns a value greater than 0,
|
||||||
|
the surrogate pair represents a Unicode code point
|
||||||
|
beyond the basic multilingual plane,
|
||||||
|
and the complete UTF-8 encoding consisting of at most
|
||||||
|
.Dv MB_CUR_MAX
|
||||||
|
bytes is written to the storage starting at
|
||||||
|
.Fa s .
|
||||||
|
.Pp
|
||||||
|
The output encoding that
|
||||||
|
.Fn c16rtomb
|
||||||
|
uses in
|
||||||
|
.Fa s
|
||||||
|
is determined by the
|
||||||
|
.Dv LC_CTYPE
|
||||||
|
category of the current locale.
|
||||||
|
.Ox
|
||||||
|
only supports UTF-8 and ASCII output,
|
||||||
|
and this function is only useful for UTF-8.
|
||||||
|
.Pp
|
||||||
|
The following arguments cause special processing:
|
||||||
|
.Bl -tag -width 012345678901
|
||||||
|
.It Fa c16 No == 0
|
||||||
|
A NUL byte is stored to
|
||||||
|
.Pf * Fa s
|
||||||
|
and the state object pointed to by
|
||||||
|
.Fa mbs
|
||||||
|
is reset to the initial state.
|
||||||
|
On operating systems other than
|
||||||
|
.Ox
|
||||||
|
that support state-dependent multibyte encodings,
|
||||||
|
a special byte sequence
|
||||||
|
.Pq Dq shift sequence
|
||||||
|
is written before the NUL byte to return to the initial state
|
||||||
|
if that is required by the output encoding
|
||||||
|
and by the current output encoding state.
|
||||||
|
.It Fa mbs No == Dv NULL
|
||||||
|
An internal
|
||||||
|
.Vt mbstate_t
|
||||||
|
object specific to the
|
||||||
|
.Fn c16rtomb
|
||||||
|
function is used instead of the
|
||||||
|
.Fa mbs
|
||||||
|
argument.
|
||||||
|
This internal object is automatically initialized at program startup
|
||||||
|
and never changed by any
|
||||||
|
.Em libc
|
||||||
|
function except
|
||||||
|
.Fn c16rtomb .
|
||||||
|
.It Fa s No == Dv NULL
|
||||||
|
The object pointed to by
|
||||||
|
.Fa mbs ,
|
||||||
|
or the internal object if
|
||||||
|
.Fa mbs
|
||||||
|
is a
|
||||||
|
.Dv NULL
|
||||||
|
pointer, is reset to its initial state,
|
||||||
|
.Fa c16
|
||||||
|
is ignored, and 1 is returned.
|
||||||
|
.El
|
||||||
|
.Sh RETURN VALUES
|
||||||
|
.Fn c16rtomb
|
||||||
|
returns the number of bytes written to
|
||||||
|
.Fa s
|
||||||
|
on success or
|
||||||
|
.Po Vt size_t Pc Ns \-1
|
||||||
|
on failure, specifically:
|
||||||
|
.Bl -tag -width 10n
|
||||||
|
.It 0
|
||||||
|
The first 16-bit code unit was successfully decoded
|
||||||
|
as a UTF-16 high surrogate.
|
||||||
|
Nothing was written to
|
||||||
|
.Fa s
|
||||||
|
yet.
|
||||||
|
.It 1
|
||||||
|
The first 16-bit code unit was successfully decoded
|
||||||
|
as a character in the range U+0000 to U+007F, or
|
||||||
|
.Fa s
|
||||||
|
is
|
||||||
|
.Dv NULL .
|
||||||
|
.It 2
|
||||||
|
The first 16-bit code unit was successfully decoded
|
||||||
|
as a character in the range U+0080 to U+07FF.
|
||||||
|
.It 3
|
||||||
|
The first 16-bit code unit was successfully decoded
|
||||||
|
as a character in the range U+0800 to U+D7FF or U+E000 to U+FFFF.
|
||||||
|
.It 4
|
||||||
|
The second 16-bit code unit was successfully decoded as a UTF-16 low
|
||||||
|
surrogate, resulting in a character in the range U+10000 to U+10FFFF.
|
||||||
|
.It greater
|
||||||
|
Return values greater than 4 may occur on operating systems other than
|
||||||
|
.Ox
|
||||||
|
for output encodings other than UTF-8, in particular when a shift
|
||||||
|
sequence was written.
|
||||||
|
.It Po Vt size_t Pc Ns \-1
|
||||||
|
UTF-16 input decoding or
|
||||||
|
.Dv LC_CTYPE
|
||||||
|
output encoding failed, or
|
||||||
|
.Fa mbs
|
||||||
|
is invalid.
|
||||||
|
Nothing was written to
|
||||||
|
.Fa s ,
|
||||||
|
and
|
||||||
|
.Va errno
|
||||||
|
has been set.
|
||||||
|
.El
|
||||||
|
.Sh ERRORS
|
||||||
|
.Fn c16rtomb
|
||||||
|
causes an error in the following cases:
|
||||||
|
.Bl -tag -width Er
|
||||||
|
.It Bq Er EILSEQ
|
||||||
|
UTF-16 input decoding failed because the first 16-bit code unit
|
||||||
|
is neither a UCS-2 character nor a UTF-16 high surrogate,
|
||||||
|
or because the second 16-bit code unit is not a UTF-16 low surrogate;
|
||||||
|
or output encoding failed because the resulting character
|
||||||
|
cannot be represented in the output encoding selected with
|
||||||
|
.Dv LC_CTYPE .
|
||||||
|
.It Bq Er EINVAL
|
||||||
|
.Fa mbs
|
||||||
|
points to an invalid or uninitialized
|
||||||
|
.Vt mbstate_t
|
||||||
|
object.
|
||||||
|
.El
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr mbrtoc16 3 ,
|
||||||
|
.Xr setlocale 3 ,
|
||||||
|
.Xr wcrtomb 3
|
||||||
|
.Sh STANDARDS
|
||||||
|
.Fn c16rtomb
|
||||||
|
conforms to
|
||||||
|
.St -isoC-2011 .
|
||||||
|
.Sh HISTORY
|
||||||
|
.Fn c16rtomb
|
||||||
|
has been available since
|
||||||
|
.Ox 7.4 .
|
||||||
|
.Sh CAVEATS
|
||||||
|
The C11 standard only requires the
|
||||||
|
.Fa c16
|
||||||
|
argument to be interpreted according to UTF-16
|
||||||
|
if the predefined environment macro
|
||||||
|
.Dv __STDC_UTF_16__
|
||||||
|
is defined with a value of 1.
|
||||||
|
On
|
||||||
|
.Ox ,
|
||||||
|
.In uchar.h
|
||||||
|
provides this definition.
|
||||||
|
Other operating systems which do not define
|
||||||
|
.Dv __STDC_UTF_16__
|
||||||
|
could theoretically use a different,
|
||||||
|
implementation-defined input encoding for
|
||||||
|
.Fa c16
|
||||||
|
instead of UTF-16.
|
||||||
|
Using UTF-16 becomes mandatory in C23.
|
100
lib/libc/locale/c16rtomb.c
Normal file
100
lib/libc/locale/c16rtomb.c
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/* $OpenBSD: c16rtomb.c,v 1.1 2023/08/20 15:02:51 schwarze Exp $ */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <uchar.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keep this structure compatible with
|
||||||
|
* struct _utf8_state in the file citrus/citrus_utf8.c.
|
||||||
|
*/
|
||||||
|
struct _utf16_state {
|
||||||
|
wchar_t ch;
|
||||||
|
int want;
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t
|
||||||
|
c16rtomb(char *s, char16_t c16, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
static mbstate_t mbs;
|
||||||
|
struct _utf16_state *us;
|
||||||
|
wchar_t wc;
|
||||||
|
|
||||||
|
if (ps == NULL)
|
||||||
|
ps = &mbs;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle the special case of NULL output first
|
||||||
|
* to avoid inspecting c16 and ps and possibly drawing
|
||||||
|
* bogus conclusions from whatever those may contain.
|
||||||
|
* Instead, just restore the initial conversion state.
|
||||||
|
* The return value represents the length of the NUL byte
|
||||||
|
* corresponding to the NUL wide character, even though
|
||||||
|
* there is no place to write that NUL byte to.
|
||||||
|
*/
|
||||||
|
if (s == NULL) {
|
||||||
|
memset(ps, 0, sizeof(*ps));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
us = (struct _utf16_state *)ps;
|
||||||
|
|
||||||
|
if (us->want == (size_t)-3) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The previous call read a high surrogate,
|
||||||
|
* so expect a low surrogate now.
|
||||||
|
*/
|
||||||
|
if ((c16 & 0xfc00) != 0xdc00) {
|
||||||
|
errno = EILSEQ;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Assemble the full code point for processing
|
||||||
|
* by wcrtomb(3). Since we do not support
|
||||||
|
* state-dependent encodings, our wcrtomb(3)
|
||||||
|
* always expects the initial conversion state,
|
||||||
|
* so clearing the state here is just fine.
|
||||||
|
*/
|
||||||
|
wc = us->ch + (c16 & 0x3ff);
|
||||||
|
us->ch = 0;
|
||||||
|
us->want = 0;
|
||||||
|
|
||||||
|
} else if ((c16 & 0xfc00) == 0xd800) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Got a high surrogate while being in the initial
|
||||||
|
* conversion state. Remeber its contribution to
|
||||||
|
* the codepoint and defer encoding to the next call.
|
||||||
|
*/
|
||||||
|
us->ch = 0x10000 + ((c16 & 0x3ff) << 10);
|
||||||
|
us->want = -3;
|
||||||
|
|
||||||
|
/* Nothing was written to *s just yet. */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} else
|
||||||
|
wc = c16;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following correctly returns an error when a low
|
||||||
|
* surrogate is encountered without a preceding high one.
|
||||||
|
*/
|
||||||
|
return wcrtomb(s, wc, ps);
|
||||||
|
}
|
18
lib/libc/locale/c32rtomb.c
Normal file
18
lib/libc/locale/c32rtomb.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* $OpenBSD: c32rtomb.c,v 1.1 2023/08/20 15:02:51 schwarze Exp $ */
|
||||||
|
/*
|
||||||
|
* Written by Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
* and placed in the public domain on March 19, 2022.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <uchar.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
c32rtomb(char *s, char32_t c32, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
static mbstate_t mbs;
|
||||||
|
|
||||||
|
if (ps == NULL)
|
||||||
|
ps = &mbs;
|
||||||
|
return wcrtomb(s, c32, ps);
|
||||||
|
}
|
265
lib/libc/locale/mbrtoc16.3
Normal file
265
lib/libc/locale/mbrtoc16.3
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
.\" $OpenBSD: mbrtoc16.3,v 1.1 2023/08/20 15:02:51 schwarze Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright 2023 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
.\" Copyright 2010 Stefan Sperling <stsp@openbsd.org>
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this software for any
|
||||||
|
.\" purpose with or without fee is hereby granted, provided that the above
|
||||||
|
.\" copyright notice and this permission notice appear in all copies.
|
||||||
|
.\"
|
||||||
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
.\"
|
||||||
|
.Dd $Mdocdate: August 20 2023 $
|
||||||
|
.Dt MBRTOC16 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm mbrtoc16
|
||||||
|
.Nd convert one UTF-8 encoded character to UTF-16
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.In uchar.h
|
||||||
|
.Ft size_t
|
||||||
|
.Fo mbrtoc16
|
||||||
|
.Fa "char16_t * restrict pc16"
|
||||||
|
.Fa "const char * restrict s"
|
||||||
|
.Fa "size_t n"
|
||||||
|
.Fa "mbstate_t * restrict mbs"
|
||||||
|
.Fc
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Fn mbrtoc16
|
||||||
|
function examines at most
|
||||||
|
.Fa n
|
||||||
|
bytes of the multibyte character byte string pointed to by
|
||||||
|
.Fa s ,
|
||||||
|
converts those bytes to a wide character,
|
||||||
|
and encodes the wide character using UTF-16.
|
||||||
|
In some cases, it is necessary to call this function
|
||||||
|
twice to convert a single character.
|
||||||
|
.Pp
|
||||||
|
Conversion happens in accordance with the conversion state
|
||||||
|
.Pf * Fa mbs ,
|
||||||
|
which must be initialized to zero before the application's first call to
|
||||||
|
.Fn mbrtoc16 .
|
||||||
|
For this function,
|
||||||
|
.Pf * Fa mbs
|
||||||
|
stores information about both the state of the UTF-8 input encoding
|
||||||
|
and the state of the UTF-16 output encoding.
|
||||||
|
If the previous call did not return
|
||||||
|
.Po Vt size_t Pc Ns \-1 ,
|
||||||
|
.Fa mbs
|
||||||
|
can safely be reused without reinitialization.
|
||||||
|
.Pp
|
||||||
|
The input encoding that
|
||||||
|
.Fn mbrtoc16
|
||||||
|
uses for
|
||||||
|
.Fa s
|
||||||
|
is determined by the
|
||||||
|
.Dv LC_CTYPE
|
||||||
|
category of the current locale.
|
||||||
|
If the locale is changed without reinitialization of
|
||||||
|
.Pf * Fa mbs ,
|
||||||
|
the behaviour is undefined.
|
||||||
|
.Pp
|
||||||
|
Unlike
|
||||||
|
.Xr mbtowc 3 ,
|
||||||
|
.Fn mbrtoc16
|
||||||
|
accepts an incomplete byte sequence pointed to by
|
||||||
|
.Fa s
|
||||||
|
which does not form a complete character but is potentially part of
|
||||||
|
a valid character.
|
||||||
|
In this case, the function consumes all such bytes.
|
||||||
|
The conversion state saved in
|
||||||
|
.Pf * Fa mbs
|
||||||
|
will be used to restart the suspended conversion during the next call.
|
||||||
|
.Pp
|
||||||
|
On systems other than
|
||||||
|
.Ox
|
||||||
|
that support state-dependent encodings,
|
||||||
|
.Fa s
|
||||||
|
may point to a special sequence of bytes called a
|
||||||
|
.Dq shift sequence ;
|
||||||
|
see
|
||||||
|
.Xr mbrtowc 3
|
||||||
|
for details.
|
||||||
|
.Pp
|
||||||
|
The following arguments cause special processing:
|
||||||
|
.Bl -tag -width 012345678901
|
||||||
|
.It Fa pc16 No == Dv NULL
|
||||||
|
The conversion from a multibyte character to a wide character is performed
|
||||||
|
and the conversion state may be affected, but the resulting wide character
|
||||||
|
is discarded.
|
||||||
|
.It Fa s No == Dv NULL
|
||||||
|
The arguments
|
||||||
|
.Fa pc16
|
||||||
|
and
|
||||||
|
.Fa n
|
||||||
|
are ignored and starting or continuing the conversion with an empty string
|
||||||
|
is attempted, discarding the conversion result.
|
||||||
|
.It Fa mbs No == Dv NULL
|
||||||
|
An internal
|
||||||
|
.Vt mbstate_t
|
||||||
|
object specific to the
|
||||||
|
.Fn mbrtoc16
|
||||||
|
function is used instead of the
|
||||||
|
.Fa mbs
|
||||||
|
argument.
|
||||||
|
This internal object is automatically initialized at program startup
|
||||||
|
and never changed by any
|
||||||
|
.Em libc
|
||||||
|
function except
|
||||||
|
.Fn mbrtoc16 .
|
||||||
|
.Pp
|
||||||
|
If
|
||||||
|
.Fn mbrtoc16
|
||||||
|
is called with a
|
||||||
|
.Dv NULL
|
||||||
|
.Fa mbs
|
||||||
|
argument and that call returns
|
||||||
|
.Po Vt size_t Pc Ns \-1 ,
|
||||||
|
the internal conversion state of
|
||||||
|
.Fn mbrtoc16
|
||||||
|
becomes permanently undefined and there is no way
|
||||||
|
to reset it to any defined state.
|
||||||
|
Consequently, after such a mishap, it is not safe to call
|
||||||
|
.Fn mbrtoc16
|
||||||
|
with a
|
||||||
|
.Dv NULL
|
||||||
|
.Fa mbs
|
||||||
|
argument ever again until the program is terminated.
|
||||||
|
.El
|
||||||
|
.Sh RETURN VALUES
|
||||||
|
.Bl -tag -width 012345678901
|
||||||
|
.It 0
|
||||||
|
The bytes pointed to by
|
||||||
|
.Fa s
|
||||||
|
form a terminating NUL character.
|
||||||
|
If
|
||||||
|
.Fa pc16
|
||||||
|
is not
|
||||||
|
.Dv NULL ,
|
||||||
|
a NUL wide character has been stored in
|
||||||
|
.Pf * Fa pc16 .
|
||||||
|
.It positive
|
||||||
|
.Fa s
|
||||||
|
points to a valid character, and the value returned is the number of
|
||||||
|
bytes completing the character.
|
||||||
|
If
|
||||||
|
.Fa pc16
|
||||||
|
is not
|
||||||
|
.Dv NULL ,
|
||||||
|
the first UTF-16 code unit of the corresponding wide character
|
||||||
|
has been stored in
|
||||||
|
.Pf * Fa pc16 .
|
||||||
|
If it is an UTF-16 high surrogate, the function needs to be called
|
||||||
|
again to retrieve a second UTF-16 code unit, the low surrogate.
|
||||||
|
On
|
||||||
|
.Ox ,
|
||||||
|
this happens if and only if the return value is 4,
|
||||||
|
but this equivalence does not hold on other operating systems
|
||||||
|
that support input encodings other than UTF-8.
|
||||||
|
.It Po Vt size_t Pc Ns \-1
|
||||||
|
.Fa s
|
||||||
|
points to an illegal byte sequence which does not form a valid multibyte
|
||||||
|
character in the current locale, or
|
||||||
|
.Fa mbs
|
||||||
|
points to an invalid or uninitialized object.
|
||||||
|
.Va errno
|
||||||
|
is set to
|
||||||
|
.Er EILSEQ
|
||||||
|
or
|
||||||
|
.Er EINVAL ,
|
||||||
|
respectively.
|
||||||
|
The conversion state object pointed to by
|
||||||
|
.Fa mbs
|
||||||
|
is left in an undefined state and must be reinitialized before being
|
||||||
|
used again.
|
||||||
|
.It Po Vt size_t Pc Ns \-2
|
||||||
|
.Fa s
|
||||||
|
points to an incomplete byte sequence of length
|
||||||
|
.Fa n
|
||||||
|
which has been consumed and contains part of a valid multibyte character.
|
||||||
|
The character may be completed by calling the same function again with
|
||||||
|
.Fa s
|
||||||
|
pointing to one or more subsequent bytes of the multibyte character and
|
||||||
|
.Fa mbs
|
||||||
|
pointing to the conversion state object used during conversion of the
|
||||||
|
incomplete byte sequence.
|
||||||
|
.It Po Vt size_t Pc Ns \-3
|
||||||
|
The second 16-bit code unit resulting from a previous call
|
||||||
|
has been stored into
|
||||||
|
.Pf * Fa pc16 ,
|
||||||
|
without consuming any additional bytes from
|
||||||
|
.Fa s .
|
||||||
|
.El
|
||||||
|
.Sh ERRORS
|
||||||
|
.Fn mbrtoc16
|
||||||
|
causes an error in the following cases:
|
||||||
|
.Bl -tag -width Er
|
||||||
|
.It Bq Er EILSEQ
|
||||||
|
.Fa s
|
||||||
|
points to an invalid multibyte character.
|
||||||
|
.It Bq Er EINVAL
|
||||||
|
.Fa mbs
|
||||||
|
points to an invalid or uninitialized
|
||||||
|
.Vt mbstate_t
|
||||||
|
object.
|
||||||
|
.El
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr c16rtomb 3 ,
|
||||||
|
.Xr mbrtowc 3 ,
|
||||||
|
.Xr setlocale 3
|
||||||
|
.Sh STANDARDS
|
||||||
|
.Fn mbrtoc16
|
||||||
|
conforms to
|
||||||
|
.St -isoC-2011 .
|
||||||
|
.Sh HISTORY
|
||||||
|
.Fn mbrtoc16
|
||||||
|
has been available since
|
||||||
|
.Ox 7.4 .
|
||||||
|
.Sh CAVEATS
|
||||||
|
On operating systems other than
|
||||||
|
.Ox
|
||||||
|
that support input encodings other than UTF-8, inspecting the return value
|
||||||
|
is insufficient to tell whether the function needs to be called again.
|
||||||
|
If the return value is positive, inspecting
|
||||||
|
.Pf * Fa pc16
|
||||||
|
is also required to make that decision.
|
||||||
|
Consequently, passing a
|
||||||
|
.Dv NULL
|
||||||
|
pointer for the
|
||||||
|
.Fa pc16
|
||||||
|
argument is discouraged because it can result
|
||||||
|
in a well-defined but unknown output encoding state.
|
||||||
|
The simplest way to recover from such an unknown state is to
|
||||||
|
reinitialize the object pointed to by
|
||||||
|
.Fa mbs .
|
||||||
|
.Pp
|
||||||
|
The C11 standard only requires the
|
||||||
|
.Fa pc16
|
||||||
|
argument to be encoded according to UTF-16
|
||||||
|
if the predefined environment macro
|
||||||
|
.Dv __STDC_UTF_16__
|
||||||
|
is defined with a value of 1.
|
||||||
|
On
|
||||||
|
.Ox ,
|
||||||
|
.In uchar.h
|
||||||
|
provides this definition.
|
||||||
|
Other operating systems which do not define
|
||||||
|
.Dv __STDC_UTF_16__
|
||||||
|
could theoretically use a different,
|
||||||
|
implementation-defined output encoding for
|
||||||
|
.Fa pc16
|
||||||
|
instead of UTF-16.
|
||||||
|
Writing portable code for an arbitrary output encoding is impossible
|
||||||
|
because the rules when and how often the function needs to be called
|
||||||
|
again depend on the output encoding; the rules explained above are
|
||||||
|
specific to UTF-16.
|
||||||
|
Using UTF-16 as the output encoding of
|
||||||
|
.Fn wcrtoc16
|
||||||
|
becomes mandatory in C23.
|
102
lib/libc/locale/mbrtoc16.c
Normal file
102
lib/libc/locale/mbrtoc16.c
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/* $OpenBSD: mbrtoc16.c,v 1.1 2023/08/20 15:02:51 schwarze Exp $ */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <uchar.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keep this structure compatible with
|
||||||
|
* struct _utf8_state in the file citrus/citrus_utf8.c.
|
||||||
|
* In particular, only use values for the "want" field
|
||||||
|
* that do not collide with values used by the function
|
||||||
|
* _citrus_utf8_ctype_mbrtowc().
|
||||||
|
*/
|
||||||
|
struct _utf16_state {
|
||||||
|
wchar_t ch;
|
||||||
|
int want;
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t
|
||||||
|
mbrtoc16(char16_t *pc16, const char *s, size_t n, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
static mbstate_t mbs;
|
||||||
|
struct _utf16_state *us;
|
||||||
|
size_t rv;
|
||||||
|
wchar_t wc;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fall back to a state object local to this function
|
||||||
|
* and do not use the fallback object in mbrtowc(3)
|
||||||
|
* because an application program might mix calls to mbrtowc(3)
|
||||||
|
* and mbrtoc16(3) decoding different strings, and they must
|
||||||
|
* not clobber each other's state.
|
||||||
|
*/
|
||||||
|
if (ps == NULL)
|
||||||
|
ps = &mbs;
|
||||||
|
|
||||||
|
us = (struct _utf16_state *)ps;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle the special case of NULL input first such that
|
||||||
|
* a low surrogate left over from a previous call does not
|
||||||
|
* clobber an object pointed to by the pc16 argument.
|
||||||
|
*/
|
||||||
|
if (s == NULL) {
|
||||||
|
s = "";
|
||||||
|
n = 1;
|
||||||
|
pc16 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the previous call stored a high surrogate,
|
||||||
|
* store the corresponding low surrogate now
|
||||||
|
* and do not inspect any further input yet.
|
||||||
|
*/
|
||||||
|
if (us->want == (size_t)-3) {
|
||||||
|
if (pc16 != NULL)
|
||||||
|
*pc16 = 0xdc00 + (us->ch & 0x3ff);
|
||||||
|
us->ch = 0;
|
||||||
|
us->want = 0;
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decode the multibyte character.
|
||||||
|
* All the mbrtowc(3) use cases can be reached from here,
|
||||||
|
* including continuing an imcomplete character started earlier,
|
||||||
|
* decoding a NUL character, a valid complete character,
|
||||||
|
* an incomplete character to be continued later,
|
||||||
|
* or a decoding error.
|
||||||
|
*/
|
||||||
|
rv = mbrtowc(&wc, s, n, ps);
|
||||||
|
|
||||||
|
if (rv < (size_t)-2) {
|
||||||
|
/* A new character that is valid and complete. */
|
||||||
|
if (wc > UINT16_MAX) {
|
||||||
|
/* Store a high surrogate. */
|
||||||
|
if (pc16 != NULL)
|
||||||
|
*pc16 = 0xd7c0 + (wc >> 10);
|
||||||
|
/* Remember that the low surrogate is pending. */
|
||||||
|
us->ch = wc;
|
||||||
|
us->want = -3;
|
||||||
|
} else if (pc16 != NULL)
|
||||||
|
/* Store a basic multilingual plane codepoint. */
|
||||||
|
*pc16 = wc;
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
18
lib/libc/locale/mbrtoc32.c
Normal file
18
lib/libc/locale/mbrtoc32.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* $OpenBSD: mbrtoc32.c,v 1.1 2023/08/20 15:02:51 schwarze Exp $ */
|
||||||
|
/*
|
||||||
|
* Written by Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
* and placed in the public domain on March 19, 2022.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <uchar.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
size_t
|
||||||
|
mbrtoc32(char32_t *pc32, const char *s, size_t n, mbstate_t *ps)
|
||||||
|
{
|
||||||
|
static mbstate_t mbs;
|
||||||
|
|
||||||
|
if (ps == NULL)
|
||||||
|
ps = &mbs;
|
||||||
|
return mbrtowc(pc32, s, n, ps);
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
.\" $OpenBSD: mbrtowc.3,v 1.5 2016/02/08 09:56:16 schwarze Exp $
|
.\" $OpenBSD: mbrtowc.3,v 1.6 2023/08/20 15:02:51 schwarze Exp $
|
||||||
.\" $NetBSD: mbrtowc.3,v 1.5 2003/09/08 17:54:31 wiz Exp $
|
.\" $NetBSD: mbrtowc.3,v 1.5 2003/09/08 17:54:31 wiz Exp $
|
||||||
.\"
|
.\"
|
||||||
|
.\" Copyright (c)2023 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
|
.\" Copyright (c)2010 Stefan Sperling <stsp@openbsd.org>
|
||||||
.\" Copyright (c)2002 Citrus Project,
|
.\" Copyright (c)2002 Citrus Project,
|
||||||
.\" All rights reserved.
|
.\" All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
@ -25,27 +27,41 @@
|
|||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: February 8 2016 $
|
.Dd $Mdocdate: August 20 2023 $
|
||||||
.Dt MBRTOWC 3
|
.Dt MBRTOWC 3
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm mbrtowc
|
.Nm mbrtowc ,
|
||||||
.Nd converts a multibyte character to a wide character (restartable)
|
.Nm mbrtoc32
|
||||||
|
.Nd convert a multibyte character to a wide character (restartable)
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.In wchar.h
|
.In wchar.h
|
||||||
.Ft size_t
|
.Ft size_t
|
||||||
.Fn mbrtowc "wchar_t * restrict wc" "const char * restrict s" "size_t n" \
|
.Fo mbrtowc
|
||||||
"mbstate_t * restrict mbs"
|
.Fa "wchar_t * restrict wc"
|
||||||
|
.Fa "const char * restrict s"
|
||||||
|
.Fa "size_t n"
|
||||||
|
.Fa "mbstate_t * restrict mbs"
|
||||||
|
.Fc
|
||||||
|
.In uchar.h
|
||||||
|
.Ft size_t
|
||||||
|
.Fo mbrtoc32
|
||||||
|
.Fa "char32_t * restrict wc"
|
||||||
|
.Fa "const char * restrict s"
|
||||||
|
.Fa "size_t n"
|
||||||
|
.Fa "mbstate_t * restrict mbs"
|
||||||
|
.Fc
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
function examines at most
|
and
|
||||||
|
.Fn mbrtoc32
|
||||||
|
functions examine at most
|
||||||
.Fa n
|
.Fa n
|
||||||
bytes of the multibyte character byte string pointed to by
|
bytes of the multibyte character byte string pointed to by
|
||||||
.Fa s ,
|
.Fa s ,
|
||||||
converts those bytes to a wide character, and stores the wide character
|
convert those bytes to a wide character, and store the wide character into
|
||||||
in the wchar_t object pointed to by
|
.Pf * Fa wc
|
||||||
.Fa wc
|
|
||||||
if
|
if
|
||||||
.Fa wc
|
.Fa wc
|
||||||
is not
|
is not
|
||||||
@ -54,46 +70,47 @@ and
|
|||||||
.Fa s
|
.Fa s
|
||||||
points to a valid character.
|
points to a valid character.
|
||||||
.Pp
|
.Pp
|
||||||
Conversion happens in accordance with the conversion state described
|
Conversion happens in accordance with the conversion state
|
||||||
by the mbstate_t object pointed to by
|
.Pf * Fa mbs ,
|
||||||
.Fa mbs .
|
which must be initialized to zero before the application's first call to
|
||||||
The mbstate_t object must be initialized to zero before the application's
|
|
||||||
first call to
|
|
||||||
.Fn mbrtowc .
|
|
||||||
If the previous call to
|
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
did not return (size_t)-1, the mbstate_t object can safely be reused
|
or
|
||||||
without reinitialization.
|
.Fn mbrtoc32 .
|
||||||
|
If the previous call did not return
|
||||||
|
.Po Vt size_t Pc Ns \-1 ,
|
||||||
|
.Fa mbs
|
||||||
|
can safely be reused without reinitialization.
|
||||||
.Pp
|
.Pp
|
||||||
The behaviour of
|
The input encoding that
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
is affected by the
|
and
|
||||||
|
.Fn mbrtoc32
|
||||||
|
use for
|
||||||
|
.Fa s
|
||||||
|
is determined by the
|
||||||
.Dv LC_CTYPE
|
.Dv LC_CTYPE
|
||||||
category of the current locale.
|
category of the current locale.
|
||||||
If the locale is changed without reinitialization of the mbstate_t object
|
If the locale is changed without reinitialization of
|
||||||
pointed to by
|
.Pf * Fa mbs ,
|
||||||
.Fa mbs ,
|
the behaviour is undefined.
|
||||||
the behaviour of
|
|
||||||
.Fn mbrtowc
|
|
||||||
is undefined.
|
|
||||||
.Pp
|
.Pp
|
||||||
Unlike
|
Unlike
|
||||||
.Xr mbtowc 3 ,
|
.Xr mbtowc 3 ,
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
will accept an incomplete byte sequence pointed to by
|
and
|
||||||
|
.Fn mbrtoc32
|
||||||
|
accept an incomplete byte sequence pointed to by
|
||||||
.Fa s
|
.Fa s
|
||||||
which does not form a complete character but is potentially part of
|
which does not form a complete character but is potentially part of
|
||||||
a valid character.
|
a valid character.
|
||||||
In this case,
|
In this case, both functions consume all such bytes.
|
||||||
.Fn mbrtowc
|
The conversion state saved in
|
||||||
consumes all such bytes.
|
.Pf * Fa mbs
|
||||||
The conversion state saved in the mbstate_t object pointed to by
|
will be used to restart the suspended conversion during the next call.
|
||||||
.Fa mbs
|
|
||||||
will be used to restart the suspended conversion during the next
|
|
||||||
call to
|
|
||||||
.Fn mbrtowc .
|
|
||||||
.Pp
|
.Pp
|
||||||
In state-dependent encodings,
|
On systems other than
|
||||||
|
.Ox
|
||||||
|
that support state-dependent encodings,
|
||||||
.Fa s
|
.Fa s
|
||||||
may point to a special sequence of bytes called a
|
may point to a special sequence of bytes called a
|
||||||
.Dq shift sequence .
|
.Dq shift sequence .
|
||||||
@ -104,61 +121,58 @@ can switch e.g. from ASCII (which uses one byte per character) to
|
|||||||
JIS X 0208 (which uses two bytes per character).
|
JIS X 0208 (which uses two bytes per character).
|
||||||
Shift sequence bytes correspond to no individual wide character, so
|
Shift sequence bytes correspond to no individual wide character, so
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
treats them as if they were part of the subsequent multibyte character.
|
and
|
||||||
|
.Fn mbrtoc32
|
||||||
|
treat them as if they were part of the subsequent multibyte character.
|
||||||
Therefore they do contribute to the number of bytes in the multibyte character.
|
Therefore they do contribute to the number of bytes in the multibyte character.
|
||||||
.Pp
|
.Pp
|
||||||
Special cases in interpretation of arguments are as follows:
|
The following arguments cause special processing:
|
||||||
.Bl -tag -width 012345678901
|
.Bl -tag -width 012345678901
|
||||||
.It "wc == NULL "
|
.It Fa wc No == Dv NULL
|
||||||
The conversion from a multibyte character to a wide character is performed
|
The conversion from a multibyte character to a wide character is performed
|
||||||
and the conversion state may be affected, but the resulting wide character
|
and the conversion state may be affected, but the resulting wide character
|
||||||
is discarded.
|
is discarded.
|
||||||
.Pp
|
|
||||||
This can be used to find out how many bytes are contained in the
|
This can be used to find out how many bytes are contained in the
|
||||||
multibyte character pointed to by
|
multibyte character pointed to by
|
||||||
.Fa s .
|
.Fa s .
|
||||||
.It "s == NULL "
|
.It Fa s No == Dv NULL
|
||||||
.Fn mbrtowc
|
The arguments
|
||||||
ignores
|
|
||||||
.Fa wc
|
.Fa wc
|
||||||
and
|
and
|
||||||
.Fa n ,
|
.Fa n
|
||||||
and behaves equivalent to
|
are ignored and starting or continuing the conversion with an empty string
|
||||||
.Bd -literal -offset indent
|
is attempted, discarding the conversion result.
|
||||||
mbrtowc(NULL, "", 1, mbs);
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
which attempts to use the mbstate_t object pointed to by
|
|
||||||
.Fa mbs
|
|
||||||
to start or continue conversion using the empty string as input,
|
|
||||||
and discards the conversion result.
|
|
||||||
.Pp
|
|
||||||
If conversion succeeds, this call always returns zero.
|
If conversion succeeds, this call always returns zero.
|
||||||
Unlike
|
Unlike
|
||||||
.Xr mbtowc 3 ,
|
.Xr mbtowc 3 ,
|
||||||
the value returned does not indicate whether the current encoding of
|
the value returned does not indicate whether the current encoding of
|
||||||
the locale is state-dependent, i.e. uses shift sequences.
|
the locale is state-dependent, i.e. uses shift sequences.
|
||||||
.It "mbs == NULL "
|
.It Fa mbs No == Dv NULL
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
uses its own internal state object to keep the conversion state,
|
and
|
||||||
instead of an mbstate_t object pointed to by
|
.Fn mbrtoc32
|
||||||
.Fa mbs .
|
each use their own internal state object instead of the
|
||||||
This internal conversion state is initialized once at program startup.
|
.Fa mbs
|
||||||
It is not safe to call
|
argument.
|
||||||
|
Both internal state objects are initialized at startup time of the program,
|
||||||
|
and no other libc function ever changes either of them.
|
||||||
|
.Pp
|
||||||
|
If
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
again with a
|
or
|
||||||
|
.Fn mbrtoc32
|
||||||
|
is called with a
|
||||||
.Dv NULL
|
.Dv NULL
|
||||||
.Fa mbs
|
.Fa mbs
|
||||||
argument if
|
argument and that call returns
|
||||||
.Fn mbrtowc
|
.Po Vt size_t Pc Ns \-1 ,
|
||||||
returned (size_t)-1 because at this point the internal conversion state
|
the internal conversion state of the respective function becomes
|
||||||
is undefined.
|
permanently undefined and there is no way to reset it to any defined state.
|
||||||
.Pp
|
Consequently, after such a mishap, it is not safe
|
||||||
Calling any other functions in
|
to call the same function with a
|
||||||
.Em libc
|
.Dv NULL
|
||||||
never changes the internal
|
.Fa mbs
|
||||||
conversion state object of
|
argument ever again until the program is terminated.
|
||||||
.Fn mbrtowc .
|
|
||||||
.El
|
.El
|
||||||
.Sh RETURN VALUES
|
.Sh RETURN VALUES
|
||||||
.Bl -tag -width 012345678901
|
.Bl -tag -width 012345678901
|
||||||
@ -183,14 +197,18 @@ is not
|
|||||||
the corresponding wide character has been stored in the wchar_t object
|
the corresponding wide character has been stored in the wchar_t object
|
||||||
pointed to by
|
pointed to by
|
||||||
.Fa wc .
|
.Fa wc .
|
||||||
.It (size_t)-1
|
.It Po Vt size_t Pc Ns \-1
|
||||||
.Fa s
|
.Fa s
|
||||||
points to an illegal byte sequence which does not form a valid multibyte
|
points to an illegal byte sequence which does not form a valid multibyte
|
||||||
character in the current locale.
|
character in the current locale, or
|
||||||
.Fn mbrtowc
|
.Fa mbs
|
||||||
sets
|
points to an invalid or uninitialized object.
|
||||||
.Va errno
|
.Va errno
|
||||||
to EILSEQ.
|
is set to
|
||||||
|
.Er EILSEQ
|
||||||
|
or
|
||||||
|
.Er EINVAL ,
|
||||||
|
respectively.
|
||||||
The conversion state object pointed to by
|
The conversion state object pointed to by
|
||||||
.Fa mbs
|
.Fa mbs
|
||||||
is left in an undefined state and must be reinitialized before being
|
is left in an undefined state and must be reinitialized before being
|
||||||
@ -198,6 +216,8 @@ used again.
|
|||||||
.Pp
|
.Pp
|
||||||
Because applications using
|
Because applications using
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
|
or
|
||||||
|
.Fn mbrtoc32
|
||||||
are shielded from the specifics of the multibyte character encoding scheme,
|
are shielded from the specifics of the multibyte character encoding scheme,
|
||||||
it is impossible to repair byte sequences containing encoding errors.
|
it is impossible to repair byte sequences containing encoding errors.
|
||||||
Such byte sequences must be treated as invalid and potentially malicious input.
|
Such byte sequences must be treated as invalid and potentially malicious input.
|
||||||
@ -205,66 +225,90 @@ Applications must stop processing the byte string pointed to by
|
|||||||
.Fa s
|
.Fa s
|
||||||
and either discard any wide characters already converted, or cope with
|
and either discard any wide characters already converted, or cope with
|
||||||
truncated input.
|
truncated input.
|
||||||
.It (size_t)-2
|
.It Po Vt size_t Pc Ns \-2
|
||||||
.Fa s
|
.Fa s
|
||||||
points to an incomplete byte sequence of length
|
points to an incomplete byte sequence of length
|
||||||
.Fa n
|
.Fa n
|
||||||
which has been consumed and contains part of a valid multibyte character.
|
which has been consumed and contains part of a valid multibyte character.
|
||||||
The character may be completed by calling
|
The character may be completed by calling the same function again with
|
||||||
.Fn mbrtowc
|
|
||||||
again with
|
|
||||||
.Fa s
|
.Fa s
|
||||||
pointing to one or more subsequent bytes of the multibyte character and
|
pointing to one or more subsequent bytes of the multibyte character and
|
||||||
.Fa mbs
|
.Fa mbs
|
||||||
pointing to the conversion state object used during conversion of the
|
pointing to the conversion state object used during conversion of the
|
||||||
incomplete byte sequence.
|
incomplete byte sequence.
|
||||||
|
.It Po Vt size_t Pc Ns \-3
|
||||||
|
The next character resulting from a previous call has been stored into
|
||||||
|
.Fa wc ,
|
||||||
|
without consuming any additional bytes from
|
||||||
|
.Fa s .
|
||||||
|
This never happens for
|
||||||
|
.Fn mbrtowc ,
|
||||||
|
and on
|
||||||
|
.Ox ,
|
||||||
|
it never happens for
|
||||||
|
.Fn mbrtoc32
|
||||||
|
either.
|
||||||
.El
|
.El
|
||||||
.Sh ERRORS
|
.Sh ERRORS
|
||||||
The
|
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
function may cause an error in the following cases:
|
and
|
||||||
|
.Fn mbrtoc32
|
||||||
|
cause an error in the following cases:
|
||||||
.Bl -tag -width Er
|
.Bl -tag -width Er
|
||||||
.It Bq Er EILSEQ
|
.It Bq Er EILSEQ
|
||||||
.Fa s
|
.Fa s
|
||||||
points to an invalid multibyte character.
|
points to an invalid multibyte character.
|
||||||
.It Bq Er EINVAL
|
.It Bq Er EINVAL
|
||||||
.Fa mbs
|
.Fa mbs
|
||||||
points to an invalid or uninitialized mbstate_t object.
|
points to an invalid or uninitialized
|
||||||
|
.Vt mbstate_t
|
||||||
|
object.
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr mbrlen 3 ,
|
.Xr mbrlen 3 ,
|
||||||
.Xr mbtowc 3 ,
|
.Xr mbtowc 3 ,
|
||||||
.Xr setlocale 3
|
.Xr setlocale 3 ,
|
||||||
|
.Xr wcrtomb 3
|
||||||
.Sh STANDARDS
|
.Sh STANDARDS
|
||||||
The
|
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
function conforms to
|
conforms to
|
||||||
.\" .St -isoC-amd1 .
|
.St -isoC-amd1 .
|
||||||
ISO/IEC 9899/AMD1:1995
|
The restrict qualifier was added at
|
||||||
.Pq Dq ISO C90, Amendment 1 .
|
.St -isoC-99 .
|
||||||
The restrict qualifier is added at
|
.Pp
|
||||||
.\" .St -isoC99 .
|
.Fn mbrtoc32
|
||||||
ISO/IEC 9899:1999
|
conforms to
|
||||||
.Pq Dq ISO C99 .
|
.St -isoC-2011 .
|
||||||
|
.Sh HISTORY
|
||||||
|
.Fn mbrtowc
|
||||||
|
has been available since since
|
||||||
|
.Ox 3.8
|
||||||
|
and has provided support for UTF-8 since
|
||||||
|
.Ox 4.8 .
|
||||||
|
.Pp
|
||||||
|
.Fn mbrtoc32
|
||||||
|
has been available since since
|
||||||
|
.Ox 7.4 .
|
||||||
.Sh CAVEATS
|
.Sh CAVEATS
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
is not suitable for programs that care about internals of the character
|
and
|
||||||
|
.Fn mbrtoc32
|
||||||
|
are not suitable for programs that care about internals of the character
|
||||||
encoding scheme used by the byte string pointed to by
|
encoding scheme used by the byte string pointed to by
|
||||||
.Fa s .
|
.Fa s .
|
||||||
.Pp
|
.Pp
|
||||||
It is possible that
|
It is possible that these functions
|
||||||
.Fn mbrtowc
|
fail because of locale configuration errors.
|
||||||
fails because of locale configuration errors.
|
|
||||||
An
|
An
|
||||||
.Dq invalid
|
.Dq invalid
|
||||||
character sequence may simply be encoded in a different encoding than that
|
character sequence may simply be encoded in a different encoding than that
|
||||||
of the current locale.
|
of the current locale.
|
||||||
.Pp
|
.Pp
|
||||||
The special cases for
|
The special cases for
|
||||||
.Fa s
|
.Fa s No == Dv NULL
|
||||||
== NULL and
|
and
|
||||||
.Fa mbs
|
.Fa mbs No == Dv NULL
|
||||||
== NULL do not make any sense.
|
do not make any sense.
|
||||||
Instead of passing
|
Instead of passing
|
||||||
.Dv NULL
|
.Dv NULL
|
||||||
for
|
for
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
.\" $OpenBSD: wcrtomb.3,v 1.10 2015/03/22 18:02:11 stsp Exp $
|
.\" $OpenBSD: wcrtomb.3,v 1.11 2023/08/20 15:02:51 schwarze Exp $
|
||||||
.\" $NetBSD: wcrtomb.3,v 1.4 2003/09/08 17:54:31 wiz Exp $
|
.\" $NetBSD: wcrtomb.3,v 1.4 2003/09/08 17:54:31 wiz Exp $
|
||||||
.\"
|
.\"
|
||||||
|
.\" Copyright (c)2023 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
.\" Copyright (c)2002 Citrus Project,
|
.\" Copyright (c)2002 Citrus Project,
|
||||||
.\" All rights reserved.
|
.\" All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
@ -25,117 +26,161 @@
|
|||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: March 22 2015 $
|
.Dd $Mdocdate: August 20 2023 $
|
||||||
.Dt WCRTOMB 3
|
.Dt WCRTOMB 3
|
||||||
.Os
|
.Os
|
||||||
.\" ----------------------------------------------------------------------
|
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm wcrtomb
|
.Nm wcrtomb ,
|
||||||
.Nd converts a wide character to a multibyte character (restartable)
|
.Nm c32rtomb
|
||||||
.\" ----------------------------------------------------------------------
|
.Nd convert a wide character to a multibyte character
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.In wchar.h
|
.In wchar.h
|
||||||
.Ft size_t
|
.Ft size_t
|
||||||
.Fn wcrtomb "const char * restrict s" "wchar_t wc" "mbstate_t * restrict ps"
|
.Fo wcrtomb
|
||||||
.\" ----------------------------------------------------------------------
|
.Fa "const char * restrict s"
|
||||||
|
.Fa "wchar_t wc"
|
||||||
|
.Fa "mbstate_t * restrict mbs"
|
||||||
|
.Fc
|
||||||
|
.In uchar.h
|
||||||
|
.Ft size_t
|
||||||
|
.Fo c32rtomb
|
||||||
|
.Fa "char * restrict s"
|
||||||
|
.Fa "char32_t wc"
|
||||||
|
.Fa "mbstate_t * restrict mbs"
|
||||||
|
.Fc
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Fn wcrtomb
|
.Fn wcrtomb
|
||||||
converts the wide character given by
|
and
|
||||||
|
.Fn c32rtomb
|
||||||
|
convert the wide character
|
||||||
.Fa wc
|
.Fa wc
|
||||||
to the corresponding multibyte character, and stores up to
|
to the corresponding multibyte character, and store up to
|
||||||
.Dv MB_CUR_MAX
|
.Dv MB_CUR_MAX
|
||||||
bytes in the array pointed to by
|
bytes in the array pointed to by
|
||||||
.Fa s
|
.Fa s
|
||||||
if
|
if
|
||||||
.Fa s
|
.Fa s
|
||||||
is not a null pointer.
|
is not a
|
||||||
|
.Dv NULL
|
||||||
|
pointer.
|
||||||
|
The interpretation of
|
||||||
|
.Fa wc
|
||||||
|
is implementation-defined.
|
||||||
|
On
|
||||||
|
.Ox ,
|
||||||
|
.Vt wchar_t
|
||||||
|
and
|
||||||
|
.Vt char32_t
|
||||||
|
are of the same width and both are always interpreted as Unicode codepoints.
|
||||||
.Pp
|
.Pp
|
||||||
The behaviour of
|
The output encoding that
|
||||||
.Fn wcrtomb
|
.Fn wcrtomb
|
||||||
is affected by the
|
and
|
||||||
|
.Fn c32rtomb
|
||||||
|
use in
|
||||||
|
.Fa s
|
||||||
|
is determined by the
|
||||||
.Dv LC_CTYPE
|
.Dv LC_CTYPE
|
||||||
category of the current locale.
|
category of the current locale.
|
||||||
|
.Ox
|
||||||
|
only supports UTF-8 and ASCII output,
|
||||||
|
and these functions are only useful for UTF-8.
|
||||||
.Pp
|
.Pp
|
||||||
These are the special cases:
|
The following arguments cause special processing:
|
||||||
.Bl -tag -width 012345678901
|
.Bl -tag -width 012345678901
|
||||||
.It "wc == 0"
|
.It Fa wc No == 0
|
||||||
For state-dependent encodings,
|
A NUL byte is stored to
|
||||||
.Fn wcrtomb
|
.Pf * Fa s
|
||||||
stores a null byte preceded by a special byte sequence (if any)
|
and the state object pointed to by
|
||||||
to return to an initial state to the array pointed by
|
.Fa mbs
|
||||||
.Fa s ,
|
is reset to the initial state.
|
||||||
and the state object pointed by
|
On operating systems other than
|
||||||
.Fa ps
|
.Ox
|
||||||
also returned to an initial state.
|
that support state-dependent multibyte encodings, a special byte sequence
|
||||||
.It "s == NULL"
|
.Pq Dq shift sequence
|
||||||
.Fn wcrtomb
|
is written before the NUL byte to return to the initial state
|
||||||
just places
|
if that is required by the output encoding
|
||||||
.Fa ps
|
and by the current output encoding state.
|
||||||
into an initial state.
|
.It Fa mbs No == Dv NULL
|
||||||
It is equivalent to the following call:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
wcrtomb(buf, L'\e0', ps);
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Here,
|
|
||||||
.Fa buf
|
|
||||||
is a dummy buffer.
|
|
||||||
In this case,
|
|
||||||
.Fa wc
|
|
||||||
is ignored.
|
|
||||||
.It "ps == NULL"
|
|
||||||
.Fn mbrtowc
|
.Fn mbrtowc
|
||||||
uses its own internal state object to keep the conversion state,
|
and
|
||||||
instead of
|
.Fn c32rtomb
|
||||||
.Fa ps
|
each use their own internal state object instead of the
|
||||||
mentioned in this manual page.
|
.Fa mbs
|
||||||
.Pp
|
argument.
|
||||||
Calling any other functions in
|
Both internal state objects are initialized at startup time of the program,
|
||||||
|
and no other
|
||||||
.Em libc
|
.Em libc
|
||||||
never change the internal
|
function ever changes either of them.
|
||||||
state of
|
.It Fa s No == Dv NULL
|
||||||
.Fn mbrtowc ,
|
The object pointed to by
|
||||||
which is initialized at startup time of the program.
|
.Fa mbs ,
|
||||||
|
or the internal object if
|
||||||
|
.Fa mbs
|
||||||
|
is a
|
||||||
|
.Dv NULL
|
||||||
|
pointer, is reset to the initial state,
|
||||||
|
.Fa wc
|
||||||
|
is ignored, and 1 is returned.
|
||||||
.El
|
.El
|
||||||
.\" ----------------------------------------------------------------------
|
|
||||||
.Sh RETURN VALUES
|
.Sh RETURN VALUES
|
||||||
.Fn wcrtomb
|
.Fn wcrtomb
|
||||||
returns the number of bytes (including any shift sequences)
|
and
|
||||||
|
.Fn c32rtomb
|
||||||
|
return the number of bytes (including any shift sequences)
|
||||||
which are stored in the array pointed to by
|
which are stored in the array pointed to by
|
||||||
.Fa s .
|
.Fa s ,
|
||||||
|
or 1 if
|
||||||
|
.Fa s
|
||||||
|
is
|
||||||
|
.Dv NULL .
|
||||||
If
|
If
|
||||||
.Fa wc
|
.Fa wc
|
||||||
is not a valid wide character,
|
is not a valid wide character
|
||||||
.Fn wcrtomb
|
or if it cannot be represented in the multibyte encoding selected with
|
||||||
returns (size_t)-1
|
.Dv LC_CTYPE ,
|
||||||
and sets
|
both functions return
|
||||||
|
.Po Vt size_t Pc Ns \-1
|
||||||
|
and set
|
||||||
.Va errno
|
.Va errno
|
||||||
to indicate error.
|
to indicate the error.
|
||||||
.\" ----------------------------------------------------------------------
|
|
||||||
.Sh ERRORS
|
.Sh ERRORS
|
||||||
.Fn wcrtomb
|
.Fn wcrtomb
|
||||||
may cause an error in the following cases:
|
and
|
||||||
|
.Fn c32rtomb
|
||||||
|
cause an error in the following cases:
|
||||||
.Bl -tag -width Er
|
.Bl -tag -width Er
|
||||||
.It Bq Er EILSEQ
|
.It Bq Er EILSEQ
|
||||||
.Fa wc
|
.Fa wc
|
||||||
is not a valid wide character.
|
is not a valid wide character or cannot be represented using
|
||||||
|
.Dv LC_CTYPE .
|
||||||
.It Bq Er EINVAL
|
.It Bq Er EINVAL
|
||||||
.Fa ps
|
.Fa mbs
|
||||||
points to an invalid or uninitialized mbstate_t object.
|
points to an invalid or uninitialized
|
||||||
|
.Vt mbstate_t
|
||||||
|
object.
|
||||||
.El
|
.El
|
||||||
.\" ----------------------------------------------------------------------
|
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
|
.Xr mbrtowc 3 ,
|
||||||
.Xr setlocale 3 ,
|
.Xr setlocale 3 ,
|
||||||
.Xr wctomb 3
|
.Xr wctomb 3
|
||||||
.\" ----------------------------------------------------------------------
|
|
||||||
.Sh STANDARDS
|
.Sh STANDARDS
|
||||||
The
|
|
||||||
.Fn wcrtomb
|
.Fn wcrtomb
|
||||||
function conforms to
|
conforms to
|
||||||
.\" .St -isoC-amd1 .
|
.St -isoC-amd1 .
|
||||||
ISO/IEC 9899/AMD1:1995
|
The restrict qualifier was added at
|
||||||
.Pq Dq ISO C90, Amendment 1 .
|
.St -isoC-99 .
|
||||||
The restrict qualifier is added at
|
.Pp
|
||||||
.\" .St -isoC99 .
|
.Fn c32rtomb
|
||||||
ISO/IEC 9899/1999
|
conforms to
|
||||||
.Pq Dq ISO C99 .
|
.St -isoC-2011 .
|
||||||
|
.Sh HISTORY
|
||||||
|
.Fn wcrtomb
|
||||||
|
has been available since
|
||||||
|
.Ox 3.8
|
||||||
|
and has provided support for UTF-8 since
|
||||||
|
.Ox 4.8 .
|
||||||
|
.Pp
|
||||||
|
.Fn c32rtomb
|
||||||
|
has been available since since
|
||||||
|
.Ox 7.4 .
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
major=97
|
major=97
|
||||||
minor=0
|
minor=1
|
||||||
# note: If changes were made to include/thread_private.h or if system calls
|
# note: If changes were made to include/thread_private.h or if system calls
|
||||||
# were added/changed then librthread/shlib_version must also be updated.
|
# were added/changed then librthread/shlib_version must also be updated.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile.inc,v 1.173 2023/02/27 14:59:33 deraadt Exp $
|
# $OpenBSD: Makefile.inc,v 1.174 2023/08/20 15:17:53 visa Exp $
|
||||||
# $NetBSD: Makefile.inc,v 1.35 1995/10/16 23:49:07 jtc Exp $
|
# $NetBSD: Makefile.inc,v 1.35 1995/10/16 23:49:07 jtc Exp $
|
||||||
# @(#)Makefile.inc 8.1 (Berkeley) 6/17/93
|
# @(#)Makefile.inc 8.1 (Berkeley) 6/17/93
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ ASM= __semctl.o __thrsigdivert.o \
|
|||||||
getpriority.o getresgid.o getresuid.o \
|
getpriority.o getresgid.o getresuid.o \
|
||||||
getrlimit.o getrusage.o getsid.o getsockname.o \
|
getrlimit.o getrusage.o getsid.o getsockname.o \
|
||||||
getsockopt.o ioctl.o \
|
getsockopt.o ioctl.o \
|
||||||
kevent.o kill.o kqueue.o ktrace.o lchown.o \
|
kevent.o kill.o kqueue.o kqueue1.o ktrace.o lchown.o \
|
||||||
link.o linkat.o listen.o lseek.o lstat.o \
|
link.o linkat.o listen.o lseek.o lstat.o \
|
||||||
madvise.o mimmutable.o minherit.o mkdir.o mkdirat.o mkfifo.o mkfifoat.o \
|
madvise.o mimmutable.o minherit.o mkdir.o mkdirat.o mkfifo.o mkfifoat.o \
|
||||||
mknod.o mknodat.o mlock.o mlockall.o mmap.o mount.o mprotect.o \
|
mknod.o mknodat.o mlock.o mlockall.o mmap.o mount.o mprotect.o \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $OpenBSD: kqueue.2,v 1.49 2023/08/13 10:23:26 jmc Exp $
|
.\" $OpenBSD: kqueue.2,v 1.51 2023/08/20 19:52:40 jmc Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2000 Jonathan Lemon
|
.\" Copyright (c) 2000 Jonathan Lemon
|
||||||
.\" All rights reserved.
|
.\" All rights reserved.
|
||||||
@ -26,11 +26,12 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.18 2001/02/14 08:48:35 guido Exp $
|
.\" $FreeBSD: src/lib/libc/sys/kqueue.2,v 1.18 2001/02/14 08:48:35 guido Exp $
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: August 13 2023 $
|
.Dd $Mdocdate: August 20 2023 $
|
||||||
.Dt KQUEUE 2
|
.Dt KQUEUE 2
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm kqueue ,
|
.Nm kqueue ,
|
||||||
|
.Nm kqueue1 ,
|
||||||
.Nm kevent ,
|
.Nm kevent ,
|
||||||
.Nm EV_SET
|
.Nm EV_SET
|
||||||
.Nd kernel event notification mechanism
|
.Nd kernel event notification mechanism
|
||||||
@ -43,6 +44,12 @@
|
|||||||
.Ft int
|
.Ft int
|
||||||
.Fn kevent "int kq" "const struct kevent *changelist" "int nchanges" "struct kevent *eventlist" "int nevents" "const struct timespec *timeout"
|
.Fn kevent "int kq" "const struct kevent *changelist" "int nchanges" "struct kevent *eventlist" "int nevents" "const struct timespec *timeout"
|
||||||
.Fn EV_SET "&kev" ident filter flags fflags data udata
|
.Fn EV_SET "&kev" ident filter flags fflags data udata
|
||||||
|
.In sys/types.h
|
||||||
|
.In sys/event.h
|
||||||
|
.In sys/time.h
|
||||||
|
.In fcntl.h
|
||||||
|
.Ft int
|
||||||
|
.Fn kqueue1 "int flags"
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Fn kqueue
|
.Fn kqueue
|
||||||
provides a generic method of notifying the user when an event
|
provides a generic method of notifying the user when an event
|
||||||
@ -78,6 +85,18 @@ The queue is not inherited by a child created with
|
|||||||
.Xr fork 2 .
|
.Xr fork 2 .
|
||||||
Similarly, kqueues cannot be passed across UNIX-domain sockets.
|
Similarly, kqueues cannot be passed across UNIX-domain sockets.
|
||||||
.Pp
|
.Pp
|
||||||
|
The
|
||||||
|
.Fn kqueue1
|
||||||
|
function is identical to
|
||||||
|
.Fn kqueue
|
||||||
|
except that the close-on-exec flag on the new file descriptor
|
||||||
|
is determined by the
|
||||||
|
.Dv O_CLOEXEC
|
||||||
|
flag
|
||||||
|
in the
|
||||||
|
.Fa flags
|
||||||
|
argument.
|
||||||
|
.Pp
|
||||||
.Fn kevent
|
.Fn kevent
|
||||||
is used to register events with the queue, and return any pending
|
is used to register events with the queue, and return any pending
|
||||||
events to the user.
|
events to the user.
|
||||||
@ -545,7 +564,9 @@ contains the events which triggered the filter.
|
|||||||
.El
|
.El
|
||||||
.Sh RETURN VALUES
|
.Sh RETURN VALUES
|
||||||
.Fn kqueue
|
.Fn kqueue
|
||||||
creates a new kernel event queue and returns a file descriptor.
|
and
|
||||||
|
.Fn kqueue1
|
||||||
|
create a new kernel event queue and returns a file descriptor.
|
||||||
If there was an error creating the kernel event queue, a value of -1 is
|
If there was an error creating the kernel event queue, a value of -1 is
|
||||||
returned and
|
returned and
|
||||||
.Va errno
|
.Va errno
|
||||||
@ -577,7 +598,9 @@ returns 0.
|
|||||||
.Sh ERRORS
|
.Sh ERRORS
|
||||||
The
|
The
|
||||||
.Fn kqueue
|
.Fn kqueue
|
||||||
function fails if:
|
and
|
||||||
|
.Fn kqueue1
|
||||||
|
functions fail if:
|
||||||
.Bl -tag -width Er
|
.Bl -tag -width Er
|
||||||
.It Bq Er ENOMEM
|
.It Bq Er ENOMEM
|
||||||
The kernel failed to allocate enough memory for the kernel queue.
|
The kernel failed to allocate enough memory for the kernel queue.
|
||||||
@ -587,6 +610,15 @@ The per-process descriptor table is full.
|
|||||||
The system file table is full.
|
The system file table is full.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
|
In addition,
|
||||||
|
.Fn kqueue1
|
||||||
|
fails if:
|
||||||
|
.Bl -tag -width Er
|
||||||
|
.It Bq Er EINVAL
|
||||||
|
.Fa flags
|
||||||
|
is invalid.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
The
|
The
|
||||||
.Fn kevent
|
.Fn kevent
|
||||||
function fails if:
|
function fails if:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $OpenBSD: pledge.2,v 1.66 2023/06/02 17:44:29 cheloha Exp $
|
.\" $OpenBSD: pledge.2,v 1.67 2023/08/20 15:17:53 visa Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
.\" Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
||||||
.\"
|
.\"
|
||||||
@ -14,7 +14,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: June 2 2023 $
|
.Dd $Mdocdate: August 20 2023 $
|
||||||
.Dt PLEDGE 2
|
.Dt PLEDGE 2
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -198,6 +198,7 @@ As a result, all the expected functionalities of libc stdio work.
|
|||||||
.Xr issetugid 2 ,
|
.Xr issetugid 2 ,
|
||||||
.Xr kevent 2 ,
|
.Xr kevent 2 ,
|
||||||
.Xr kqueue 2 ,
|
.Xr kqueue 2 ,
|
||||||
|
.Xr kqueue1 2 ,
|
||||||
.Xr lseek 2 ,
|
.Xr lseek 2 ,
|
||||||
.Xr madvise 2 ,
|
.Xr madvise 2 ,
|
||||||
.Xr minherit 2 ,
|
.Xr minherit 2 ,
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
major=27
|
major=27
|
||||||
minor=0
|
minor=1
|
||||||
|
@ -1,8 +1,23 @@
|
|||||||
|
|
||||||
ChangeLog file for zlib
|
ChangeLog file for zlib
|
||||||
|
|
||||||
Changes in 1.2.13.1 (xx Oct 2022)
|
Changes in 1.3 (18 Aug 2023)
|
||||||
-
|
- Remove K&R function definitions and zlib2ansi
|
||||||
|
- Fix bug in deflateBound() for level 0 and memLevel 9
|
||||||
|
- Fix bug when gzungetc() is used immediately after gzopen()
|
||||||
|
- Fix bug when using gzflush() with a very small buffer
|
||||||
|
- Fix crash when gzsetparams() attempted for transparent write
|
||||||
|
- Fix test/example.c to work with FORCE_STORED
|
||||||
|
- Rewrite of zran in examples (see zran.c version history)
|
||||||
|
- Fix minizip to allow it to open an empty zip file
|
||||||
|
- Fix reading disk number start on zip64 files in minizip
|
||||||
|
- Fix logic error in minizip argument processing
|
||||||
|
- Add minizip testing to Makefile
|
||||||
|
- Read multiple bytes instead of byte-by-byte in minizip unzip.c
|
||||||
|
- Add memory sanitizer to configure (--memory)
|
||||||
|
- Various portability improvements
|
||||||
|
- Various documentation improvements
|
||||||
|
- Various spelling and typo corrections
|
||||||
|
|
||||||
Changes in 1.2.13 (13 Oct 2022)
|
Changes in 1.2.13 (13 Oct 2022)
|
||||||
- Fix configure issue that discarded provided CC definition
|
- Fix configure issue that discarded provided CC definition
|
||||||
@ -1448,7 +1463,7 @@ Changes in 0.99 (27 Jan 96)
|
|||||||
- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
|
- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
|
||||||
- in fcalloc, normalize pointer if size > 65520 bytes
|
- in fcalloc, normalize pointer if size > 65520 bytes
|
||||||
- don't use special fcalloc for 32 bit Borland C++
|
- don't use special fcalloc for 32 bit Borland C++
|
||||||
- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
|
- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc.
|
||||||
- use Z_BINARY instead of BINARY
|
- use Z_BINARY instead of BINARY
|
||||||
- document that gzclose after gzdopen will close the file
|
- document that gzclose after gzdopen will close the file
|
||||||
- allow "a" as mode in gzopen
|
- allow "a" as mode in gzopen
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
ZLIB DATA COMPRESSION LIBRARY
|
ZLIB DATA COMPRESSION LIBRARY
|
||||||
|
|
||||||
zlib 1.2.13.1 is a general purpose data compression library. All the code is
|
zlib 1.3 is a general purpose data compression library. All the code is
|
||||||
thread safe. The data format used by the zlib library is described by RFCs
|
thread safe. The data format used by the zlib library is described by RFCs
|
||||||
(Request for Comments) 1950 to 1952 in the files
|
(Request for Comments) 1950 to 1952 in the files
|
||||||
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
|
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
|
||||||
@ -31,7 +31,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
|
|||||||
issue of Dr. Dobb's Journal; a copy of the article is available at
|
issue of Dr. Dobb's Journal; a copy of the article is available at
|
||||||
https://marknelson.us/posts/1997/01/01/zlib-engine.html .
|
https://marknelson.us/posts/1997/01/01/zlib-engine.html .
|
||||||
|
|
||||||
The changes made in version 1.2.13.1 are documented in the file ChangeLog.
|
The changes made in version 1.3 are documented in the file ChangeLog.
|
||||||
|
|
||||||
Unsupported third party contributions are provided in directory contrib/ .
|
Unsupported third party contributions are provided in directory contrib/ .
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ Acknowledgments:
|
|||||||
|
|
||||||
Copyright notice:
|
Copyright notice:
|
||||||
|
|
||||||
(C) 1995-2022 Jean-loup Gailly and Mark Adler
|
(C) 1995-2023 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* deflate.c -- compress data using the deflation algorithm
|
/* deflate.c -- compress data using the deflation algorithm
|
||||||
* Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
|
* Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* inftrees.c -- generate Huffman trees for efficient decoding
|
/* inftrees.c -- generate Huffman trees for efficient decoding
|
||||||
* Copyright (C) 1995-2022 Mark Adler
|
* Copyright (C) 1995-2023 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens,
|
|||||||
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
||||||
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
||||||
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
||||||
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 76};
|
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 198, 203};
|
||||||
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
||||||
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
||||||
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
||||||
version 1.2.13.1, October xxth, 2022
|
version 1.3, August 18th, 2023
|
||||||
|
|
||||||
Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
|
Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
@ -37,12 +37,12 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ZLIB_VERSION "1.2.13.1-motley"
|
#define ZLIB_VERSION "1.3"
|
||||||
#define ZLIB_VERNUM 0x12d1
|
#define ZLIB_VERNUM 0x1300
|
||||||
#define ZLIB_VER_MAJOR 1
|
#define ZLIB_VER_MAJOR 1
|
||||||
#define ZLIB_VER_MINOR 2
|
#define ZLIB_VER_MINOR 3
|
||||||
#define ZLIB_VER_REVISION 13
|
#define ZLIB_VER_REVISION 0
|
||||||
#define ZLIB_VER_SUBREVISION 1
|
#define ZLIB_VER_SUBREVISION 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The 'zlib' compression library provides in-memory compression and
|
The 'zlib' compression library provides in-memory compression and
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: casttest.c,v 1.2 2018/07/17 17:06:49 tb Exp $ */
|
/* $OpenBSD: casttest.c,v 1.7 2023/08/20 22:35:52 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@ -59,164 +59,139 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_CAST is defined */
|
|
||||||
|
|
||||||
#include <openssl/cast.h>
|
#include <openssl/cast.h>
|
||||||
|
|
||||||
#define FULL_TEST
|
static const unsigned char k[16] = {
|
||||||
|
0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
|
||||||
|
0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A,
|
||||||
|
};
|
||||||
|
|
||||||
static unsigned char k[16]={
|
static const unsigned char in[8] = {
|
||||||
0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
|
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
|
||||||
0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A
|
};
|
||||||
};
|
|
||||||
|
|
||||||
static unsigned char in[8]={ 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
|
static int k_len[3] = {16, 10, 5};
|
||||||
|
static const unsigned char c[3][8] = {
|
||||||
static int k_len[3]={16,10,5};
|
{0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2},
|
||||||
static unsigned char c[3][8]={
|
{0xEB, 0x6A, 0x71, 0x1A, 0x2C, 0x02, 0x27, 0x1B},
|
||||||
{0x23,0x8B,0x4F,0xE5,0x84,0x7E,0x44,0xB2},
|
{0x7A, 0xC8, 0x16, 0xD1, 0x6E, 0x9B, 0x30, 0x2E},
|
||||||
{0xEB,0x6A,0x71,0x1A,0x2C,0x02,0x27,0x1B},
|
};
|
||||||
{0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E},
|
|
||||||
};
|
|
||||||
static unsigned char out[80];
|
static unsigned char out[80];
|
||||||
|
|
||||||
static unsigned char in_a[16]={
|
static const unsigned char in_a[16] = {
|
||||||
0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
|
0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
|
||||||
0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A};
|
0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A,
|
||||||
static unsigned char in_b[16]={
|
};
|
||||||
0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
|
static const unsigned char in_b[16] = {
|
||||||
0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A};
|
0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
|
||||||
|
0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A,
|
||||||
|
};
|
||||||
|
|
||||||
static unsigned char c_a[16]={
|
static const unsigned char c_a[16] = {
|
||||||
0xEE,0xA9,0xD0,0xA2,0x49,0xFD,0x3B,0xA6,
|
0xEE, 0xA9, 0xD0, 0xA2, 0x49, 0xFD, 0x3B, 0xA6,
|
||||||
0xB3,0x43,0x6F,0xB8,0x9D,0x6D,0xCA,0x92};
|
0xB3, 0x43, 0x6F, 0xB8, 0x9D, 0x6D, 0xCA, 0x92,
|
||||||
static unsigned char c_b[16]={
|
};
|
||||||
0xB2,0xC9,0x5E,0xB0,0x0C,0x31,0xAD,0x71,
|
static const unsigned char c_b[16] = {
|
||||||
0x80,0xAC,0x05,0xB8,0xE8,0x3D,0x69,0x6E};
|
0xB2, 0xC9, 0x5E, 0xB0, 0x0C, 0x31, 0xAD, 0x71,
|
||||||
|
0x80, 0xAC, 0x05, 0xB8, 0xE8, 0x3D, 0x69, 0x6E,
|
||||||
|
};
|
||||||
|
|
||||||
#if 0
|
int
|
||||||
char *text="Hello to all people out there";
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
CAST_KEY key_b;
|
||||||
|
int i, z, err = 0;
|
||||||
|
CAST_KEY key;
|
||||||
|
|
||||||
static unsigned char cfb_key[16]={
|
for (z = 0; z < 3; z++) {
|
||||||
0xe1,0xf0,0xc3,0xd2,0xa5,0xb4,0x87,0x96,
|
CAST_set_key(&key, k_len[z], k);
|
||||||
0x69,0x78,0x4b,0x5a,0x2d,0x3c,0x0f,0x1e,
|
|
||||||
};
|
|
||||||
static unsigned char cfb_iv[80]={0x34,0x12,0x78,0x56,0xab,0x90,0xef,0xcd};
|
|
||||||
static unsigned char cfb_buf1[40],cfb_buf2[40],cfb_tmp[8];
|
|
||||||
#define CFB_TEST_SIZE 24
|
|
||||||
static unsigned char plain[CFB_TEST_SIZE]=
|
|
||||||
{
|
|
||||||
0x4e,0x6f,0x77,0x20,0x69,0x73,
|
|
||||||
0x20,0x74,0x68,0x65,0x20,0x74,
|
|
||||||
0x69,0x6d,0x65,0x20,0x66,0x6f,
|
|
||||||
0x72,0x20,0x61,0x6c,0x6c,0x20
|
|
||||||
};
|
|
||||||
static unsigned char cfb_cipher64[CFB_TEST_SIZE]={
|
|
||||||
0x59,0xD8,0xE2,0x65,0x00,0x58,0x6C,0x3F,
|
|
||||||
0x2C,0x17,0x25,0xD0,0x1A,0x38,0xB7,0x2A,
|
|
||||||
0x39,0x61,0x37,0xDC,0x79,0xFB,0x9F,0x45
|
|
||||||
|
|
||||||
/* 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
|
CAST_ecb_encrypt(in, out, &key, CAST_ENCRYPT);
|
||||||
0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
|
if (memcmp(out, &(c[z][0]), 8) != 0) {
|
||||||
0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
|
printf("ecb cast error encrypting for keysize %d\n",
|
||||||
};
|
k_len[z]*8);
|
||||||
#endif
|
printf("got :");
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
printf("%02X ", out[i]);
|
||||||
|
printf("\n");
|
||||||
|
printf("expected:");
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
printf("%02X ", c[z][i]);
|
||||||
|
err = 20;
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
CAST_ecb_encrypt(out, out, &key, CAST_DECRYPT);
|
||||||
{
|
if (memcmp(out, in, 8) != 0) {
|
||||||
#ifdef FULL_TEST
|
printf("ecb cast error decrypting for keysize %d\n",
|
||||||
long l;
|
k_len[z]*8);
|
||||||
CAST_KEY key_b;
|
printf("got :");
|
||||||
#endif
|
for (i = 0; i < 8; i++)
|
||||||
int i,z,err=0;
|
printf("%02X ", out[i]);
|
||||||
CAST_KEY key;
|
printf("\n");
|
||||||
|
printf("expected:");
|
||||||
for (z=0; z<3; z++)
|
for (i = 0; i < 8; i++)
|
||||||
{
|
printf("%02X ", in[i]);
|
||||||
CAST_set_key(&key,k_len[z],k);
|
printf("\n");
|
||||||
|
err = 3;
|
||||||
CAST_ecb_encrypt(in,out,&key,CAST_ENCRYPT);
|
}
|
||||||
if (memcmp(out,&(c[z][0]),8) != 0)
|
|
||||||
{
|
|
||||||
printf("ecb cast error encrypting for keysize %d\n",k_len[z]*8);
|
|
||||||
printf("got :");
|
|
||||||
for (i=0; i<8; i++)
|
|
||||||
printf("%02X ",out[i]);
|
|
||||||
printf("\n");
|
|
||||||
printf("expected:");
|
|
||||||
for (i=0; i<8; i++)
|
|
||||||
printf("%02X ",c[z][i]);
|
|
||||||
err=20;
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
CAST_ecb_encrypt(out,out,&key,CAST_DECRYPT);
|
|
||||||
if (memcmp(out,in,8) != 0)
|
|
||||||
{
|
|
||||||
printf("ecb cast error decrypting for keysize %d\n",k_len[z]*8);
|
|
||||||
printf("got :");
|
|
||||||
for (i=0; i<8; i++)
|
|
||||||
printf("%02X ",out[i]);
|
|
||||||
printf("\n");
|
|
||||||
printf("expected:");
|
|
||||||
for (i=0; i<8; i++)
|
|
||||||
printf("%02X ",in[i]);
|
|
||||||
printf("\n");
|
|
||||||
err=3;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
printf("ecb cast5 ok\n");
|
printf("ecb cast5 ok\n");
|
||||||
|
|
||||||
#ifdef FULL_TEST
|
{
|
||||||
{
|
unsigned char out_a[16], out_b[16];
|
||||||
unsigned char out_a[16],out_b[16];
|
static char *hex = "0123456789ABCDEF";
|
||||||
static char *hex="0123456789ABCDEF";
|
|
||||||
|
|
||||||
printf("This test will take some time....");
|
printf("This test will take some time....");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
memcpy(out_a,in_a,sizeof(in_a));
|
memcpy(out_a, in_a, sizeof(in_a));
|
||||||
memcpy(out_b,in_b,sizeof(in_b));
|
memcpy(out_b, in_b, sizeof(in_b));
|
||||||
i=1;
|
i = 1;
|
||||||
|
|
||||||
for (l=0; l<1000000L; l++)
|
for (l = 0; l < 1000000L; l++) {
|
||||||
{
|
CAST_set_key(&key_b, 16, out_b);
|
||||||
CAST_set_key(&key_b,16,out_b);
|
CAST_ecb_encrypt(&(out_a[0]), &(out_a[0]), &key_b,
|
||||||
CAST_ecb_encrypt(&(out_a[0]),&(out_a[0]),&key_b,CAST_ENCRYPT);
|
CAST_ENCRYPT);
|
||||||
CAST_ecb_encrypt(&(out_a[8]),&(out_a[8]),&key_b,CAST_ENCRYPT);
|
CAST_ecb_encrypt(&(out_a[8]), &(out_a[8]), &key_b,
|
||||||
CAST_set_key(&key,16,out_a);
|
CAST_ENCRYPT);
|
||||||
CAST_ecb_encrypt(&(out_b[0]),&(out_b[0]),&key,CAST_ENCRYPT);
|
CAST_set_key(&key, 16, out_a);
|
||||||
CAST_ecb_encrypt(&(out_b[8]),&(out_b[8]),&key,CAST_ENCRYPT);
|
CAST_ecb_encrypt(&(out_b[0]), &(out_b[0]), &key,
|
||||||
if ((l & 0xffff) == 0xffff)
|
CAST_ENCRYPT);
|
||||||
{
|
CAST_ecb_encrypt(&(out_b[8]), &(out_b[8]), &key,
|
||||||
printf("%c",hex[i&0x0f]);
|
CAST_ENCRYPT);
|
||||||
fflush(stdout);
|
if ((l & 0xffff) == 0xffff) {
|
||||||
i++;
|
printf("%c", hex[i & 0x0f]);
|
||||||
}
|
fflush(stdout);
|
||||||
}
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( (memcmp(out_a,c_a,sizeof(c_a)) != 0) ||
|
if ((memcmp(out_a, c_a, sizeof(c_a)) != 0) ||
|
||||||
(memcmp(out_b,c_b,sizeof(c_b)) != 0))
|
(memcmp(out_b, c_b, sizeof(c_b)) != 0)) {
|
||||||
{
|
printf("\n");
|
||||||
printf("\n");
|
printf("Error\n");
|
||||||
printf("Error\n");
|
|
||||||
|
|
||||||
printf("A out =");
|
printf("A out =");
|
||||||
for (i=0; i<16; i++) printf("%02X ",out_a[i]);
|
for (i = 0; i < 16; i++)
|
||||||
printf("\nactual=");
|
printf("%02X ", out_a[i]);
|
||||||
for (i=0; i<16; i++) printf("%02X ",c_a[i]);
|
printf("\nactual=");
|
||||||
printf("\n");
|
for (i = 0; i < 16; i++)
|
||||||
|
printf("%02X ", c_a[i]);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
printf("B out =");
|
printf("B out =");
|
||||||
for (i=0; i<16; i++) printf("%02X ",out_b[i]);
|
for (i = 0; i < 16; i++)
|
||||||
printf("\nactual=");
|
printf("%02X ", out_b[i]);
|
||||||
for (i=0; i<16; i++) printf("%02X ",c_b[i]);
|
printf("\nactual=");
|
||||||
printf("\n");
|
for (i = 0; i < 16; i++)
|
||||||
}
|
printf("%02X ", c_b[i]);
|
||||||
else
|
printf("\n");
|
||||||
printf(" ok\n");
|
} else
|
||||||
}
|
printf(" ok\n");
|
||||||
#endif
|
}
|
||||||
|
|
||||||
exit(err);
|
exit(err);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: dhtest.c,v 1.12 2023/08/12 06:30:43 tb Exp $ */
|
/* $OpenBSD: dhtest.c,v 1.14 2023/08/20 22:21:00 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@ -56,12 +56,6 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
|
||||||
* deprecated functions for openssl-internal code */
|
|
||||||
#ifdef OPENSSL_NO_DEPRECATED
|
|
||||||
#undef OPENSSL_NO_DEPRECATED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -98,7 +92,8 @@ main(int argc, char *argv[])
|
|||||||
BN_GENCB *_cb;
|
BN_GENCB *_cb;
|
||||||
DH *dh = NULL;
|
DH *dh = NULL;
|
||||||
unsigned char *buf = NULL;
|
unsigned char *buf = NULL;
|
||||||
int i, buf_len, secret_len;
|
int flags, buf_len, secret_len;
|
||||||
|
int i;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
if ((_cb = BN_GENCB_new()) == NULL)
|
if ((_cb = BN_GENCB_new()) == NULL)
|
||||||
@ -118,15 +113,15 @@ main(int argc, char *argv[])
|
|||||||
if (!DH_generate_parameters_ex(dh, 64, DH_GENERATOR_5, _cb))
|
if (!DH_generate_parameters_ex(dh, 64, DH_GENERATOR_5, _cb))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (!DH_check(dh, &i))
|
if (!DH_check(dh, &flags))
|
||||||
goto err;
|
goto err;
|
||||||
if (i & DH_CHECK_P_NOT_PRIME)
|
if (flags & DH_CHECK_P_NOT_PRIME)
|
||||||
printf("p value is not prime\n");
|
printf("p value is not prime\n");
|
||||||
if (i & DH_CHECK_P_NOT_SAFE_PRIME)
|
if (flags & DH_CHECK_P_NOT_SAFE_PRIME)
|
||||||
printf("p value is not a safe prime\n");
|
printf("p value is not a safe prime\n");
|
||||||
if (i & DH_UNABLE_TO_CHECK_GENERATOR)
|
if (flags & DH_UNABLE_TO_CHECK_GENERATOR)
|
||||||
printf("unable to check the generator value\n");
|
printf("unable to check the generator value\n");
|
||||||
if (i & DH_NOT_SUITABLE_GENERATOR)
|
if (flags & DH_NOT_SUITABLE_GENERATOR)
|
||||||
printf("the g value is not a generator\n");
|
printf("the g value is not a generator\n");
|
||||||
|
|
||||||
printf("\np = ");
|
printf("\np = ");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: dsatest.c,v 1.8 2023/08/12 06:23:59 tb Exp $ */
|
/* $OpenBSD: dsatest.c,v 1.9 2023/08/20 22:22:55 tb Exp $ */
|
||||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@ -56,12 +56,6 @@
|
|||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
|
||||||
* deprecated functions for openssl-internal code */
|
|
||||||
#ifdef OPENSSL_NO_DEPRECATED
|
|
||||||
#undef OPENSSL_NO_DEPRECATED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
41
regress/sbin/bioctl/Makefile
Normal file
41
regress/sbin/bioctl/Makefile
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# $OpenBSD: Makefile,v 1.1 2023/08/20 23:19:00 kn Exp $
|
||||||
|
|
||||||
|
BIOCTL ?= /sbin/bioctl
|
||||||
|
|
||||||
|
CHUNKFILE = disk.img
|
||||||
|
CHUNKDEVFILE = chunk.txt
|
||||||
|
VOLDEVFILE = vol.txt
|
||||||
|
|
||||||
|
OLDPW = oldsecret
|
||||||
|
NEWPW = securenew
|
||||||
|
|
||||||
|
|
||||||
|
REGRESS_SETUP_ONCE = create-chunk
|
||||||
|
|
||||||
|
create-chunk:
|
||||||
|
dd if=/dev/zero of=${CHUNKFILE} bs=512k count=0 seek=1 status=none
|
||||||
|
${SUDO} vnconfig -- ${CHUNKFILE} 1>${CHUNKDEVFILE}
|
||||||
|
echo 'RAID *' | ${SUDO} disklabel -wAT- -- "$$(<${CHUNKDEVFILE})"
|
||||||
|
|
||||||
|
|
||||||
|
REGRESS_TARGETS = scripted-create-volume \
|
||||||
|
scripted-change-passphrase
|
||||||
|
|
||||||
|
scripted-create-volume:
|
||||||
|
printf '%s\n' '${OLDPW}' | \
|
||||||
|
${SUDO} ${BIOCTL} -s -cC -l"$$(<${CHUNKDEVFILE})a" -- softraid0 | \
|
||||||
|
grep -o 'sd[0-9]*$$' -- 1>${VOLDEVFILE}
|
||||||
|
|
||||||
|
scripted-change-passphrase:
|
||||||
|
printf '%s\n%s\n' '${OLDPW}' '${NEWPW}' | \
|
||||||
|
${SUDO} ${BIOCTL} -s -P -- "$$(<${VOLDEVFILE})"
|
||||||
|
|
||||||
|
|
||||||
|
CLEANFILES = *.txt *.img
|
||||||
|
REGRESS_CLEANUP = cleanup
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
${SUDO} ${BIOCTL} -d -- "$$(<${VOLDEVFILE})" 2>/dev/null
|
||||||
|
${SUDO} vnconfig -u -- "$$(<${CHUNKDEVFILE})" 2>/dev/null
|
||||||
|
|
||||||
|
.include <bsd.regress.mk>
|
@ -1,13 +1,15 @@
|
|||||||
# $OpenBSD: Makefile,v 1.31 2022/03/30 05:11:52 anton Exp $
|
# $OpenBSD: Makefile,v 1.32 2023/08/20 15:19:34 visa Exp $
|
||||||
|
|
||||||
PROG= kqueue-test
|
PROG= kqueue-test
|
||||||
CFLAGS+=-Wall
|
CFLAGS+=-Wall
|
||||||
SRCS= kqueue-pipe.c kqueue-fork.c main.c kqueue-process.c kqueue-random.c \
|
SRCS= kqueue-pipe.c kqueue-fork.c main.c kqueue-process.c kqueue-random.c \
|
||||||
kqueue-pty.c kqueue-tun.c kqueue-signal.c kqueue-fdpass.c \
|
kqueue-pty.c kqueue-tun.c kqueue-signal.c kqueue-fdpass.c \
|
||||||
kqueue-flock.c kqueue-timer.c kqueue-regress.c
|
kqueue-exec.c kqueue-flock.c kqueue-timer.c kqueue-regress.c
|
||||||
LDADD= -levent -lutil
|
LDADD= -levent -lutil
|
||||||
DPADD= ${LIBEVENT} ${LIBUTIL}
|
DPADD= ${LIBEVENT} ${LIBUTIL}
|
||||||
|
|
||||||
|
kq-exec: ${PROG}
|
||||||
|
./${PROG} -e
|
||||||
kq-pipe: ${PROG}
|
kq-pipe: ${PROG}
|
||||||
./${PROG} -p
|
./${PROG} -p
|
||||||
kq-fork: ${PROG}
|
kq-fork: ${PROG}
|
||||||
@ -51,6 +53,7 @@ kq-regress-5: ${PROG}
|
|||||||
kq-regress-6: ${PROG}
|
kq-regress-6: ${PROG}
|
||||||
./${PROG} -R6
|
./${PROG} -R6
|
||||||
|
|
||||||
|
TESTS+= kq-exec
|
||||||
TESTS+= kq-fdpass
|
TESTS+= kq-fdpass
|
||||||
TESTS+= kq-flock
|
TESTS+= kq-flock
|
||||||
TESTS+= kq-fork
|
TESTS+= kq-fork
|
||||||
|
113
regress/sys/kern/kqueue/kqueue-exec.c
Normal file
113
regress/sys/kern/kqueue/kqueue-exec.c
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
/* $OpenBSD: kqueue-exec.c,v 1.1 2023/08/20 15:19:34 visa Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Visa Hankala
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <err.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
static void do_exec_child(void);
|
||||||
|
static void do_exec_parent(const char *, int);
|
||||||
|
|
||||||
|
int
|
||||||
|
do_exec(const char *argv0)
|
||||||
|
{
|
||||||
|
do_exec_parent(argv0, 0);
|
||||||
|
do_exec_parent(argv0, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_exec_parent(const char *argv0, int cloexec)
|
||||||
|
{
|
||||||
|
char *args[] = {
|
||||||
|
(char *)argv0,
|
||||||
|
"-e",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
char fdbuf[12];
|
||||||
|
pid_t pid;
|
||||||
|
int kq, status;
|
||||||
|
|
||||||
|
if (getenv("REGRESS_KQUEUE_FD") != NULL) {
|
||||||
|
do_exec_child();
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
if (pid == -1)
|
||||||
|
err(1, "fork");
|
||||||
|
if (pid == 0) {
|
||||||
|
kq = kqueue1(cloexec ? O_CLOEXEC : 0);
|
||||||
|
if (kq == -1)
|
||||||
|
err(1, "kqueue1");
|
||||||
|
snprintf(fdbuf, sizeof(fdbuf), "%d", kq);
|
||||||
|
if (setenv("REGRESS_KQUEUE_FD", fdbuf, 1) == -1)
|
||||||
|
err(1, "setenv");
|
||||||
|
if (setenv("REGRESS_KQUEUE_CLOEXEC",
|
||||||
|
cloexec ? "1" : "0", 1) == -1)
|
||||||
|
err(1, "setenv 2");
|
||||||
|
execv(argv0, args);
|
||||||
|
err(1, "execve");
|
||||||
|
}
|
||||||
|
if (waitpid(pid, &status, 0) == -1)
|
||||||
|
err(1, "waitpid");
|
||||||
|
if (status != 0)
|
||||||
|
errx(1, "child failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_exec_child(void)
|
||||||
|
{
|
||||||
|
char *arg;
|
||||||
|
int cloexec, fd;
|
||||||
|
|
||||||
|
arg = getenv("REGRESS_KQUEUE_FD");
|
||||||
|
if (arg == NULL)
|
||||||
|
errx(1, "fd arg is missing");
|
||||||
|
fd = atoi(arg);
|
||||||
|
|
||||||
|
arg = getenv("REGRESS_KQUEUE_CLOEXEC");
|
||||||
|
if (arg != NULL && strcmp(arg, "1") == 0)
|
||||||
|
cloexec = 1;
|
||||||
|
else
|
||||||
|
cloexec = 0;
|
||||||
|
|
||||||
|
if (cloexec) {
|
||||||
|
if (kevent(fd, NULL, 0, NULL, 0, 0) == -1) {
|
||||||
|
if (errno != EBADF)
|
||||||
|
err(1, "child after exec: kevent cloexec");
|
||||||
|
} else {
|
||||||
|
errx(1, "child after exec: "
|
||||||
|
"kqueue cloexec fd is not closed");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (kevent(fd, NULL, 0, NULL, 0, 0) == -1) {
|
||||||
|
err(1, "child after exec: kevent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: main.c,v 1.15 2021/06/12 13:30:14 visa Exp $ */
|
/* $OpenBSD: main.c,v 1.16 2023/08/20 15:19:34 visa Exp $ */
|
||||||
/*
|
/*
|
||||||
* Written by Artur Grabowski <art@openbsd.org> 2002 Public Domain
|
* Written by Artur Grabowski <art@openbsd.org> 2002 Public Domain
|
||||||
*/
|
*/
|
||||||
@ -17,8 +17,11 @@ main(int argc, char **argv)
|
|||||||
int n, ret, c;
|
int n, ret, c;
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
while ((c = getopt(argc, argv, "fFiIjlpPrR:stT:")) != -1) {
|
while ((c = getopt(argc, argv, "efFiIjlpPrR:stT:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
case 'e':
|
||||||
|
ret |= do_exec(argv[0]);
|
||||||
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
ret |= check_inheritance();
|
ret |= check_inheritance();
|
||||||
break;
|
break;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: main.h,v 1.6 2021/06/12 13:30:14 visa Exp $ */
|
/* $OpenBSD: main.h,v 1.7 2023/08/20 15:19:34 visa Exp $ */
|
||||||
/*
|
/*
|
||||||
* Written by Alexaner Bluhm <bluhm@openbsd.org> 2016 Public Domain
|
* Written by Alexaner Bluhm <bluhm@openbsd.org> 2016 Public Domain
|
||||||
*/
|
*/
|
||||||
@ -16,6 +16,7 @@
|
|||||||
__FILE__, __LINE__))
|
__FILE__, __LINE__))
|
||||||
|
|
||||||
int check_inheritance(void);
|
int check_inheritance(void);
|
||||||
|
int do_exec(const char *);
|
||||||
int do_fdpass(void);
|
int do_fdpass(void);
|
||||||
int do_flock(void);
|
int do_flock(void);
|
||||||
int do_invalid_timer(void);
|
int do_invalid_timer(void);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile,v 1.38 2023/02/07 15:04:27 kn Exp $
|
# $OpenBSD: Makefile,v 1.39 2023/08/20 22:38:49 kn Exp $
|
||||||
|
|
||||||
INSTALLBOOT ?= /usr/sbin/installboot
|
INSTALLBOOT ?= /usr/sbin/installboot
|
||||||
DRY_RUN = ${INSTALLBOOT} -n
|
DRY_RUN = ${INSTALLBOOT} -n
|
||||||
@ -84,7 +84,7 @@ create-root: create-disks
|
|||||||
.if ${USE_SOFTRAID:L} == "yes"
|
.if ${USE_SOFTRAID:L} == "yes"
|
||||||
${SUDO} bioctl -l"$$(sed -- s/$$/a/ ${DISKDEVFILES} | paste -sd, -- -)" \
|
${SUDO} bioctl -l"$$(sed -- s/$$/a/ ${DISKDEVFILES} | paste -sd, -- -)" \
|
||||||
-c1C -k"$$(<${KEYDEVFILE})"a -- softraid0 | \
|
-c1C -k"$$(<${KEYDEVFILE})"a -- softraid0 | \
|
||||||
awk -- '{ print $$NF }' 1>${ROOTDEVFILE}
|
grep -o -- 'sd[0-9]*$$' 1>${ROOTDEVFILE}
|
||||||
${SUDO} ${FORMAT_DISK} -- "$$(<${ROOTDEVFILE})" 1>/dev/null
|
${SUDO} ${FORMAT_DISK} -- "$$(<${ROOTDEVFILE})" 1>/dev/null
|
||||||
.else
|
.else
|
||||||
ln -s -- ${DISKDEVFILES} ${ROOTDEVFILE}
|
ln -s -- ${DISKDEVFILES} ${ROOTDEVFILE}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/* $OpenBSD: init_sysent.c,v 1.267 2023/07/24 19:33:29 miod Exp $ */
|
/* $OpenBSD: init_sysent.c,v 1.268 2023/08/20 15:14:20 visa Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System call switch table.
|
* System call switch table.
|
||||||
*
|
*
|
||||||
* DO NOT EDIT-- this file is automatically generated.
|
* DO NOT EDIT-- this file is automatically generated.
|
||||||
* created from; OpenBSD: syscalls.master,v 1.249 2023/07/24 19:32:23 miod Exp
|
* created from; OpenBSD: syscalls.master,v 1.250 2023/08/20 15:13:43 visa Exp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -604,8 +604,8 @@ const struct sysent sysent[] = {
|
|||||||
sys_nosys }, /* 268 = obsolete pad_pwritev */
|
sys_nosys }, /* 268 = obsolete pad_pwritev */
|
||||||
{ 0, 0, SY_NOLOCK | 0,
|
{ 0, 0, SY_NOLOCK | 0,
|
||||||
sys_kqueue }, /* 269 = kqueue */
|
sys_kqueue }, /* 269 = kqueue */
|
||||||
{ 0, 0, 0,
|
{ 1, s(struct sys_kqueue1_args), SY_NOLOCK | 0,
|
||||||
sys_nosys }, /* 270 = obsolete t32_kevent */
|
sys_kqueue1 }, /* 270 = kqueue1 */
|
||||||
{ 1, s(struct sys_mlockall_args), 0,
|
{ 1, s(struct sys_mlockall_args), 0,
|
||||||
sys_mlockall }, /* 271 = mlockall */
|
sys_mlockall }, /* 271 = mlockall */
|
||||||
{ 0, 0, 0,
|
{ 0, 0, 0,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: kern_event.c,v 1.197 2023/08/13 08:29:28 visa Exp $ */
|
/* $OpenBSD: kern_event.c,v 1.198 2023/08/20 15:13:43 visa Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
|
* Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
|
||||||
@ -60,6 +60,7 @@
|
|||||||
#define KLIST_ASSERT_LOCKED(kl) ((void)(kl))
|
#define KLIST_ASSERT_LOCKED(kl) ((void)(kl))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int dokqueue(struct proc *, int, register_t *);
|
||||||
struct kqueue *kqueue_alloc(struct filedesc *);
|
struct kqueue *kqueue_alloc(struct filedesc *);
|
||||||
void kqueue_terminate(struct proc *p, struct kqueue *);
|
void kqueue_terminate(struct proc *p, struct kqueue *);
|
||||||
void KQREF(struct kqueue *);
|
void KQREF(struct kqueue *);
|
||||||
@ -912,12 +913,14 @@ kqueue_alloc(struct filedesc *fdp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
sys_kqueue(struct proc *p, void *v, register_t *retval)
|
dokqueue(struct proc *p, int flags, register_t *retval)
|
||||||
{
|
{
|
||||||
struct filedesc *fdp = p->p_fd;
|
struct filedesc *fdp = p->p_fd;
|
||||||
struct kqueue *kq;
|
struct kqueue *kq;
|
||||||
struct file *fp;
|
struct file *fp;
|
||||||
int fd, error;
|
int cloexec, error, fd;
|
||||||
|
|
||||||
|
cloexec = (flags & O_CLOEXEC) ? UF_EXCLOSE : 0;
|
||||||
|
|
||||||
kq = kqueue_alloc(fdp);
|
kq = kqueue_alloc(fdp);
|
||||||
|
|
||||||
@ -925,14 +928,14 @@ sys_kqueue(struct proc *p, void *v, register_t *retval)
|
|||||||
error = falloc(p, &fp, &fd);
|
error = falloc(p, &fp, &fd);
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out;
|
||||||
fp->f_flag = FREAD | FWRITE;
|
fp->f_flag = FREAD | FWRITE | (flags & FNONBLOCK);
|
||||||
fp->f_type = DTYPE_KQUEUE;
|
fp->f_type = DTYPE_KQUEUE;
|
||||||
fp->f_ops = &kqueueops;
|
fp->f_ops = &kqueueops;
|
||||||
fp->f_data = kq;
|
fp->f_data = kq;
|
||||||
*retval = fd;
|
*retval = fd;
|
||||||
LIST_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_next);
|
LIST_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_next);
|
||||||
kq = NULL;
|
kq = NULL;
|
||||||
fdinsert(fdp, fd, 0, fp);
|
fdinsert(fdp, fd, cloexec, fp);
|
||||||
FRELE(fp, p);
|
FRELE(fp, p);
|
||||||
out:
|
out:
|
||||||
fdpunlock(fdp);
|
fdpunlock(fdp);
|
||||||
@ -941,6 +944,24 @@ out:
|
|||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
sys_kqueue(struct proc *p, void *v, register_t *retval)
|
||||||
|
{
|
||||||
|
return (dokqueue(p, 0, retval));
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
sys_kqueue1(struct proc *p, void *v, register_t *retval)
|
||||||
|
{
|
||||||
|
struct sys_kqueue1_args /* {
|
||||||
|
syscallarg(int) flags;
|
||||||
|
} */ *uap = v;
|
||||||
|
|
||||||
|
if (SCARG(uap, flags) & ~(O_CLOEXEC | FNONBLOCK))
|
||||||
|
return (EINVAL);
|
||||||
|
return (dokqueue(p, SCARG(uap, flags), retval));
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
sys_kevent(struct proc *p, void *v, register_t *retval)
|
sys_kevent(struct proc *p, void *v, register_t *retval)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: kern_pledge.c,v 1.306 2023/06/02 17:44:29 cheloha Exp $ */
|
/* $OpenBSD: kern_pledge.c,v 1.307 2023/08/20 15:13:43 visa Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
||||||
@ -209,6 +209,7 @@ const uint64_t pledge_syscalls[SYS_MAXSYSCALL] = {
|
|||||||
[SYS_ppoll] = PLEDGE_STDIO,
|
[SYS_ppoll] = PLEDGE_STDIO,
|
||||||
[SYS_kevent] = PLEDGE_STDIO,
|
[SYS_kevent] = PLEDGE_STDIO,
|
||||||
[SYS_kqueue] = PLEDGE_STDIO,
|
[SYS_kqueue] = PLEDGE_STDIO,
|
||||||
|
[SYS_kqueue1] = PLEDGE_STDIO,
|
||||||
[SYS_select] = PLEDGE_STDIO,
|
[SYS_select] = PLEDGE_STDIO,
|
||||||
[SYS_pselect] = PLEDGE_STDIO,
|
[SYS_pselect] = PLEDGE_STDIO,
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/* $OpenBSD: syscalls.c,v 1.265 2023/07/24 19:33:29 miod Exp $ */
|
/* $OpenBSD: syscalls.c,v 1.266 2023/08/20 15:14:20 visa Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System call names.
|
* System call names.
|
||||||
*
|
*
|
||||||
* DO NOT EDIT-- this file is automatically generated.
|
* DO NOT EDIT-- this file is automatically generated.
|
||||||
* created from; OpenBSD: syscalls.master,v 1.249 2023/07/24 19:32:23 miod Exp
|
* created from; OpenBSD: syscalls.master,v 1.250 2023/08/20 15:13:43 visa Exp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const char *const syscallnames[] = {
|
const char *const syscallnames[] = {
|
||||||
@ -312,7 +312,7 @@ const char *const syscallnames[] = {
|
|||||||
"#267 (obsolete pad_preadv)", /* 267 = obsolete pad_preadv */
|
"#267 (obsolete pad_preadv)", /* 267 = obsolete pad_preadv */
|
||||||
"#268 (obsolete pad_pwritev)", /* 268 = obsolete pad_pwritev */
|
"#268 (obsolete pad_pwritev)", /* 268 = obsolete pad_pwritev */
|
||||||
"kqueue", /* 269 = kqueue */
|
"kqueue", /* 269 = kqueue */
|
||||||
"#270 (obsolete t32_kevent)", /* 270 = obsolete t32_kevent */
|
"kqueue1", /* 270 = kqueue1 */
|
||||||
"mlockall", /* 271 = mlockall */
|
"mlockall", /* 271 = mlockall */
|
||||||
"munlockall", /* 272 = munlockall */
|
"munlockall", /* 272 = munlockall */
|
||||||
"#273 (unimplemented sys_getpeereid)", /* 273 = unimplemented sys_getpeereid */
|
"#273 (unimplemented sys_getpeereid)", /* 273 = unimplemented sys_getpeereid */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; $OpenBSD: syscalls.master,v 1.249 2023/07/24 19:32:23 miod Exp $
|
; $OpenBSD: syscalls.master,v 1.250 2023/08/20 15:13:43 visa Exp $
|
||||||
; $NetBSD: syscalls.master,v 1.32 1996/04/23 10:24:21 mycroft Exp $
|
; $NetBSD: syscalls.master,v 1.32 1996/04/23 10:24:21 mycroft Exp $
|
||||||
|
|
||||||
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
|
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
|
||||||
@ -462,7 +462,7 @@
|
|||||||
267 OBSOL pad_preadv
|
267 OBSOL pad_preadv
|
||||||
268 OBSOL pad_pwritev
|
268 OBSOL pad_pwritev
|
||||||
269 STD NOLOCK { int sys_kqueue(void); }
|
269 STD NOLOCK { int sys_kqueue(void); }
|
||||||
270 OBSOL t32_kevent
|
270 STD NOLOCK { int sys_kqueue1(int flags); }
|
||||||
271 STD { int sys_mlockall(int flags); }
|
271 STD { int sys_mlockall(int flags); }
|
||||||
272 STD { int sys_munlockall(void); }
|
272 STD { int sys_munlockall(void); }
|
||||||
273 UNIMPL sys_getpeereid
|
273 UNIMPL sys_getpeereid
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* deflate.c -- compress data using the deflation algorithm
|
/* deflate.c -- compress data using the deflation algorithm
|
||||||
* Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
|
* Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* inftrees.c -- generate Huffman trees for efficient decoding
|
/* inftrees.c -- generate Huffman trees for efficient decoding
|
||||||
* Copyright (C) 1995-2022 Mark Adler
|
* Copyright (C) 1995-2023 Mark Adler
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens,
|
|||||||
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
|
||||||
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
|
||||||
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
|
||||||
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 76};
|
19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 198, 203};
|
||||||
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
|
||||||
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
|
||||||
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
||||||
version 1.2.13.1, October xxth, 2022
|
version 1.3, August 18th, 2023
|
||||||
|
|
||||||
Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
|
Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
@ -37,12 +37,12 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ZLIB_VERSION "1.2.13.1-motley"
|
#define ZLIB_VERSION "1.3"
|
||||||
#define ZLIB_VERNUM 0x12d1
|
#define ZLIB_VERNUM 0x1300
|
||||||
#define ZLIB_VER_MAJOR 1
|
#define ZLIB_VER_MAJOR 1
|
||||||
#define ZLIB_VER_MINOR 2
|
#define ZLIB_VER_MINOR 3
|
||||||
#define ZLIB_VER_REVISION 13
|
#define ZLIB_VER_REVISION 0
|
||||||
#define ZLIB_VER_SUBREVISION 1
|
#define ZLIB_VER_SUBREVISION 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The 'zlib' compression library provides in-memory compression and
|
The 'zlib' compression library provides in-memory compression and
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: event.h,v 1.70 2023/08/13 08:29:28 visa Exp $ */
|
/* $OpenBSD: event.h,v 1.71 2023/08/20 15:13:43 visa Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
|
* Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
|
||||||
@ -369,6 +369,7 @@ struct timespec;
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
int kqueue(void);
|
int kqueue(void);
|
||||||
|
int kqueue1(int flags);
|
||||||
int kevent(int kq, const struct kevent *changelist, int nchanges,
|
int kevent(int kq, const struct kevent *changelist, int nchanges,
|
||||||
struct kevent *eventlist, int nevents,
|
struct kevent *eventlist, int nevents,
|
||||||
const struct timespec *timeout);
|
const struct timespec *timeout);
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/* $OpenBSD: syscall.h,v 1.264 2023/07/24 19:33:29 miod Exp $ */
|
/* $OpenBSD: syscall.h,v 1.265 2023/08/20 15:14:20 visa Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System call numbers.
|
* System call numbers.
|
||||||
*
|
*
|
||||||
* DO NOT EDIT-- this file is automatically generated.
|
* DO NOT EDIT-- this file is automatically generated.
|
||||||
* created from; OpenBSD: syscalls.master,v 1.249 2023/07/24 19:32:23 miod Exp
|
* created from; OpenBSD: syscalls.master,v 1.250 2023/08/20 15:13:43 visa Exp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* syscall: "syscall" ret: "int" args: "int" "..." */
|
/* syscall: "syscall" ret: "int" args: "int" "..." */
|
||||||
@ -599,7 +599,9 @@
|
|||||||
/* syscall: "kqueue" ret: "int" args: */
|
/* syscall: "kqueue" ret: "int" args: */
|
||||||
#define SYS_kqueue 269
|
#define SYS_kqueue 269
|
||||||
|
|
||||||
/* 270 is obsolete t32_kevent */
|
/* syscall: "kqueue1" ret: "int" args: "int" */
|
||||||
|
#define SYS_kqueue1 270
|
||||||
|
|
||||||
/* syscall: "mlockall" ret: "int" args: "int" */
|
/* syscall: "mlockall" ret: "int" args: "int" */
|
||||||
#define SYS_mlockall 271
|
#define SYS_mlockall 271
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/* $OpenBSD: syscallargs.h,v 1.267 2023/07/24 19:33:29 miod Exp $ */
|
/* $OpenBSD: syscallargs.h,v 1.268 2023/08/20 15:14:20 visa Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System call argument lists.
|
* System call argument lists.
|
||||||
*
|
*
|
||||||
* DO NOT EDIT-- this file is automatically generated.
|
* DO NOT EDIT-- this file is automatically generated.
|
||||||
* created from; OpenBSD: syscalls.master,v 1.249 2023/07/24 19:32:23 miod Exp
|
* created from; OpenBSD: syscalls.master,v 1.250 2023/08/20 15:13:43 visa Exp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef syscallarg
|
#ifdef syscallarg
|
||||||
@ -960,6 +960,10 @@ struct sys_fhopen_args {
|
|||||||
syscallarg(int) flags;
|
syscallarg(int) flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct sys_kqueue1_args {
|
||||||
|
syscallarg(int) flags;
|
||||||
|
};
|
||||||
|
|
||||||
struct sys_mlockall_args {
|
struct sys_mlockall_args {
|
||||||
syscallarg(int) flags;
|
syscallarg(int) flags;
|
||||||
};
|
};
|
||||||
@ -1355,6 +1359,7 @@ int sys_msync(struct proc *, void *, register_t *);
|
|||||||
int sys_pipe(struct proc *, void *, register_t *);
|
int sys_pipe(struct proc *, void *, register_t *);
|
||||||
int sys_fhopen(struct proc *, void *, register_t *);
|
int sys_fhopen(struct proc *, void *, register_t *);
|
||||||
int sys_kqueue(struct proc *, void *, register_t *);
|
int sys_kqueue(struct proc *, void *, register_t *);
|
||||||
|
int sys_kqueue1(struct proc *, void *, register_t *);
|
||||||
int sys_mlockall(struct proc *, void *, register_t *);
|
int sys_mlockall(struct proc *, void *, register_t *);
|
||||||
int sys_munlockall(struct proc *, void *, register_t *);
|
int sys_munlockall(struct proc *, void *, register_t *);
|
||||||
int sys_getresuid(struct proc *, void *, register_t *);
|
int sys_getresuid(struct proc *, void *, register_t *);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: kdump.c,v 1.157 2023/04/16 19:42:40 otto Exp $ */
|
/* $OpenBSD: kdump.c,v 1.158 2023/08/21 01:37:56 visa Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
@ -876,6 +876,7 @@ static const formatter scargs[][8] = {
|
|||||||
[SYS_msync] = { Pptr, Pbigsize, Msyncflagsname },
|
[SYS_msync] = { Pptr, Pbigsize, Msyncflagsname },
|
||||||
[SYS_pipe] = { Pptr },
|
[SYS_pipe] = { Pptr },
|
||||||
[SYS_fhopen] = { Pptr, Openflagsname },
|
[SYS_fhopen] = { Pptr, Openflagsname },
|
||||||
|
[SYS_kqueue1] = { Flagsname },
|
||||||
[SYS_mlockall] = { Mlockallname },
|
[SYS_mlockall] = { Mlockallname },
|
||||||
[SYS_getresuid] = { Pptr, Pptr, Pptr },
|
[SYS_getresuid] = { Pptr, Pptr, Pptr },
|
||||||
[SYS_setresuid] = { Uidname, Uidname, Uidname },
|
[SYS_setresuid] = { Uidname, Uidname, Uidname },
|
||||||
|
Loading…
Reference in New Issue
Block a user