]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
libe2p: add missing f[gs]etproject.c files
authorTheodore Ts'o <tytso@mit.edu>
Sat, 5 Mar 2016 16:05:18 +0000 (11:05 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 7 Mar 2016 01:08:52 +0000 (20:08 -0500)
Li Xi's patch was missing the sources for fgetproject.c and
fsetproject.c.  I've created replacement files which will service the
purpose.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
lib/e2p/fgetproject.c [new file with mode: 0644]
lib/e2p/fsetproject.c [new file with mode: 0644]
lib/e2p/project.h [new file with mode: 0644]

diff --git a/lib/e2p/fgetproject.c b/lib/e2p/fgetproject.c
new file mode 100644 (file)
index 0000000..12320b5
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * fgetproject.c --- get project id
+ *
+ * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
+ * %End-Header%
+ */
+
+#ifndef _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE
+#endif
+#ifndef _LARGEFILE64_SOURCE
+#define _LARGEFILE64_SOURCE
+#endif
+
+#include "config.h"
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#if HAVE_EXT2_IOCTLS
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include "project.h"
+#endif
+
+#include "e2p.h"
+
+#ifdef O_LARGEFILE
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
+#else
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
+#endif
+
+int fgetproject(const char *name, unsigned long *project)
+{
+#ifndef FS_IOC_FSGETXATTR
+       errno = EOPNOTSUPP;
+       return -1;
+#else
+       int fd, r, save_errno = 0;
+       struct fsxattr fsx;
+
+       fd = open (name, OPEN_FLAGS);
+       if (fd == -1)
+               return -1;
+       r = ioctl (fd, FS_IOC_FSGETXATTR, &fsx);
+       if (r == 0)
+               *project = fsx.fsx_projid;
+       save_errno = errno;
+       close (fd);
+       if (save_errno)
+               errno = save_errno;
+       return r;
+#endif
+}
diff --git a/lib/e2p/fsetproject.c b/lib/e2p/fsetproject.c
new file mode 100644 (file)
index 0000000..5df7090
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * fgetproject.c --- get project id
+ *
+ * Copyright (C) 1999  Theodore Ts'o <tytso@mit.edu>
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
+ * %End-Header%
+ */
+
+#ifndef _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE
+#endif
+#ifndef _LARGEFILE64_SOURCE
+#define _LARGEFILE64_SOURCE
+#endif
+
+#include "config.h"
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#if HAVE_EXT2_IOCTLS
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include "project.h"
+#endif
+
+#include "e2p.h"
+
+#ifdef O_LARGEFILE
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
+#else
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
+#endif
+
+int fsetproject(const char *name, unsigned long project)
+{
+#ifndef FS_IOC_FSGETXATTR
+       errno = EOPNOTSUPP;
+       return -1;
+#else
+       int fd, r, save_errno = 0;
+       struct fsxattr fsx;
+
+       fd = open (name, OPEN_FLAGS);
+       if (fd == -1)
+               return -1;
+       r = ioctl (fd, FS_IOC_FSGETXATTR, &fsx);
+       if (r == -1) {
+               save_errno = errno;
+               goto errout;
+       }
+       fsx.fsx_projid = project;
+       r = ioctl (fd, FS_IOC_FSSETXATTR, &fsx);
+       if (r == -1)
+               save_errno = errno;
+errout:
+       close (fd);
+       if (save_errno)
+               errno = save_errno;
+       return r;
+#endif
+}
diff --git a/lib/e2p/project.h b/lib/e2p/project.h
new file mode 100644 (file)
index 0000000..253425a
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * project.h
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
+ * %End-Header%
+ */
+
+#include <ext2fs/ext2_fs.h>
+
+#if defined(__linux__) && !defined(FS_IOC_FSGETXATTR)
+#define FS_IOC_FSGETXATTR              _IOR('X', 31, struct fsxattr)
+#define FS_IOC_FSSETXATTR              _IOW('X', 32, struct fsxattr)
+
+/*
+ * Structure for FS_IOC_FSGETXATTR and FS_IOC_FSSETXATTR.
+ */
+struct fsxattr {
+       __u32           fsx_xflags;     /* xflags field value (get/set) */
+       __u32           fsx_extsize;    /* extsize field value (get/set)*/
+       __u32           fsx_nextents;   /* nextents field value (get)   */
+       __u32           fsx_projid;     /* project identifier (get/set) */
+       unsigned char   fsx_pad[12];
+};
+#endif
+