mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-25 02:02:09 +03:00
ChangeLog.old
advisories
argp
assert
benchtests
bits
catgets
conform
csu
ctype
debug
dirent
dlfcn
elf
gmon
gnulib
hesiod
htl
hurd
iconv
iconvdata
include
inet
intl
io
libio
locale
localedata
login
mach
malloc
manual
math
mathvec
misc
nis
nptl
nptl_db
nscd
nss
po
posix
resolv
resource
rt
scripts
setjmp
signal
socket
soft-fp
stdio-common
stdlib
string
sunrpc
support
sysdeps
aarch64
alpha
arc
arm
csky
generic
gnu
hppa
htl
hurd
i386
ieee754
loongarch
m68k
mach
microblaze
mips
nptl
or1k
posix
powerpc
pthread
riscv
s390
sh
sparc
unix
alpha
arm
bsd
i386
inet
mips
powerpc
sh
sysv
linux
aarch64
alpha
arc
arm
bits
csky
hppa
i386
include
loongarch
m68k
microblaze
mips
net
netash
netatalk
netax25
neteconet
netinet
netipx
netiucv
netpacket
netrom
netrose
nfs
or1k
powerpc
riscv
s390
scsi
sh
sparc
sys
wordsize-64
x86
x86_64
Implies
Makefile
Versions
_G_config.h
____longjmp_chk.c
_exit.c
a.out.h
accept.c
accept4.c
access.c
adjtime.c
adjtimex.c
aio_misc.h
aio_sigqueue.c
alphasort64.c
arch-fd_to_filename.h
arch-fork.h
bind.c
brk.c
brk_call.h
check_native.c
check_pf.c
chmod.c
chown.c
clock.c
clock_adjtime.c
clock_getcpuclockid.c
clock_getres.c
clock_gettime.c
clock_nanosleep.c
clock_settime.c
clone-internal.c
clone-pidfd-support.c
clone3.c
clone3.h
close.c
close_nocancel.c
closedir.c
closefrom_fallback.c
cmsg_nxthdr.c
cnd_timedwait.c
configure
configure.ac
connect.c
convert_scm_timestamps.c
copy_file_range.c
creat.c
creat64.c
default-sched.h
device-nrs.h
dirfd.c
dirstream.h
dl-affinity.h
dl-diagnostics-kernel.c
dl-early_allocate.c
dl-execstack.c
dl-execve.h
dl-extra_tls.h
dl-fxstatat64.c
dl-getcwd.c
dl-openat64.c
dl-opendir.c
dl-origin.c
dl-osinfo.h
dl-parse_auxv.h
dl-rseq-symbols.S
dl-sbrk.c
dl-sysdep.c
dl-sysdep.h
dl-vdso-setup.c
dl-vdso-setup.h
dl-vdso.h
dl-write.c
dl-writev.h
dup2.c
epoll_create.c
epoll_pwait.c
epoll_pwait2.c
epoll_wait.c
errlist-compat-data.h
errlist-compat.h
errqueue.h
eventfd_read.c
eventfd_write.c
execveat.c
faccessat.c
fallocate.c
fallocate64.c
fanotify_mark.c
fatal-prepare.h
fchmodat.c
fcntl.c
fcntl64.c
fcntl_nocancel.c
fdatasync.c
fdopendir.c
features-time64.h
fexecve.c
filter-nr-syscalls.awk
fixup-asm-unistd.h
fpathconf.c
fstat.c
fstat64.c
fstatat.c
fstatat64.c
fstatfs.c
fstatfs64.c
fstatvfs.c
fstatvfs64.c
fsync.c
ftime.c
ftruncate.c
ftruncate64.c
futimens.c
futimes.c
futimesat.c
fxstat.c
fxstat64.c
fxstatat.c
fxstatat64.c
gai_sigqueue.c
gen-syscall-h.awk
gentempfd.c
getclktck.c
getcpu.c
getcwd.c
getdents.c
getdents64.c
getdirentries.c
getdirentries64.c
getdtsz.c
getentropy.c
gethostid.c
getipv4sourcefilter.c
getitimer.c
getloadavg.c
getlogin.c
getlogin_r.c
getpagesize.c
getpeername.c
getpriority.c
getpt.c
getrandom-internal.h
getrandom.c
getrlimit.c
getrlimit64.c
getrusage.c
getsockname.c
getsockopt.c
getsourcefilter.c
getsourcefilter.h
getsysstats.c
gettimeofday.c
glibcsyscalls.py
glob-lstat-compat.c
glob.c
glob64-lstat-compat.c
glob64-time64.c
glob64.c
globfree.c
globfree64-time64.c
globfree64.c
grantpt.c
if_index.c
ifaddrs.c
ifreq.c
inotify_init.c
internal-ioctl.h
internal-signals.h
internal-sigset.h
internal-stat.h
internal_statvfs.c
internal_statvfs.h
ioctl.c
ipc_ops.h
ipc_priv.h
kernel-features.h
kernel-posix-cpu-timers.h
kernel-posix-timers.h
kernel_sigaction.h
kernel_stat.h
kernel_termios.h
kstat_cp.h
lchown.c
ldsodefs.h
libc-vdso.h
libc_fatal.c
libc_sigaction.c
librt-compat.c
link.c
linux_fsinfo.h
listen.c
local-setxid.h
lseek.c
lseek64.c
lstat.c
lstat64.c
lutimes.c
lxstat.c
lxstat64.c
machine-sp.h
malloc-hugepages.c
malloc-sysdep.h
mkdir.c
mknodat.c
mlock2.c
mmap.c
mmap64.c
mmap_call.h
mmap_internal.h
mq_close.c
mq_getattr.c
mq_notify.c
mq_open.c
mq_receive.c
mq_send.c
mq_setattr.c
mq_timedreceive.c
mq_timedsend.c
mq_unlink.c
mremap-failure.h
mremap.c
msgctl.c
msgget.c
msgrcv.c
msgsnd.c
msync.c
mtx_timedlock.c
nanosleep.c
netlink_assert_response.c
netlinkaccess.h
not-cancel.h
not-errno.h
nscd_setup_thread.c
ntp_gettime.c
ntp_gettimex.c
olddirent.h
oldglob.c
open.c
open64.c
open64_nocancel.c
open_by_handle_at.c
open_nocancel.c
openat.c
openat64.c
openat64_nocancel.c
openat_nocancel.c
opendir.c
pathconf.c
pathconf.h
paths.h
pause.c
personality.c
pidfd_getpid.c
pidfd_spawn.c
pidfd_spawnp.c
pipe.c
pkey_get.c
pkey_mprotect.c
pkey_set.c
poll.c
posix_fadvise.c
posix_fadvise64.c
posix_fallocate.c
posix_fallocate64.c
posix_madvise.c
ppoll.c
ppoll_chk.c
pread.c
pread64.c
pread64_nocancel.c
preadv.c
preadv2.c
preadv64.c
preadv64v2.c
prlimit.c
prlimit64.c
process_vm_readv.c
process_vm_writev.c
procutils.c
procutils.h
prof-freq.c
profil-counter.h
profil.c
pselect.c
pselect32.c
ptrace.c
ptsname.c
pwrite.c
pwrite64.c
pwritev.c
pwritev2.c
pwritev64.c
pwritev64v2.c
read.c
read_nocancel.c
readahead.c
readdir.c
readdir64.c
readdir64_r.c
readdir_r.c
readlink.c
readonly-area.c
readv.c
reboot.c
recv.c
recvfrom.c
recvmmsg.c
recvmsg.c
remove.c
rename.c
renameat.c
renameat2.c
rewinddir.c
rmdir.c
rseq-internal.h
sa_len.c
safe-fatal.h
scandir64.c
sched_getaffinity.c
sched_getattr.c
sched_getcpu.c
sched_rr_gi.c
sched_setaffinity.c
sched_setattr.c
seekdir.c
select.c
semctl.c
semget.c
semop.c
semtimedop.c
send.c
sendfile.c
sendfile64.c
sendmmsg.c
sendmsg.c
sendto.c
set-freeres-os.h
setegid.c
seteuid.c
setgid.c
setgroups.c
sethostid.c
setipv4sourcefilter.c
setitimer.c
setregid.c
setresgid.c
setresuid.c
setreuid.c
setrlimit.c
setrlimit64.c
setsockopt.c
setsourcefilter.c
settimeofday.c
settimezone.c
setuid.c
setvmaname.c
setvmaname.h
shlib-versions
shmat.c
shmctl.c
shmdt.c
shmget.c
shutdown.c
siglist-compat.h
signalfd.c
sigpending.c
sigprocmask.c
sigqueue.c
sigreturn.c
sigset-cvt-mask.h
sigsetops.h
sigstack.c
sigsuspend.c
sigtimedwait.c
sigwait.c
sigwaitinfo.c
single-thread.h
sizes.h
socket-constants-time64.h
socket.c
socketcall.h
socketpair.c
spawn_int_def.h
spawnattr_getcgroup_np.c
spawnattr_setcgroup_np.c
spawni.c
speed.c
splice.c
startup.h
stat.c
stat64.c
stat_t64_cp.c
stat_t64_cp.h
statfs.c
statfs64.c
statvfs.c
statvfs64.c
statx.c
statx_cp.c
statx_cp.h
struct_kernel_msqid64_ds.h
struct_kernel_semid64_ds.h
struct_kernel_shmid64_ds.h
struct_stat_time64.h
symlink.c
sync_file_range.c
syscall-names.list
syscall.c
syscall_cancel.c
syscalls.list
sysconf-pthread_stack_min.h
sysconf-sigstksz.h
sysconf.c
sysctl.c
sysdep-cancel.h
sysdep-vdso.h
sysdep.h
tcdrain.c
tcflow.c
tcflush.c
tcgetattr.c
tcgetpgrp.c
tcsendbrk.c
tcsetattr.c
tcsetpgrp.c
tee.c
telldir.c
termio.h
test-errno-linux.c
thrd_priv.h
thrd_sleep.c
time-clockid.h
time.c
timer_create.c
timer_delete.c
timer_getoverr.c
timer_gettime.c
timer_routines.c
timer_settime.c
timer_t_was_int_compat.h
timerfd_gettime.c
timerfd_settime.c
times.c
timespec_get.c
timespec_getres.c
tls-internal.c
tls-internal.h
truncate.c
truncate64.c
tst-adjtimex-time64.c
tst-adjtimex.c
tst-affinity-pid.c
tst-affinity-static.c
tst-affinity.c
tst-align-clone-internal.c
tst-align-clone.c
tst-clock_adjtime-time64.c
tst-clock_adjtime.c
tst-clock_gettime-clobber.c
tst-clone.c
tst-clone2-internal.c
tst-clone2.c
tst-clone3-internal.c
tst-clone3.c
tst-epoll-ioctls.c
tst-epoll-time64.c
tst-epoll.c
tst-fallocate-common.c
tst-fallocate.c
tst-fallocate64.c
tst-fanotify.c
tst-fdopendir-o_path.c
tst-getauxval.c
tst-getcwd-smallbuff.c
tst-getdents64.c
tst-getpid1-internal.c
tst-getpid1.c
tst-gettid-kill.c
tst-gettid.c
tst-gettimeofday-clobber.c
tst-glibcsyscalls.py
tst-linux-mremap1.c
tst-memfd_create.c
tst-misalign-clone.c
tst-mlock2.c
tst-mman-consts.py
tst-mount-compile.py
tst-mount-consts.py
tst-mount.c
tst-nolink-libc.c
tst-ntp_adjtime-time64.c
tst-ntp_adjtime.c
tst-ntp_gettime-time64.c
tst-ntp_gettime.c
tst-ntp_gettimex-time64.c
tst-ntp_gettimex.c
tst-o_path-locks.c
tst-ofdlocks-compat.c
tst-ofdlocks.c
tst-personality.c
tst-pidfd-consts.py
tst-pidfd.c
tst-pidfd_getpid.c
tst-pkey.c
tst-posix_spawn-setsid-pidfd.c
tst-ppoll-time64.c
tst-ppoll.c
tst-prctl-time64.c
tst-prctl.c
tst-process_madvise.c
tst-process_mrelease.c
tst-quota.c
tst-readdir64-compat.c
tst-rlimit-infinity.c
tst-rseq-disable-static.c
tst-rseq-disable.c
tst-rseq-nptl-static.c
tst-rseq-nptl.c
tst-rseq-static.c
tst-rseq-tls-range-4096-static.c
tst-rseq-tls-range-4096.c
tst-rseq-tls-range-mod.c
tst-rseq-tls-range-static.c
tst-rseq-tls-range.c
tst-rseq.c
tst-rseq.h
tst-sched-affinity-inheritance.c
tst-sched-consts.py
tst-sched_setattr.c
tst-scm_rights-time64.c
tst-scm_rights.c
tst-sem_getvalue-affinity.c
tst-sigcontext-get_pc.c
tst-signal-numbers.py
tst-sigtimedwait-time64.c
tst-sigtimedwait.c
tst-skeleton-affinity.c
tst-skeleton-thread-affinity.c
tst-socket-consts.py
tst-socket-timestamp-compat-time64.c
tst-socket-timestamp-compat.c
tst-socket-timestamp-time64.c
tst-socket-timestamp.c
tst-spawn-cgroup.c
tst-spawn-chdir-pidfd.c
tst-spawn-pidfd.c
tst-spawn-pidfd.h
tst-spawn2-pidfd.c
tst-spawn3-pidfd.c
tst-spawn4-pidfd.c
tst-spawn5-pidfd.c
tst-spawn6-pidfd.c
tst-spawn7-pidfd.c
tst-sync_file_range.c
tst-syscall-list.sh
tst-syscall-restart.c
tst-sysconf-iov_max-uapi.c
tst-sysconf-iov_max.c
tst-sysvmsg-linux.c
tst-sysvsem-linux.c
tst-sysvshm-linux.c
tst-tgkill.c
tst-time-clobber.c
tst-timerfd-time64.c
tst-timerfd.c
tst-ttyname-common.c
tst-ttyname-direct.c
tst-ttyname-namespace.c
ttyname.c
ttyname.h
ttyname_r.c
tv32-compat.h
ualarm.c
umount.c
umount2.c
unlink.c
unlockpt.c
update-syscall-lists.py
updwtmp.c
ustat.c
utime.c
utimensat.c
utimes.c
utmp_file.c
versionsort64.c
vfork.c
vmsplice.c
wait3.c
wait4.c
waitid.c
write.c
write_nocancel.c
writev.c
xmknod.c
xmknodat.c
xstat.c
xstat64.c
xstatconv.c
xstatconv.h
xstatover.h
xstatver.h
x86_64
Implies
Makefile
confstr.h
get_child_max.c
getlogin.c
getlogin_r.c
getpagesize.c
grantpt.c
ifreq.c
make-syscalls.sh
setxid.h
sockatmark.c
syscall-template.S
syscall.S
syscalls.list
sysdep.h
wordsize-32
wordsize-64
x86
x86_64
sysvipc
termios
time
timezone
wcsmbs
wctype
.b4-config
.clang-format
.gitattributes
.gitignore
CONTRIBUTED-BY
COPYING
COPYING.LIB
INSTALL
LICENSES
MAINTAINERS
Makeconfig
Makefile
Makefile.help
Makefile.in
Makerules
NEWS
README
Rules
SECURITY.md
SHARED-FILES
abi-tags
aclocal.m4
config.h.in
config.make.in
configure
configure.ac
extra-lib.mk
gen-locales.mk
libc-abis
libof-iterator.mk
o-iterator.mk
shlib-versions
test-skeleton.c
version.h
107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
/* Copyright (C) 2015-2025 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; if not, see
|
|
<https://www.gnu.org/licenses/>. */
|
|
|
|
#include <sys/socket.h>
|
|
#include <time.h>
|
|
#include <sysdep.h>
|
|
#include <socketcall.h>
|
|
#include <socket-constants-time64.h>
|
|
|
|
static int
|
|
getsockopt_syscall (int fd, int level, int optname, void *optval,
|
|
socklen_t *len)
|
|
{
|
|
#ifdef __ASSUME_GETSOCKOPT_SYSCALL
|
|
return INLINE_SYSCALL (getsockopt, 5, fd, level, optname, optval, len);
|
|
#else
|
|
return SOCKETCALL (getsockopt, fd, level, optname, optval, len);
|
|
#endif
|
|
}
|
|
|
|
#ifndef __ASSUME_TIME64_SYSCALLS
|
|
static int
|
|
getsockopt32 (int fd, int level, int optname, void *optval,
|
|
socklen_t *len)
|
|
{
|
|
int r = -1;
|
|
|
|
if (level != SOL_SOCKET)
|
|
return r;
|
|
|
|
switch (optname)
|
|
{
|
|
case COMPAT_SO_RCVTIMEO_NEW:
|
|
case COMPAT_SO_SNDTIMEO_NEW:
|
|
{
|
|
if (optname == COMPAT_SO_RCVTIMEO_NEW)
|
|
optname = COMPAT_SO_RCVTIMEO_OLD;
|
|
if (optname == COMPAT_SO_SNDTIMEO_NEW)
|
|
optname = COMPAT_SO_SNDTIMEO_OLD;
|
|
|
|
struct __timeval32 tv32;
|
|
r = getsockopt_syscall (fd, level, optname, &tv32,
|
|
(socklen_t[]) { sizeof tv32 });
|
|
if (r < 0)
|
|
break;
|
|
|
|
/* POSIX states that if the size of the option value is greater than
|
|
then option length, the option value argument shall be silently
|
|
truncated. */
|
|
if (*len >= sizeof (struct __timeval64))
|
|
{
|
|
struct __timeval64 *tv64 = (struct __timeval64 *) optval;
|
|
*tv64 = valid_timeval32_to_timeval64 (tv32);
|
|
*len = sizeof (*tv64);
|
|
}
|
|
else
|
|
memcpy (optval, &tv32, sizeof tv32);
|
|
}
|
|
break;
|
|
|
|
case COMPAT_SO_TIMESTAMP_NEW:
|
|
case COMPAT_SO_TIMESTAMPNS_NEW:
|
|
{
|
|
if (optname == COMPAT_SO_TIMESTAMP_NEW)
|
|
optname = COMPAT_SO_TIMESTAMP_OLD;
|
|
if (optname == COMPAT_SO_TIMESTAMPNS_NEW)
|
|
optname = COMPAT_SO_TIMESTAMPNS_OLD;
|
|
r = getsockopt_syscall (fd, level, optname, optval, len);
|
|
}
|
|
break;
|
|
}
|
|
|
|
return r;
|
|
}
|
|
#endif
|
|
|
|
int
|
|
__getsockopt (int fd, int level, int optname, void *optval, socklen_t *len)
|
|
{
|
|
int r = getsockopt_syscall (fd, level, optname, optval, len);
|
|
|
|
#ifndef __ASSUME_TIME64_SYSCALLS
|
|
if (r == -1 && errno == ENOPROTOOPT)
|
|
r = getsockopt32 (fd, level, optname, optval, len);
|
|
#endif
|
|
|
|
return r;
|
|
}
|
|
weak_alias (__getsockopt, getsockopt)
|
|
#if __TIMESIZE != 64
|
|
weak_alias (__getsockopt, __getsockopt64)
|
|
#endif
|