From: joel v. <joe...@gm...> - 2009-11-24 23:10:20
|
Hi, I post a message maybe a bit out of topic, but since I try to test fuse library, it is necessary to compile with flag -D_FILE_OFFSET_BITS=64 on 32 bits box. So when I use this flag with a readdir call, the dirent->d_name is null for all entries of my directory: root_dir = opendir("/tmp"); struct dirent* entry; while (( entry = readdir(root_dir) ) != NULL) { fprintf(stderr, "[readdir] - local dir ino: %d name: %s\n", entry->d_ino, entry->d_name ); } Have you an idea, Thank you Jol |
From: Goswin v. B. <gos...@we...> - 2009-11-25 06:42:29
|
joel vennin <joe...@gm...> writes: > Hi, I post a message maybe a bit out of topic, but since I try to test > fuse library, it is necessary to compile with flag > -D_FILE_OFFSET_BITS=64 on 32 bits box. > > So when I use this flag with a readdir call, the dirent->d_name is > null for all entries of my directory: > > > root_dir = opendir("/tmp"); > struct dirent* entry; > while (( entry = readdir(root_dir) ) != NULL) { > fprintf(stderr, "[readdir] - local dir ino: %d name: %s\n", > entry->d_ino, > entry->d_name > ); > } > > Have you an idea, > > Thank you > > Jol Not without seeing your code. MfG Goswin |
From: joel v. <joe...@gm...> - 2009-11-25 07:28:55
|
---------- Forwarded message ---------- From: joel vennin <joe...@gm...> Date: Wed, 25 Nov 2009 08:27:49 +0100 Subject: Re: [fuse-devel] readdir function with _FILE_OFFSET_BITS=64 To: Goswin von Brederlow <gos...@we...> The code is this one: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include <assert.h> #include <sys/types.h> #include <dirent.h> int main () { DIR* root_dir = opendir("/tmp"); if(!root_dir) { fprintf(stderr, "[readdir] fail to read dir\n"); return 1; } struct dirent* entry; while (( entry = readdir(root_dir) ) != NULL) { fprintf(stderr, "[readdir] - local dir ino: %d name: %s\n", entry->d_ino, entry->d_name ); } // close the directory closedir(root_dir); return 0; } On 11/25/09, Goswin von Brederlow <gos...@we...> wrote: > joel vennin <joe...@gm...> writes: > >> Hi, I post a message maybe a bit out of topic, but since I try to test >> fuse library, it is necessary to compile with flag >> -D_FILE_OFFSET_BITS=64 on 32 bits box. >> >> So when I use this flag with a readdir call, the dirent->d_name is >> null for all entries of my directory: >> >> >> root_dir = opendir("/tmp"); >> struct dirent* entry; >> while (( entry = readdir(root_dir) ) != NULL) { >> fprintf(stderr, "[readdir] - local dir ino: %d name: %s\n", >> entry->d_ino, >> entry->d_name >> ); >> } >> >> Have you an idea, >> >> Thank you >> >> Jol > > Not without seeing your code. > > MfG > Goswin > |
From: Nicolas C. <tso...@gm...> - 2009-11-26 10:12:17
|
This is because you didn't compile with -Wall :) Otherwise you would have noticed the following warning : warning: format '%d' expects type 'int', but argument 3 has type '__ino64_t' That's why fprintf mess with the arguments and incorrectly fetch entry->d_name. Use "%lld" modifier instead of "%d" and it should works. On Wed, Nov 25, 2009 at 8:28 AM, joel vennin <joe...@gm...> wrote: > ---------- Forwarded message ---------- > From: joel vennin <joe...@gm...> > Date: Wed, 25 Nov 2009 08:27:49 +0100 > Subject: Re: [fuse-devel] readdir function with _FILE_OFFSET_BITS=64 > To: Goswin von Brederlow <gos...@we...> > > The code is this one: > > > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > #include <errno.h> > #include <fcntl.h> > #include <unistd.h> > #include <assert.h> > > #include <sys/types.h> > #include <dirent.h> > > > int main () > { > DIR* root_dir = opendir("/tmp"); > if(!root_dir) { > fprintf(stderr, "[readdir] fail to read dir\n"); > return 1; > } > > struct dirent* entry; > while (( entry = readdir(root_dir) ) != NULL) { > fprintf(stderr, "[readdir] - local dir ino: %d name: %s\n", > entry->d_ino, > entry->d_name > ); > } > > // close the directory > closedir(root_dir); > > > return 0; > } > > > On 11/25/09, Goswin von Brederlow <gos...@we...> wrote: >> joel vennin <joe...@gm...> writes: >> >>> Hi, I post a message maybe a bit out of topic, but since I try to test >>> fuse library, it is necessary to compile with flag >>> -D_FILE_OFFSET_BITS=64 on 32 bits box. >>> >>> So when I use this flag with a readdir call, the dirent->d_name is >>> null for all entries of my directory: >>> >>> >>> root_dir = opendir("/tmp"); >>> struct dirent* entry; >>> while (( entry = readdir(root_dir) ) != NULL) { >>> fprintf(stderr, "[readdir] - local dir ino: %d name: %s\n", >>> entry->d_ino, >>> entry->d_name >>> ); >>> } >>> >>> Have you an idea, >>> >>> Thank you >>> >>> Jol >> >> Not without seeing your code. >> >> MfG >> Goswin >> > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > fuse-devel mailing list > fus...@li... > https://lists.sourceforge.net/lists/listinfo/fuse-devel > -- Person who say it cannot be done should not interrupt person doing it. |
From: Goswin v. B. <gos...@we...> - 2009-11-30 12:43:49
|
Nicolas Collignon <tso...@gm...> writes: > This is because you didn't compile with -Wall :) > Otherwise you would have noticed the following warning : > > warning: format '%d' expects type 'int', but argument 3 has type '__ino64_t' > > That's why fprintf mess with the arguments and incorrectly fetch entry->d_name. > > Use "%lld" modifier instead of "%d" and it should works. #include <inttypes.h> printf("Inode = %"PRIu64", name = ...", entry->d_ino, ...); 64bit ints are long long (%ll) on 32bit cpus but just long (%l) on 64bit cpus. So to get the correct % specifier you need the PRI defines from inttypes. MfG Goswin |