mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (INLINE_SYSCALL): Use that. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (INTERNAL_SYSCALL, INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (INLINE_SYSCALL): Use that. * sysdeps/unix/sysv/linux/x86_64/sysdep.h (INTERNAL_SYSCALL, INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (INLINE_SYSCALL): Use that. * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Include dl-sysdep.h. (SYSCALL_ERROR_HANDLER): Define RTLD_PRIVATE_ERRNO variant. (__INTERNAL_SYSCALL_STRING): Define. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Include dl-sysdep.h. (SYSCALL_ERROR_HANDLER): Define RTLD_PRIVATE_ERRNO variant. (__INTERNAL_SYSCALL_STRING): Define. * sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_SYSCALL): Pass __SYSCALL_STRING to inline_syscall*. (INTERNAL_SYSCALL, INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): New macros. (inline_syscall0, inline_syscall1, inline_syscall2, inline_syscall3, inline_syscall4, inline_syscall5, inline_syscall6): Add string argument. 2002-10-24 Roland McGrath <roland@redhat.com> * libio/bug-wfflush.c: New file. * libio/Makefile (tests): Add bug-wfflush.cvs/fedora-2_3-branch
9 changed files with 271 additions and 74 deletions
@ -0,0 +1,75 @@ |
|||
/* Test program for bug in wide streams. */ |
|||
|
|||
#include <stdio.h> |
|||
#include <wchar.h> |
|||
|
|||
static void do_prepare (void); |
|||
#define PREPARE(argc, argv) do_prepare () |
|||
static int do_test (void); |
|||
#define TEST_FUNCTION do_test () |
|||
#include <test-skeleton.c> |
|||
|
|||
static char *temp_file; |
|||
|
|||
static void |
|||
do_prepare (void) |
|||
{ |
|||
int fd = create_temp_file ("bug-ungetc.", &temp_file); |
|||
if (fd == -1) |
|||
{ |
|||
printf ("cannot create temporary file: %m\n"); |
|||
exit (1); |
|||
} |
|||
write (fd, "1!", 2); |
|||
close (fd); |
|||
} |
|||
|
|||
static int |
|||
do_test (void) |
|||
{ |
|||
FILE *f = fopen (temp_file, "r+"); |
|||
|
|||
if (f == NULL) |
|||
{ |
|||
printf ("fopen: %m\n"); |
|||
return 1; |
|||
} |
|||
|
|||
#define L_(s) L##s |
|||
//#define fwscanf fscanf
|
|||
//#define fwprintf fprintf
|
|||
|
|||
int i; |
|||
if (fwscanf (f, L_("%d!"), &i) != 1) |
|||
{ |
|||
printf ("fwscanf failed\n"); |
|||
return 1; |
|||
} |
|||
|
|||
if (fseek (f, 0, SEEK_SET) != 0) |
|||
{ |
|||
printf ("fseek: %m\n"); |
|||
return 1; |
|||
} |
|||
|
|||
if (fwprintf (f, L_("1!")) < 2) |
|||
{ |
|||
printf ("fwprintf: %m\n"); |
|||
return 1; |
|||
} |
|||
|
|||
if (fflush (f) != 0) |
|||
{ |
|||
printf ("fflush: %m\n"); |
|||
return 1; |
|||
} |
|||
|
|||
if (fclose (f) != 0) |
|||
{ |
|||
printf ("fclose: %m\n"); |
|||
return 1; |
|||
} |
|||
|
|||
puts ("Test succeeded."); |
|||
return 0; |
|||
} |
|||
Loading…
Reference in new issue