1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
1998-09-24  Ulrich Drepper  <drepper@cygnus.com>

	* debug/catchsegv.sh: Also produce output if cloned process died.

1998-09-24  Paul Eggert  <eggert@twinsun.com>

	* strftime.c (f_wkday): Remove duplicate definition.
	(f_wkday, f_month, a_wkday, a_month, ampm): Define as macros when
	!defined _NL_CURRENT && !HAVE_STRFTIME; this propagates the
	1998-09-11 fix to this case.
	(wkday_len, month_len): Remove these macros; they're no longer needed.

1998-09-24  Paul Eggert  <eggert@twinsun.com>

	* strftime.c (my_strftime): Don't store past the end of a
	zero-sized buffer.

	* time/strftime.c (underlying_strftime):
	* time/strftime.c (INT_STRLEN_BOUND): Fix typo by changing 100 to 1000.
This commit is contained in:
Ulrich Drepper
1998-09-24 18:06:23 +00:00
parent 3465c0ce37
commit e503270ca5
3 changed files with 36 additions and 21 deletions

View File

@ -1,13 +1,30 @@
1998-09-24 Ulrich Drepper <drepper@cygnus.com>
* debug/catchsegv.sh: Also produce output if cloned process died.
1998-09-24 Paul Eggert <eggert@twinsun.com> 1998-09-24 Paul Eggert <eggert@twinsun.com>
* strftime.c (underlying_strftime): * strftime.c (f_wkday): Remove duplicate definition.
(f_wkday, f_month, a_wkday, a_month, ampm): Define as macros when
!defined _NL_CURRENT && !HAVE_STRFTIME; this propagates the
1998-09-11 fix to this case.
(wkday_len, month_len): Remove these macros; they're no longer needed.
1998-09-24 Paul Eggert <eggert@twinsun.com>
* strftime.c (my_strftime): Don't store past the end of a
zero-sized buffer.
1998-09-24 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (underlying_strftime):
Set the buffer to a nonzero value before calling Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero. strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error. This lets us distinguish between an empty buffer and an error.
1998-09-24 Paul Eggert <eggert@shade.twinsun.com> 1998-09-24 Paul Eggert <eggert@shade.twinsun.com>
* strftime.c (INT_STRLEN_BOUND): Fix typo by changing 100 to 1000. * time/strftime.c (INT_STRLEN_BOUND): Fix typo by changing 100 to 1000.
This fix is propagated from tzcode1998g.tar.gz. This fix is propagated from tzcode1998g.tar.gz.
1998-09-24 Mark Kettenis <kettenis@phys.uva.nl> 1998-09-24 Mark Kettenis <kettenis@phys.uva.nl>

View File

@ -51,6 +51,8 @@ Written by Ulrich Drepper.'
fi fi
segv_output=`basename "$prog"`.segv.$$ segv_output=`basename "$prog"`.segv.$$
# Make sure this output file does not exist.
rm -f "$segv_output"
# Redirect stderr to avoid termination message from shell. # Redirect stderr to avoid termination message from shell.
(exec 3>&2 2>/dev/null (exec 3>&2 2>/dev/null
@ -60,8 +62,10 @@ SEGFAULT_OUTPUT_NAME=$segv_output \
"$prog" ${1+"$@"} 2>&3 3>&-) "$prog" ${1+"$@"} 2>&3 3>&-)
exval=$? exval=$?
# Check for signal termination. # Check for output. Even if the program terminated correctly it might
if test $exval -gt 128 && test -f "$segv_output"; then # be that a inor process (clone) failed. Therefore we do not check the
# exit code.
if test -f "$segv_output"; then
# The program caught a signal. The output is in the file with the # The program caught a signal. The output is in the file with the
# name we have in SEGFAULT_OUTPUT_NAME. In the output the names of # name we have in SEGFAULT_OUTPUT_NAME. In the output the names of
# functions in shared objects are available, but names in the static # functions in shared objects are available, but names in the static

View File

@ -416,15 +416,14 @@ my_strftime (s, maxsize, format, tp)
{ {
int hour12 = tp->tm_hour; int hour12 = tp->tm_hour;
#ifdef _NL_CURRENT #ifdef _NL_CURRENT
/* We cannot make the following values variables since we must dealy /* We cannot make the following values variables since we must delay
the evaluation of these values until really needed since some the evaluation of these values until really needed since some
expressions might not be valid in every situation. The `struct tm' expressions might not be valid in every situation. The `struct tm'
might be generated by a strptime() call and therefore initialized might be generated by a strptime() call that initialized
only a few elements. Dereference the pointers only if the format only a few elements. Dereference the pointers only if the format
requires this. Then it is ok to fail if the pointers are invalid. */ requires this. Then it is ok to fail if the pointers are invalid. */
# define a_wkday _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday) # define a_wkday _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday)
# define f_wkday _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday) # define f_wkday _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday)
# define f_wkday _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday)
# define a_month _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon) # define a_month _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon)
# define f_month _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon) # define f_month _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon)
# define ampm _NL_CURRENT (LC_TIME, tp->tm_hour > 11 ? PM_STR : AM_STR) # define ampm _NL_CURRENT (LC_TIME, tp->tm_hour > 11 ? PM_STR : AM_STR)
@ -432,22 +431,17 @@ my_strftime (s, maxsize, format, tp)
# define aw_len strlen (a_wkday) # define aw_len strlen (a_wkday)
# define am_len strlen (a_month) # define am_len strlen (a_month)
# define ap_len strlen (ampm) # define ap_len strlen (ampm)
# define wkday_len strlen (f_wkday)
# define month_len strlen (f_month)
#else #else
# if !HAVE_STRFTIME # if !HAVE_STRFTIME
const char *const f_wkday = weekday_name[tp->tm_wday]; # define f_wkday (weekday_name[tp->tm_wday])
const char *const f_month = month_name[tp->tm_mon]; # define f_month (month_name[tp->tm_mon])
const char *const a_wkday = f_wkday; # define a_wkday f_wkday
const char *const a_month = f_month; # define a_month f_month
const char *const ampm = "AMPM" + 2 * (hour12 > 11); # define ampm ("AMPM" + 2 * (tp->tm_hour > 11))
size_t aw_len = 3; size_t aw_len = 3;
size_t am_len = 3; size_t am_len = 3;
size_t ap_len = 2; size_t ap_len = 2;
size_t wkday_len = strlen (f_wkday);
size_t month_len = strlen (f_month);
# endif # endif
#endif #endif
const char *zone; const char *zone;
@ -669,7 +663,7 @@ my_strftime (s, maxsize, format, tp)
to_lowcase = 0; to_lowcase = 0;
} }
#if defined _NL_CURRENT || !HAVE_STRFTIME #if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (wkday_len, f_wkday); cpy (strlen (f_wkday), f_wkday);
break; break;
#else #else
goto underlying_strftime; goto underlying_strftime;
@ -695,7 +689,7 @@ my_strftime (s, maxsize, format, tp)
to_lowcase = 0; to_lowcase = 0;
} }
#if defined _NL_CURRENT || !HAVE_STRFTIME #if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (month_len, f_month); cpy (strlen (f_month), f_month);
break; break;
#else #else
goto underlying_strftime; goto underlying_strftime;
@ -1227,7 +1221,7 @@ my_strftime (s, maxsize, format, tp)
} }
} }
if (p) if (p && i < maxsize)
*p = '\0'; *p = '\0';
return i; return i;
} }