2 * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 #include <sys/types.h>
55 #define MAP_FAILED ((void *)-1)
60 static char long_buf
[] =
890 * compare this file with read and mmap.
891 * return 0 iff identical.
895 compare_file (const char *filename
)
903 fd
= open (filename
, O_RDONLY
);
905 err(1, "open %s", filename
);
906 ret
= fstat (fd
, &sb
);
908 err (1, "stat %s", filename
);
909 read_buf
= malloc (sb
.st_size
);
910 if (read_buf
== NULL
)
911 err (1, "malloc %u", (unsigned)sb
.st_size
);
912 ret
= read (fd
, read_buf
, sb
.st_size
);
914 err (1, "read %s", filename
);
915 if (ret
!= sb
.st_size
)
916 errx (1, "short read from %s", filename
);
917 mmap_buf
= mmap (NULL
, sb
.st_size
, PROT_READ
, MAP_PRIVATE
, fd
, 0);
918 if (mmap_buf
== (void *)MAP_FAILED
)
919 err (1, "mmap %s", filename
);
920 ret
= memcmp (read_buf
, mmap_buf
, sb
.st_size
);
927 doit (const char *filename
)
932 fd
= open (filename
, O_WRONLY
| O_APPEND
| O_CREAT
| O_TRUNC
, 0600);
934 err (1, "open %s", filename
);
937 err (1, "close %s", filename
);
938 fd
= open (filename
, O_WRONLY
| O_APPEND
);
940 err (1, "open %s", filename
);
941 ret
= write (fd
, "foobar\n", 7);
943 err (1, "write %s", filename
);
945 errx (1, "short write to %s", filename
);
948 err(1, "close %s", filename
);
950 if(compare_file (filename
))
951 errx (1, "compare 1 failed");
953 fd
= open (filename
, O_WRONLY
| O_APPEND
);
955 err (1, "open %s", filename
);
956 ret
= write (fd
, long_buf
, strlen(long_buf
));
958 err (1, "write %s", filename
);
959 if (ret
!= strlen(long_buf
))
960 errx (1, "short write to %s", filename
);
963 err(1, "close %s", filename
);
965 if(compare_file (filename
))
966 errx (1, "compare 2 failed");
970 main(int argc
, char **argv
)
972 const char *file
= "blaha";
974 setprogname (argv
[0]);
975 if (argc
!= 1 && argc
!= 2)
976 errx (1, "usage: %s [file]", argv
[0]);