/* Copyright 2009, 2010 Kevin Ryde.
This file is part of File-Locate-Iterator.
File-Locate-Iterator is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 3, or (at your option)
any later version.
File-Locate-Iterator is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along
with File-Locate-Iterator; see the file COPYING. Failing that, go to
.
*/
/* #define _LARGEFILE64_SOURCE 1 */
/* #define _LARGEFILE_SOURCE 1 */
#define _FILE_OFFSET_BITS 64
#include
#include
#include
#include
#include
#include
/* multiple maps give a different address each time */
/* const char filename[] = "/var/cache/locate/locatedb"; */
const char filename[] = "/dev/zero";
#define MAX(x,y) ((x) >= (y) ? (x) : (y))
int
main (void)
{
{
#ifdef _DIRENT_HAVE_D_TYPE
printf ("_DIRENT_HAVE_D_TYPE\n");
#endif
#ifdef DT_UNKNOWN
printf ("DT_UNKNOWN %d\n", DT_UNKNOWN);
#endif
DIR *dp = opendir ("/tmp");
printf ("dp %p\n", dp);
struct dirent *de;
/* while (de = readdir (dp)) { */
/* printf ("de %p\n", de); */
/* printf ("name %s\n", de->d_name); */
/* printf ("inode %d\n", de->d_ino); */
/* printf ("type %d\n", de->d_type); */
/* } */
union {
struct dirent d;
char b[sizeof(struct dirent)
+ MAX (sizeof(de->d_name), NAME_MAX + 1)
- sizeof(de->d_name)];
} du;
printf ("sizeof d_name %d\n", sizeof(de->d_name));
printf ("NAME_MAX+1 %d\n", NAME_MAX+1);
while (readdir_r (dp, &du.d, &de) == 0) {
printf ("de %p\n", de);
printf ("name %s\n", de->d_name);
printf ("inode %ld\n", (long) de->d_ino);
printf ("type %d\n", de->d_type);
}
return 0;
}
{
int fd, i;
void *p;
size_t len;
off_t offset;
fd = open (filename, O_RDONLY);
if (fd < 0) {
perror ("open");
return 1;
}
{
printf ("sizeof(off_t) %d\n", sizeof(off_t));
len = 1;
offset = (off_t)1 << 32;
p = mmap (NULL, len, PROT_READ, MAP_SHARED, fd, offset);
printf ("%p\n", p);
return 0;
}
{
len = 4;
offset = 0;
for (i = 0; i < 3; i++) {
p = mmap (NULL, len, PROT_READ, MAP_SHARED, fd, offset);
printf ("%p\n", p);
}
return 0;
}
}
}