[LTP] [PATCH 4/7] syscalls/fsmount: New tests

Petr Vorel
2020-02-17T09:58:10Z

Hi Li,

> On Mon, Feb 17, 2020 at 4:29 PM Viresh Kumar <viresh.kumar@linaro.org>
> wrote:

> > ...
> > > Adding #include "lapi/fcntl.h" in case of ?AT_FDCWD? undeclared. It seems
> > > we have to do this for all the tests involves ?AT_FDCWD?.

> > my fsmount.h header includes <fcntl.h>, won't that be enough ?

> I'm afraid it's not enough.

> After having a closer look, the reason is that the AT_FDCWD is defined with
> condition __USE_ATFILE, the __USE_ATFILE depends on _ATFILE_SOURCE
> defined, and _ATFILE_SOURCE needs enable _GNU_SOURCE.

> So another effective way is to add '#define _GNU_SOURCE' in front of your
> test then that <fcntl.h> will be work for you.

OK, we can add #define _GNU_SOURCE to fsmount01.c, which actually needs it
+ keep <fcntl.h> there and load lapi/fsmount.h later (see below).
But generally this will be the approach for all uses of <fcntl.h> (and probably
some other headers) for old distros. IMHO this change is caused by:

c941736c92 Remove _BSD_SOURCE and _SVID_SOURCE. (glibc-2.20)
c688b41960 Add _DEFAULT_SOURCE feature test macro. (glibc-2.19)

So we can either add it to many places or detect this old glibc and compile with
-D_GNU_SOURCE (but this might break other things).
But that's another story.

> # rpm -qa glibc-headers
> glibc-headers-2.5-123

> # cat /usr/include/fcntl.h |grep AT_FDCWD -B 2 -A 2
> #ifdef __USE_ATFILE
> # define AT_FDCWD -100 /* Special value used to indicate
> the *at functions should
> use the
> current working directory.
> */

So is this diff to v7 better?

Kind regards,
Petr

diff --git testcases/kernel/syscalls/fsmount/fsmount01.c testcases/kernel/syscalls/fsmount/fsmount01.c
index 464458080..21d0ae50b 100644
--- testcases/kernel/syscalls/fsmount/fsmount01.c
+++ testcases/kernel/syscalls/fsmount/fsmount01.c
@@ -7,10 +7,11 @@
* to mount a filesystem without any specified mount options.
*/

+#define _GNU_SOURCE
#include <sys/mount.h>
+#include <fcntl.h>

#include "tst_test.h"
-#include "lapi/fcntl.h"
#include "lapi/fsmount.h"
#include "tst_safe_stdio.h"