]> git.ipfire.org Git - thirdparty/kmod.git/blobdiff - testsuite/path.c
Remove FSF mailing address
[thirdparty/kmod.git] / testsuite / path.c
index bc797fc40148ecb6e0f7f0be42dde80cf45b89f0..ba9a51135c221439aef9adfa05149bc251e86a14 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012  ProFUSION embedded systems
+ * Copyright (C) 2012-2013  ProFUSION embedded systems
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <assert.h>
-#include <errno.h>
 #include <dirent.h>
-#include <fcntl.h>
 #include <dlfcn.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <limits.h>
-#include <stdlib.h>
 #include <stdarg.h>
-#include <string.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 
 #include "testsuite.h"
 
@@ -95,139 +94,109 @@ static void *get_libc_func(const char *f)
        return fp;
 }
 
-TS_EXPORT FILE *fopen(const char *path, const char *mode)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static FILE* (*_fopen)(const char *path, const char *mode);
-
-       if (!get_rootpath(__func__))
-               return NULL;
-
-       _fopen = get_libc_func("fopen");
-
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return NULL;
-
-       return (*_fopen)(p, mode);
+/* wrapper template for a function with one "const char* path" argument */
+#define WRAP_1ARG(rettype, failret, name) \
+TS_EXPORT rettype name(const char *path) \
+{ \
+       const char *p;                          \
+       char buf[PATH_MAX * 2];                 \
+       static rettype (*_fn)(const char*);     \
+                                               \
+       if (!get_rootpath(__func__))            \
+               return failret;                 \
+       _fn = get_libc_func(#name);             \
+       p = trap_path(path, buf);               \
+       if (p == NULL)                          \
+               return failret;                 \
+       return (*_fn)(p);                       \
 }
 
-TS_EXPORT int open(const char *path, int flags, ...)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static int (*_open)(const char *path, int flags, ...);
-
-       if (!get_rootpath(__func__))
-               return -1;
-
-       _open = get_libc_func("open");
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return -1;
-
-       if (flags & O_CREAT) {
-               mode_t mode;
-               va_list ap;
-
-               va_start(ap, flags);
-               mode = va_arg(ap, mode_t);
-               va_end(ap);
-               return _open(p, flags, mode);
-       }
-
-       return _open(p, flags);
+/* wrapper template for a function with "const char* path" and another argument */
+#define WRAP_2ARGS(rettype, failret, name, arg2t)      \
+TS_EXPORT rettype name(const char *path, arg2t arg2)   \
+{ \
+       const char *p;                                  \
+       char buf[PATH_MAX * 2];                         \
+       static rettype (*_fn)(const char*, arg2t arg2); \
+                                                       \
+       if (!get_rootpath(__func__))                    \
+               return failret;                         \
+       _fn = get_libc_func(#name);                     \
+       p = trap_path(path, buf);                       \
+       if (p == NULL)                                  \
+               return failret;                         \
+       return (*_fn)(p, arg2);                         \
 }
 
-TS_EXPORT int mkdir(const char *path, mode_t mode)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static int (*_mkdir)(const char *path, mode_t mode);
-
-       if (!get_rootpath(__func__))
-               return -1;
-
-       _mkdir = get_libc_func("mkdir");
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return -1;
-
-       return _mkdir(p, mode);
+/* wrapper template for open family */
+#define WRAP_OPEN(suffix)                                      \
+TS_EXPORT int open ## suffix (const char *path, int flags, ...)        \
+{ \
+       const char *p;                                          \
+       char buf[PATH_MAX * 2];                                 \
+       static int (*_fn)(const char *path, int flags, ...);    \
+                                                               \
+       if (!get_rootpath(__func__))                            \
+               return -1;                                      \
+       _fn = get_libc_func("open" #suffix);                    \
+       p = trap_path(path, buf);                               \
+       if (p == NULL)                                          \
+               return -1;                                      \
+                                                               \
+       if (flags & O_CREAT) {                                  \
+               mode_t mode;                                    \
+               va_list ap;                                     \
+                                                               \
+               va_start(ap, flags);                            \
+               mode = va_arg(ap, mode_t);                      \
+               va_end(ap);                                     \
+               return _fn(p, flags, mode);                     \
+       }                                                       \
+                                                               \
+       return _fn(p, flags);                                   \
 }
 
-TS_EXPORT int stat(const char *path, struct stat *st)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static int (*_stat)(const char *path, struct stat *buf);
-
-       if (!get_rootpath(__func__))
-               return -1;
-
-       _stat = get_libc_func("stat");
-
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return -1;
-
-       return _stat(p, st);
+/* wrapper template for __xstat family */
+#define WRAP_VERSTAT(prefix, suffix)                       \
+TS_EXPORT int prefix ## stat ## suffix (int ver,           \
+                             const char *path,             \
+                             struct stat ## suffix *st)    \
+{ \
+       const char *p;                                      \
+       char buf[PATH_MAX * 2];                             \
+       static int (*_fn)(int ver, const char *path,        \
+                         struct stat ## suffix *);         \
+       _fn = get_libc_func(#prefix "stat" #suffix);        \
+                                                           \
+       if (!get_rootpath(__func__))                        \
+               return -1;                                  \
+       p = trap_path(path, buf);                           \
+       if (p == NULL)                                      \
+               return -1;                                  \
+                                                           \
+       return _fn(ver, p, st);                             \
 }
 
-#ifdef HAVE___XSTAT
-TS_EXPORT int __xstat(int ver, const char *path, struct stat *st)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static int (*_xstat)(int __ver, const char *__filename,
-                                               struct stat *__stat_buf);
-
-       if (!get_rootpath(__func__))
-               return -1;
-
-       _xstat = get_libc_func("__xstat");
-
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return -1;
-
-       return _xstat(ver, p, st);
-}
+WRAP_1ARG(DIR*, NULL, opendir);
+
+WRAP_2ARGS(FILE*, NULL, fopen, const char*);
+WRAP_2ARGS(int, -1, mkdir, mode_t);
+WRAP_2ARGS(int, -1, access, int);
+WRAP_2ARGS(int, -1, stat, struct stat*);
+WRAP_2ARGS(int, -1, lstat, struct stat*);
+#ifndef _FILE_OFFSET_BITS
+WRAP_2ARGS(int, -1, stat64, struct stat64*);
+WRAP_2ARGS(int, -1, lstat64, struct stat64*);
+WRAP_OPEN(64);
 #endif
 
-TS_EXPORT int access(const char *path, int mode)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static int (*_access)(const char *path, int mode);
-
-       if (!get_rootpath(__func__))
-               return -1;
-
-       _access = get_libc_func("access");
-
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return -1;
+WRAP_OPEN();
 
-       return _access(p, mode);
-}
-
-TS_EXPORT DIR *opendir(const char *path)
-{
-       const char *p;
-       char buf[PATH_MAX * 2];
-       static DIR* (*_opendir)(const char *path);
-
-       if (!get_rootpath(__func__))
-               return NULL;
-
-       _opendir = get_libc_func("opendir");
-
-       p = trap_path(path, buf);
-       if (p == NULL)
-               return NULL;
-
-       return (*_opendir)(p);
-}
+#ifdef HAVE___XSTAT
+WRAP_VERSTAT(__x,);
+WRAP_VERSTAT(__lx,);
+#ifndef _FILE_OFFSET_BITS
+WRAP_VERSTAT(__x,64);
+WRAP_VERSTAT(__lx,64);
+#endif
+#endif