From d2bb34270a3c68941f3b117a2e83a3e20e3b6a9b Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 26 Aug 2017 13:21:47 +0200
Subject: Haiku patch


diff --git a/src/current/fileop.c b/src/current/fileop.c
index 70010f4..f37db06 100644
--- a/src/current/fileop.c
+++ b/src/current/fileop.c
@@ -145,14 +145,15 @@ int dirlen;
 /************************************************************************/
 void purge_buffer_cache()
 {
-	if (!mountname)
-		return;
+
 
 	char cwd[PATH_MAX];
 	char command[1024];
 	int ret,i;
 
 	junkp=(int *)getcwd(cwd, sizeof(cwd));
+	if (!mountname)
+		return;
 	junk=chdir("/");
 	strcpy(command,"umount ");
 	strcat(command, mountname);
@@ -254,7 +255,7 @@ int main(int argc, char **argv)
 	  printf("\nFileop:  Working in %s, File size is %d,  Output is in Ops/sec. (A=Avg, B=Best, W=Worst)\n", thedir, sz);
 	if(!verbose)
 	{
-#ifdef Windows
+#if defined(Windows) || defined(Haiku) 
 	   	printf(" .     %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %7s %10s\n",
        	   	"mkdir","chdir","rmdir","create","open","read","write","close","stat",
 		"access","chmod","readdir","delete"," Total_files");
@@ -462,7 +463,7 @@ int main(int argc, char **argv)
 	      printf("         Worst readdir(s)/sec = %12.2f (%12.9f seconds/op)\n\n",
 			1/stats[_STAT_READDIR].worst,stats[_STAT_READDIR].worst);
 	   }
-#if !defined(Windows)
+#if 0
 	   /*
 	    * link test 
 	    */
@@ -529,7 +530,7 @@ int main(int argc, char **argv)
 	         printf("%7.0f ",stats[_STAT_ACCESS].counter/stats[_STAT_ACCESS].total_time);
 	         printf("%7.0f ",stats[_STAT_CHMOD].counter/stats[_STAT_CHMOD].total_time);
 	         printf("%7.0f ",stats[_STAT_READDIR].counter/stats[_STAT_READDIR].total_time);
-#ifndef Windows
+#if !defined(Windows) || !defined(Haiku)
 	         printf("%7.0f ",stats[_STAT_LINK].counter/stats[_STAT_LINK].total_time);
 	         printf("%7.0f ",stats[_STAT_UNLINK].counter/stats[_STAT_UNLINK].total_time);
 #endif
@@ -552,7 +553,7 @@ int main(int argc, char **argv)
 	         printf("%7.0f ",1/stats[_STAT_ACCESS].best);
 	         printf("%7.0f ",1/stats[_STAT_CHMOD].best);
 	         printf("%7.0f ",1/stats[_STAT_READDIR].best);
-#ifndef Windows
+#if !defined(Windows) || !defined(Haiku)
 	         printf("%7.0f ",1/stats[_STAT_LINK].best);
 	         printf("%7.0f ",1/stats[_STAT_UNLINK].best);
 #endif
@@ -575,7 +576,7 @@ int main(int argc, char **argv)
 	         printf("%7.0f ",1/stats[_STAT_ACCESS].worst);
 	         printf("%7.0f ",1/stats[_STAT_CHMOD].worst);
 	         printf("%7.0f ",1/stats[_STAT_READDIR].worst);
-#ifndef Windows
+#if !defined(Windows) || !defined(Haiku)
 	         printf("%7.0f ",1/stats[_STAT_LINK].worst);
 	         printf("%7.0f ",1/stats[_STAT_UNLINK].worst);
 #endif
@@ -601,9 +602,10 @@ dir_create(int x)
 	{
 	  sprintf(buf,"fileop_L1_%d",i);
 	  stats[_STAT_DIR_CREATE].starttime=time_so_far();
-	  ret=mkdir(buf,0777);
+	  ret=mkdir(buf, 0777);
 	  if(ret < 0)
 	  {
+	  	  printf("ret = %d", ret);
 	      printf("Mkdir failed\n");
 	      exit(1);
 	  }
diff --git a/src/current/iozone.c b/src/current/iozone.c
index 5407795..727a053 100644
--- a/src/current/iozone.c
+++ b/src/current/iozone.c
@@ -74,7 +74,7 @@
 #include <windows.h>
 #include <errno.h>
 #else
-#if defined(linux) || defined(solaris) || defined(IOZ_macosx) || defined(__AIX__) || defined(__FreeBSD__) || defined(_HPUX_SOURCE) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
+#if defined(linux) || defined(solaris) || defined(IOZ_macosx) || defined(__AIX__) || defined(__FreeBSD__) || defined(_HPUX_SOURCE) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(Haiku)
 #include <errno.h>
 #else
 extern  int errno;   /* imported for errors */
@@ -106,7 +106,7 @@ extern  int h_errno; /* imported for errors */
    syscall(__NR_sched_setaffinity, (pid_t)pid, (size_t)size, (void *)cpuset)
 #endif
 
-#if defined(HAVE_ANSIC_C) && defined(linux)
+#if defined(HAVE_ANSIC_C) && (defined(linux) || defined(Haiku))
 #include <stdlib.h>
 #include <sys/wait.h>
 #endif
@@ -118,7 +118,7 @@ int atoi();
 int close();
 int unlink();
 int main();
-#if !defined(linux)
+#if !defined(linux) && !defined(Haiku)
 int wait();
 #endif
 int fsync();
@@ -296,7 +296,7 @@ THISVERSION,
 #include <stdio.h>
 #include <signal.h>
 
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows) || defined(Haiku)
   #ifndef my_sig_t
   typedef void (*my_sig_t)(int);
   #endif
@@ -313,6 +313,13 @@ THISVERSION,
 #include <string.h>
 #endif
 
+#if defined(__HAIKU__)
+#include <malloc.h>
+#include <stdlib.h>
+#include <string.h>
+#endif
+
+
 #if defined (__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__APPLE__) || defined(__DragonFly__)
 #ifndef O_SYNC
 #define O_SYNC O_FSYNC
@@ -444,7 +451,7 @@ typedef long long off64_t;
 #define MAP_ANONYMOUS MAP_ANON
 #endif
 
-#if defined(SCO_Unixware_gcc) || defined(solaris) || defined(UWIN) || defined(SCO)
+#if defined(SCO_Unixware_gcc) || defined(solaris) || defined(UWIN) || defined(SCO) || defined(Haiku)
 #define MAP_FILE (0)
 #endif
 
@@ -1032,7 +1039,7 @@ float do_compute(float);	/* compute cycle simulation       */
 void begin(off64_t,long long);
 void record_command_line(int, char **);
 void show_help(void);		/* show development help          */
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows) || defined(Haiku)
 my_sig_t signal_handler(void);	/* clean up if user interrupts us */
 #else
 sighandler_t signal_handler(void);	/* clean up if user interrupts us */
@@ -1925,7 +1932,7 @@ char **argv;
 	argvsave=argv;
 
 #ifndef NO_SIGNAL
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows) || defined(Haiku)
     	signal((int) SIGINT, (my_sig_t) signal_handler);   /* handle user interrupt */
     	signal((int) SIGTERM, (my_sig_t) signal_handler);  /* handle kill from shell */
 #else
@@ -2704,6 +2711,9 @@ char **argv;
                                         sprintf(splash[splash_line++],"\tDedup+compress enabled\n ");
 					break;
  				case 'R':  /* Speical Windows option to read filelist from a input file. Experimental */
+                            		{
+                            		struct stat outbuf;
+                            		int result;
 	 				mfflag++;
 					subarg = argv[optind++];
                                         if(subarg==(char *)0)
@@ -2713,8 +2723,6 @@ char **argv;
                                         }
                                         sprintf(splash[splash_line++],"\tFilenames from a file option enabled. File: %s\n ",subarg);
 			 		/* filename should be used instead of filelist */
-                            		struct stat outbuf;
-                            		int result;
                             		result = stat(subarg, &outbuf);
                             		if(result == -1) {
                                     		printf("Failed to stat the iozone input file: %s\n",argv[optind]);
@@ -2755,7 +2763,7 @@ char **argv;
                                 		}
                             		}
 					break;
-
+                            		}
 				case 'c':  /* Argument is the controlling host name */
 					/* I am a client for distributed Iozone */
 					subarg=argv[optind++];
@@ -3730,13 +3738,13 @@ void show_help()
 
 ******************************************************************/
 #ifdef HAVE_ANSIC_C
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows) || defined(Haiku)
 my_sig_t signal_handler(void)
 #else
 sighandler_t signal_handler(void)
 #endif
 #else
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(solaris) || defined(Windows) || defined(Haiku)
 my_sig_t signal_handler()
 #else
 sighandler_t signal_handler()
@@ -24871,7 +24879,7 @@ int main(void)
 int false = 0;
 int true = 1;
 #else
-typedef enum { false = 0, true } boolean;
+//typedef enum { false = 0, true } boolean;
 #endif
 typedef struct sockaddr_in       sockaddr_in_t;
 typedef struct sockaddr_in6      sockaddr_in6_t;
@@ -25285,11 +25293,12 @@ void * thread_fwrite_test( x)
         FILE *stream = NULL;
         int First_Run[MAXSTREAMS];
 	int kk;
+	double burst_acc_time_sec;
 
 	for(kk=0;kk<MAXSTREAMS;kk++)
 		First_Run[kk]=1;
 
-        double burst_acc_time_sec = 0;
+        burst_acc_time_sec = 0;
 
         if(compute_flag)
                 delay=compute_time;
@@ -25749,6 +25758,10 @@ void * thread_fread_test( x)
         char tmpname[256];
         FILE *thread_wqfd;
         FILE *thread_Lwqfd;
+        char *stdio_buf;
+        char *filename;
+        long long Index = 0;
+        FILE *stream = NULL;
 
         if(compute_flag)
                 delay=compute_time;
@@ -25757,10 +25770,6 @@ void * thread_fread_test( x)
         thread_wqfd=w_traj_fd=thread_Lwqfd=(FILE *)0;
         traj_offset=walltime=cputime=0;
         anwser=bind_cpu=0;
-        char *stdio_buf;
-        long long Index = 0;
-        FILE *stream = NULL;
-        char *filename;
 
         if(w_traj_flag)
         {
diff --git a/src/current/iozone_visualizer.pl b/src/current/iozone_visualizer.pl
index 5d5a52c..9ebd809 100755
--- a/src/current/iozone_visualizer.pl
+++ b/src/current/iozone_visualizer.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/boot/common/bin/perl
 
 use warnings;
 use strict;
diff --git a/src/current/libbif.c b/src/current/libbif.c
index 5e14e5f..b54b71c 100644
--- a/src/current/libbif.c
+++ b/src/current/libbif.c
@@ -17,7 +17,7 @@
 #include <sys/types.h>
 #include <stdio.h>
 #include <sys/file.h>
-#if defined(__AIX__) || defined(__FreeBSD__) || defined(__DragonFly__)
+#if defined(__AIX__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(Haiku)
 #include <fcntl.h>
 #else
 #include <sys/fcntl.h>
@@ -27,7 +27,7 @@
 #include <string.h>
 #endif
 
-#if defined(linux) || defined(__DragonFly__) || defined(IOZ_macosx) || defined(__NetBSD__) || defined(Windows)
+#if defined(linux) || defined(__DragonFly__) || defined(IOZ_macosx) || defined(__NetBSD__) || defined(Windows) || defined(Haiku)
 #include <unistd.h>
 #include <stdlib.h>
 #endif
diff --git a/src/current/makefile b/src/current/makefile
index 3a54701..7da4813 100644
--- a/src/current/makefile
+++ b/src/current/makefile
@@ -42,6 +42,7 @@ all:
 	@echo "        ->   freebsd64            (64bit)   <-"
 	@echo "        ->   generic              (32bit)   <-"
 	@echo "        ->   ghpux                (32bit)   <-"
+	@echo "        ->   haiku                (32bit)   <-"
 	@echo "        ->   hpuxs-11.0 (simple)  (32bit)   <-"
 	@echo "        ->   hpux-11.0w           (64bit)   <-"
 	@echo "        ->   hpuxs-11.0w          (64bit)   <-"
@@ -97,6 +98,12 @@ rpm:
 	cp ../../iozone*.tar /home/capps/rpmbuild/SOURCES/
 	rpmbuild  -ba --buildroot /home/capps/rpmbuild/BUILDROOT spec.in
 
+#
+# GNU 'C' compiler Linux build with threads, largefiles, async I/O 
+#
+haiku:	iozone_haiku.o libbif.o fileop_haiku.o
+	$(CC)  -O3 $(LDFLAGS) -lnetwork iozone_haiku.o libbif.o -o iozone
+	$(CC)  -O3  -lnetwork fileop_haiku.o -o fileop
 
 #
 # Turn on the optimizer, largefiles, Posix async I/O and threads.
@@ -647,6 +654,16 @@ netbsd-AMD64:  iozone_netbsd-AMD64.o libbif.o libasync.o fileop_netbsd-AMD64.o p
 # Now for the machine specific stuff
 #
 
+iozone_haiku.o:	iozone.c libbif.c 
+	@echo ""
+	@echo "Building iozone for Haiku"
+	@echo ""
+	$(CC) -Wall -c -O3 -Dunix -DHAVE_ANSIC_C -DHAVE_PREAD \
+		 -DNO_MADVISE -DHaiku $(CFLAGS) iozone.c \
+		-DNAME='"haiku"' -o iozone_haiku.o
+	$(CC) -Wall -c -O3 -Dunix -DHAVE_ANSIC_C \
+		 -DNO_MADVISE -DHaiku $(CFLAGS) libbif.c -o libbif.o
+
 iozone_hpux.o:	iozone.c libbif.c
 	@echo ""
 	@echo "Building iozone for HP-UX (9.05)"
@@ -849,6 +866,13 @@ iozone_linux.o:	iozone.c libbif.c libasync.c
 	$(CC) -Wmissing-prototypes -Wall -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
 		-D_LARGEFILE64_SOURCE $(CFLAGS) libasync.c  -o libasync.o 
 
+fileop_haiku.o:	fileop.c
+	@echo ""
+	@echo "Building fileop for Haiku"
+	@echo ""
+	$(CC) -c -O $(CFLAGS) -DHaiku fileop.c -o fileop_haiku.o
+
+
 fileop_AIX.o:	fileop.c
 	@echo ""
 	@echo "Building fileop for AIX"
diff --git a/src/current/report.pl b/src/current/report.pl
index 3b21055..a83580c 100755
--- a/src/current/report.pl
+++ b/src/current/report.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/boot/common/bin/perl
 #
 # arguments: one of more report files
 #
-- 
2.30.2

