##*****************************************************************************
#  AUTHOR:
#    Morris Jette <jette1@llnl.gov>
#
#  SYNOPSIS:
#    X_AC_PRINTF_NULL
#
#  DESCRIPTION:
#    Test that printf("%s\n", NULL); does not result in invalid memory 
#    reference. This is a known issue in Open Solaris version 118 and  
#    some other operating systems. The potential for this problem exists 
#    in hundreds of places in the SLURM code, so the ideal place to 
#    address it is in the underlying print functions.
#
#    A good description of the problem can be found here: 
#       http://arc.opensolaris.org/caselog/PSARC/2008/403/20080625_darren.moffat
#
#    Here is an excerpt from that document:
#    "The current behavior of the printf(3C) family of functions in libc when
#     passed a NULL value for a string format is undefined and usually
#     results in a SEGV and crashed application.
#
#     The workaround to applications written to depend on this behavior is to
#     LD_PRELOAD=/usr/lib/0@0.so.1 (or the 64 bit equivalent).  The
#     workaround isn't always easy to apply (or it is too late data has been
#     lost or corrupted by that point)."
#
#    In the case of SLURM, setting LD_PRELOAD to the appropriate value before
#    building the code or running any applications will fix the problem. We
#    expect to release a version of SLURM supporting OpenSolaris about the same
#    as a version of OpenSolaris with this problem fixed is released, so the 
#    use of LD_PRELOAD will be temporary.
##*****************************************************************************

AC_DEFUN([X_AC_PRINTF_NULL], [
  AC_MSG_CHECKING([for support of printf("%s", NULL)])
  AC_RUN_IFELSE([AC_LANG_PROGRAM([
	#include <stdio.h>
	#include <stdlib.h>],
	[[ char tmp[8]; char *n=NULL; snprintf(tmp,8,"%s",n); exit(0); ]])],
    printf_null_ok=yes,
    printf_null_ok=no,
    printf_null_ok=yes)

  case "$host" in
	*solaris*) have_solaris=yes ;;
	*) have_solaris=no ;;
  esac

  if test   "$printf_null_ok" = "no" -a "$have_solaris" = "yes" -a -d /usr/lib64/0@0.so.1; then
    AC_MSG_ERROR([printf("%s", NULL) results in abort, upgrade to OpenSolaris release 119 or set LD_PRELOAD=/usr/lib64/0@0.so.1])
  elif test "$printf_null_ok" = "no" -a "$have_solaris" = "yes" -a -d /usr/lib/0@0.so.1; then
    AC_MSG_ERROR([printf("%s", NULL) results in abort, upgrade to OpenSolaris release 119 or set LD_PRELOAD=/usr/lib/0@0.so.1])
  elif test "$printf_null_ok" = "no" -a "$have_solaris" = "yes"; then
    AC_MSG_ERROR([printf("%s", NULL) results in abort, upgrade to OpenSolaris release 119])
  elif test "$printf_null_ok" = "no"; then
    AC_MSG_ERROR([printf("%s", NULL) results in abort])
  else
    AC_MSG_RESULT([yes])
  fi
])

