/* mmap() test program */
#include <stdio.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/mman.h>

#define	MMAP_SIZE 8192   

int main(int argc, char *argv[])
{
        int i, j, fd, spaces = 0;
        int off;
        char *addr;
        int msize = MMAP_SIZE;
#ifdef READ
	int br;
        addr = (char *) malloc(MMAP_SIZE);
        printf("Testing reads\n");
#else        
        printf("Testing mmaps\n");
#endif        
        fd = open("./test", O_RDONLY, 0);

        assert(fd != 0);
        printf("mmap_size: %i\n",msize);
        for (off = 0; off< 111329280; off += MMAP_SIZE)
        {
		printf("offset: %li\r", off);
#ifdef READ
		br = read(fd, addr, MMAP_SIZE);
#else		
                addr = (char *) mmap(0, MMAP_SIZE, PROT_READ, MAP_SHARED, fd, off);
                if(addr == MAP_FAILED) {
                   perror("Mmap error");
                   break;
                }
                assert(addr != NULL);
#endif
                for (j = 0; j < MMAP_SIZE; j+=256)
                        if (addr[j] == ' ')
                                spaces++;
#ifdef READ
		if (br < MMAP_SIZE) {
		  break;
		}
#else                                
                munmap(addr,MMAP_SIZE);
#endif
        }
        printf("%d\n",spaces);
        free(addr);
        return 0;
}
