1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00
2003-05-27  Jakub Jelinek  <jakub@redhat.com>

	* stdio-common/vfprintf.c (process_arg, process_string_arg): Use
	pa_int/pa_u_int instead of pa_short_int, pa_u_short_int and pa_char.
	* stdio-common/printf-parse.h (union printf_arg): Remove pa_char,
	pa_short_int, pa_u_short_int and pa_float.

2003-05-26  Jakub Jelinek  <jakub@redhat.com>

	* libio/strops.c (_IO_str_init_static): Change into a wrapper around
	_IO_str_init_static_internal.
	(_IO_str_init_static_internal): Moved from _IO_str_init_static,
	change size argument to _IO_size_t, don't limit sprintf to 64M.
	(_IO_str_init_readonly): Call _IO_str_init_static_internal.
	* libio/wstrops.c (_IO_wstr_init_static): Change size argument to
	_IO_size_t, don't limit swprintf to 256M.
	(_IO_wstr_init_readonly): Remove.
	* libio/libioP.h (_IO_str_init_static_internal, _IO_wstr_init_static):
	Adjust prototypes.
	(_IO_wstr_init_readonly): Remove prototype.
	* libio/iovsprintf.c (_IO_vsprintf): Use
	_IO_str_init_static_internal instead of INTUSE(_IO_str_init_static).
	* libio/iovsscanf.c (_IO_vsscanf): Likewise.
	* libio/memstream.c (open_memstream): Likewise.
	* libio/obprintf.c (_IO_obstack_vfprintf): Likewise.
	* libio/vasprintf.c (_IO_vasprintf): Likewise.
	* libio/vsnprintf.c (_IO_vsnprintf): Likewise.
	* stdio-common/tst-sprintf.c (main): Add new test.
This commit is contained in:
Ulrich Drepper
2003-05-27 08:03:32 +00:00
parent 7661d9f783
commit 40a54e4d8d
13 changed files with 108 additions and 85 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993,1997,1998,1999,2001,2002 Free Software Foundation, Inc.
/* Copyright (C) 1993,1997-1999,2001-2003 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
@ -67,28 +67,20 @@ void
_IO_wstr_init_static (fp, ptr, size, pstart)
_IO_FILE *fp;
wchar_t *ptr;
int size;
_IO_size_t size;
wchar_t *pstart;
{
wchar_t *end;
if (size == 0)
size = __wcslen (ptr);
else if (size < 0)
{
/* If size is negative 'the characters are assumed to
continue indefinitely.' This is kind of messy ... */
int s;
size = 512;
/* Try increasing powers of 2, as long as we don't wrap around. */
for (; s = 2*size, s > 0 && ptr + s > ptr && s < 0x4000000L; )
size = s;
/* Try increasing size as much as we can without wrapping around. */
for (s = size >> 1; s > 0; s >>= 1)
{
if (ptr + size + s > ptr)
size += s;
}
}
INTUSE(_IO_wsetb) (fp, ptr, ptr + size, 0);
end = ptr + __wcslen (ptr);
else if ((_IO_size_t) ptr + size * sizeof (wchar_t) > (_IO_size_t) ptr)
end = ptr + size;
else
/* Even for misaligned ptr make sure there is integral number of wide
characters. */
end = ptr + (-1 - (_IO_size_t) ptr) / sizeof (wchar_t);
INTUSE(_IO_wsetb) (fp, ptr, end, 0);
fp->_wide_data->_IO_write_base = ptr;
fp->_wide_data->_IO_read_base = ptr;
@ -96,29 +88,19 @@ _IO_wstr_init_static (fp, ptr, size, pstart)
if (pstart)
{
fp->_wide_data->_IO_write_ptr = pstart;
fp->_wide_data->_IO_write_end = ptr + size;
fp->_wide_data->_IO_write_end = end;
fp->_wide_data->_IO_read_end = pstart;
}
else
{
fp->_wide_data->_IO_write_ptr = ptr;
fp->_wide_data->_IO_write_end = ptr;
fp->_wide_data->_IO_read_end = ptr + size;
fp->_wide_data->_IO_read_end = end;
}
/* A null _allocate_buffer function flags the strfile as being static. */
(((_IO_strfile *) fp)->_s._allocate_buffer) = (_IO_alloc_type)0;
}
void
_IO_wstr_init_readonly (fp, ptr, size)
_IO_FILE *fp;
const char *ptr;
int size;
{
_IO_wstr_init_static (fp, (wchar_t *) ptr, size, NULL);
fp->_IO_file_flags |= _IO_NO_WRITES;
}
_IO_wint_t
_IO_wstr_overflow (fp, c)
_IO_FILE *fp;