2000.03.27 02:36 "stderr redirection", by Byron Young

I successfully compiled the libtiff distribution using nmake, cl, link for a Win32 system running W98. In the makefile (attached to this email), I selected

WINMODE = -DTIF_PLATFORM_CONSOLE

Attempting to redirect stderr to a file, I reopened the stderr file using

Begin WinMain
FILE * fp;
char buf[128];
char tm[16];
char dt[16];

fp = freopen("stderr.txt","w+",stderr);
_strtime(tm);
_strdate(dt);
sprintf(buf,"Starting Program %s %s\n",tm,dt);
fputs(buf,stderr);


..
..
..
fclose(fp);
end of WinMain

The stderr.txt file is opened, and the date and time are written to stderr. According to the html manual, TIFFError invokes the library-wide error handling function to (normally) write an error message to the stderr. However, when errors occur while a TIFF libtiff function is called, the error output is NOT written to stderr.txt.

When I rebuild the libtiff distribution with

WINMODE = -DTIF_PLATFORM_WINDOWED

Each error that the TIFF libtiff function generates correctly displays a message box stating the error.

QUESTION: How do I tell the TIFF libtiff functions (compiled with WINMODE = -DTIF_PLATFORM_CONSOLE) to use the freopen stderr file?

Thanks,
Byron Young
bkyoung@jps.net

#
#      Simple MS VC++ Makefile
#
#       To build:
#       C:\libtiff\libtiff> nmake /f makefile.vc all
#

#
# Select _CONSOLE to build a library which reports errors to stderr, or
# _WINDOWED to build such that errors are reported via MessageBox().
#
WINMODE = -DTIF_PLATFORM_CONSOLE
#WINMODE = -DTIF_PLATFORM_WINDOWED

CC      = cl
INCL   = -I.
LIBS    = user32.lib
CFLAGS  = /nologo /W3 $(INCL) $(WINMODE) /c /G4 /LD /Zi

OBJ     = \
     tif_aux.obj \
   tif_close.obj \
 tif_codec.obj \
 tif_compress.obj \
      tif_dir.obj \
   tif_dirinfo.obj \
       tif_dirread.obj \
       tif_dirwrite.obj \
      tif_dumpmode.obj \
      tif_error.obj \
 tif_fax3.obj \
        fax3sm.obj \
      tif_getimage.obj \
      tif_jpeg.obj \
  tif_flush.obj \
 tif_luv.obj \
   tif_lzw.obj \
   tif_next.obj \
  tif_open.obj \
  tif_packbits.obj \
      tif_pixarlog.obj \
      tif_predict.obj \
       tif_print.obj \
 tif_read.obj \
  tif_swab.obj \
  tif_strip.obj \
 tif_thunder.obj \
       tif_tile.obj \
  tif_win32.obj \
 tif_version.obj \
       tif_warning.obj \
       tif_write.obj \
 tif_zip.obj

VERSION      = ..\VERSION
ALPHA = ..\dist\tiff.alpha

default:  libtiff.lib

all: libtiff.lib libtiff.dll

libtiff.lib:     $(OBJ)
  lib /out:libtiff.lib $(OBJ)

libtiff.dll: $(OBJ)
        link /machine:i386 /dll /def:libtiff.def /out:libtiff.dll \
               $(OBJ) $(LIBS)

version.h:      $(VERSION) $(ALPHA) mkversion.c
 $(CC) mkversion.c
       del version.h
   .\mkversion.exe -v $(VERSION) -a $(ALPHA) version.h

clean:
       del *.obj *.lib libtiff.dll

tif_version.obj:     version.h