libio: fmemopen rewrite to POSIX compliance

System Internals / glibc - Adhemerval Zanella [linux.vnet.ibm.com] - 8 July 2015 10:07 UTC

This patch added a new fmemopen version, for glibc 2.22, that aims to be POSIX complaint. It fixes some long-stading glibc fmemopen issues, such as:

- it changes the way fseek with SEEK_END works on fmemopen to seek relative to buffer size instead of first '\0'. This is default mode and 'b' opening mode does not change internal behavior (bz#6544).

- fix apending opening mode to use as start position either first null byte of len specified in function call (bz#13152 and #13151).

- remove binary option 'b' and internal different handling (bz#12836)

- fix seek/SEE_END with negative values (bz#14292).

A compatibility symbol is provided to with old behavior for older symbols
version (2.2.5).

- include/stdio.h (fmemopen): Remove hidden prototype. (__fmemopen): Add new hidden prototype.
- libio/Makefile: Add oldfmemopen object.
- libio/Versions [GLIBC_2.22]: Add new fmemopen symbol.
- libio/fmemopen.c (__fmemopen): Function rewrite to be POSIX compliance.
- libio/oldfmemopen.c: New file: old fmemopen implementation for symbol compatibility.
- stdio-common/Makefile [tests]: Add new tst-fmemopen3.
- stdio-common/psiginfo.c [psiginfo]: Call __fmemopen instead of fmemopen.
- stdio-common/tst-fmemopen3.c: New file: more fmemopen tests, focus on append and read mode.
- sysdeps/unix/sysv/linux/aarch64/libc.abilist [GLIBC_2.22]: Add fmemopen.
- sysdeps/unix/sysv/linux/alpha/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/arm/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/i386/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/ia64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/microblaze/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/sh/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/x86_64/64/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/hppa/libc.abilist [GLIBC_2.22]: Likewise.
- sysdeps/unix/sysv/linux/nios2/libc.abilist [GLIBC_2.22]: Likewise.

fdb7d39 libio: fmemopen rewrite to POSIX compliance
ChangeLog | 70 ++++++
NEWS | 42 ++--
include/stdio.h | 3 +
libio/Makefile | 2 +-
libio/Versions | 4 +
libio/fmemopen.c | 140 ++++-------
libio/oldfmemopen.c | 265 ++++++++++++++++++++
stdio-common/Makefile | 2 +-
stdio-common/psiginfo.c | 2 +-
stdio-common/tst-fmemopen3.c | 206 +++++++++++++++
sysdeps/unix/sysv/linux/aarch64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/alpha/libc.abilist | 3 +
sysdeps/unix/sysv/linux/arm/libc.abilist | 3 +
sysdeps/unix/sysv/linux/hppa/libc.abilist | 3 +
sysdeps/unix/sysv/linux/i386/libc.abilist | 3 +
sysdeps/unix/sysv/linux/ia64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist | 3 +
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist | 3 +
sysdeps/unix/sysv/linux/microblaze/libc.abilist | 3 +
.../unix/sysv/linux/mips/mips32/fpu/libc.abilist | 3 +
.../unix/sysv/linux/mips/mips32/nofpu/libc.abilist | 3 +
.../unix/sysv/linux/mips/mips64/n32/libc.abilist | 3 +
.../unix/sysv/linux/mips/mips64/n64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/nios2/libc.abilist | 3 +
.../sysv/linux/powerpc/powerpc32/fpu/libc.abilist | 3 +
.../linux/powerpc/powerpc32/nofpu/libc.abilist | 3 +
.../unix/sysv/linux/powerpc/powerpc64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 3 +
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/sh/libc.abilist | 3 +
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist | 3 +
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 3 +
.../sysv/linux/tile/tilegx/tilegx32/libc.abilist | 3 +
.../sysv/linux/tile/tilegx/tilegx64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist | 3 +
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 3 +
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist | 3 +
37 files changed, 703 insertions(+), 114 deletions(-)

Upstream: sourceware.org


  • Share