Hello,

I have a little issue around the detection of the getfsstat() function.

According to multiple manuals from different BSD versions [1,2], the signature of the BSD's getfsstat() is this:
int getfsstat(struct statfs *buf, long bufsize, int mode);

Note, it refers to 'struct statfs'. The statfs structure contains a field that will be interesting in the following [3,4]:

struct statfs {
...
char      f_fstypename[MFSNAMELEN]; /* filesystem type name */
...
};

The configure script tries to detect the getfsstat() function but failes, because:
configure:31706: checking for struct fsstat.f_fstypename
configure:31706: /path/to/some-cross-gcc -c   conftest.c >&5
conftest.c: In function 'main':
conftest.c:473:22: error: storage size of 'ac_aggr' isn't known
 static struct fsstat ac_aggr;
                      ^~~~~~~
configure:31706: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU findutils"
| #define PACKAGE_TARNAME "findutils"
| #define PACKAGE_VERSION "4.6.0"
...
| int
| main ()
| {
| static struct fsstat ac_aggr;
| if (ac_aggr.f_fstypename)
| return 0;
|   ;
|   return 0;
| }

However, the used type in the failed program was 'struct fsstat'. By the definition of 'struct statfs' found in the BSD manuals, does have a field 'f_fstypename'. But the name is different.

My goal is to compile the findutils by supplying the BSD's getfsstat() API to get mountlist. For now, I do not want to implement the Linux's <mntent.h> stuff, I like the BSD approach.

So, my questions are:
a) Why the configure use a different type name?
b) If it is intentional, then where that type is defined? Unfortunately, I did not found anything. c) Is this branch of the configure still maintained, or it is abandoned? The related code that use this API is also still maintained?

Aron

[1] https://man.openbsd.org/getfsstat.2
[2] https://www.freebsd.org/cgi/man.cgi?query=getfsstat&sektion=2
[3] https://man.openbsd.org/statfs.2
[4] https://www.freebsd.org/cgi/man.cgi?query=statfs&sektion=2


Reply via email to