*** /pg/tools/fsync/test_fsync.c	Fri Oct 13 10:18:33 2006
--- test_fsync.c	Thu Nov 23 00:24:49 2006
***************
*** 14,19 ****
--- 14,20 ----
  #include <time.h>
  #include <sys/time.h>
  #include <unistd.h>
+ #include <string.h>
  
  #ifdef WIN32
  #define FSYNC_FILENAME	"./test_fsync.out"
***************
*** 21,40 ****
  #define FSYNC_FILENAME	"/var/tmp/test_fsync.out"
  #endif
  
! /* O_SYNC and O_FSYNC are the same */
  #if defined(O_SYNC)
! #define OPEN_SYNC_FLAG		O_SYNC
  #elif defined(O_FSYNC)
! #define OPEN_SYNC_FLAG		O_FSYNC
! #elif defined(O_DSYNC)
! #define OPEN_DATASYNC_FLAG	O_DSYNC
  #endif
  
  #if defined(OPEN_SYNC_FLAG)
! #if defined(O_DSYNC) && (O_DSYNC != OPEN_SYNC_FLAG)
! #define OPEN_DATASYNC_FLAG	O_DSYNC
  #endif
  #endif
  
  #define WAL_FILE_SIZE	(16 * 1024 * 1024)
  
--- 22,54 ----
  #define FSYNC_FILENAME	"/var/tmp/test_fsync.out"
  #endif
  
! /* This logic comes from src/backend/access/transam/xlog.c where it's
!    better documented */
! #ifdef O_DIRECT
! #define PG_O_DIRECT                             O_DIRECT
! #else
! #define PG_O_DIRECT                             0
! #endif
! 
  #if defined(O_SYNC)
! #define BARE_OPEN_SYNC_FLAG             O_SYNC
  #elif defined(O_FSYNC)
! #define BARE_OPEN_SYNC_FLAG             O_FSYNC
! #endif
! #ifdef BARE_OPEN_SYNC_FLAG
! #define OPEN_SYNC_FLAG                  (BARE_OPEN_SYNC_FLAG | PG_O_DIRECT)
  #endif
  
+ #if defined(O_DSYNC)
  #if defined(OPEN_SYNC_FLAG)
! #if O_DSYNC != BARE_OPEN_SYNC_FLAG
! #define OPEN_DATASYNC_FLAG              (O_DSYNC | PG_O_DIRECT)
! #endif
! #else
! #define OPEN_DATASYNC_FLAG              (O_DSYNC | PG_O_DIRECT)
  #endif
  #endif
+ 
  
  #define WAL_FILE_SIZE	(16 * 1024 * 1024)
  
