The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / uclibc / 0.9.33.2 / 0034-statfs-support-f_frsize.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/uclibc/0.9.33.2/0034-statfs-support-f_frsize.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/uclibc/0.9.33.2/0034-statfs-support-f_frsize.patch
new file mode 100644 (file)
index 0000000..102c5e8
--- /dev/null
@@ -0,0 +1,189 @@
+From 479f8407c4822d2b872afb8bb14e5ab596714744 Mon Sep 17 00:00:00 2001
+From: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
+Date: Thu, 17 Jan 2013 22:44:00 +0100
+Subject: [PATCH] statfs: support f_frsize
+
+closes bugzilla #5834
+
+Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
+---
+ libc/misc/statfs/fstatfs64.c        |    3 +++
+ libc/misc/statfs/internal_statvfs.c |    8 ++++++--
+ libc/misc/statfs/statfs64.c         |    3 +++
+ test/.gitignore                     |    3 +++
+ test/misc/Makefile.in               |    6 ++++++
+ test/misc/tst-statfs.c              |   33 +++++++++++++++++++++++++++++++++
+ test/misc/tst-statvfs.c             |   28 ++++++++++++++++++++++++++++
+ 7 files changed, 82 insertions(+), 2 deletions(-)
+ create mode 100644 test/misc/tst-statfs.c
+ create mode 100644 test/misc/tst-statvfs.c
+
+diff --git a/libc/misc/statfs/fstatfs64.c b/libc/misc/statfs/fstatfs64.c
+index 27bb8d6..42df1ae 100644
+--- a/libc/misc/statfs/fstatfs64.c
++++ b/libc/misc/statfs/fstatfs64.c
+@@ -43,6 +43,9 @@ int fstatfs64 (int fd, struct statfs64 *buf)
+     buf->f_files = buf32.f_files;
+     buf->f_ffree = buf32.f_ffree;
+     buf->f_fsid = buf32.f_fsid;
++#ifdef _STATFS_F_FRSIZE
++    buf->f_frsize = buf32.f_frsize;
++#endif
+     buf->f_namelen = buf32.f_namelen;
+     memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare));
+diff --git a/libc/misc/statfs/internal_statvfs.c b/libc/misc/statfs/internal_statvfs.c
+index 6075e9c..c1862b5 100644
+--- a/libc/misc/statfs/internal_statvfs.c
++++ b/libc/misc/statfs/internal_statvfs.c
+@@ -19,8 +19,12 @@
+   /* Now fill in the fields we have information for.  */
+   buf->f_bsize = fsbuf.f_bsize;
+-  /* Linux does not support f_frsize, so set it to the full block size.  */
++#ifdef _STATFS_F_FRSIZE
++  buf->f_frsize = fsbuf.f_frsize;
++#else
++  /* No support for f_frsize so set it to the full block size.  */
+   buf->f_frsize = fsbuf.f_bsize;
++#endif
+   buf->f_blocks = fsbuf.f_blocks;
+   buf->f_bfree = fsbuf.f_bfree;
+   buf->f_bavail = fsbuf.f_bavail;
+@@ -39,7 +43,7 @@
+   buf->__f_unused = 0;
+ #endif
+   buf->f_namemax = fsbuf.f_namelen;
+-  memset (buf->__f_spare, '\0', 6 * sizeof (int));
++  memset (buf->__f_spare, '\0', sizeof(buf->__f_spare));
+   /* What remains to do is to fill the fields f_favail and f_flag.  */
+diff --git a/libc/misc/statfs/statfs64.c b/libc/misc/statfs/statfs64.c
+index 0cc8595..35329bd 100644
+--- a/libc/misc/statfs/statfs64.c
++++ b/libc/misc/statfs/statfs64.c
+@@ -42,6 +42,9 @@ int statfs64 (const char *file, struct statfs64 *buf)
+     buf->f_ffree = buf32.f_ffree;
+     buf->f_fsid = buf32.f_fsid;
+     buf->f_namelen = buf32.f_namelen;
++#ifdef _STATFS_F_FRSIZE
++    buf->f_frsize = buf32.f_frsize;
++#endif
+     memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare));
+     return 0;
+diff --git a/test/.gitignore b/test/.gitignore
+index c892816..7234c48 100644
+--- a/test/.gitignore
++++ b/test/.gitignore
+@@ -148,6 +148,8 @@ misc/sem
+ misc/stdarg
+ misc/tst-scandir
+ misc/tst-seekdir
++misc/tst-statfs
++misc/tst-statvfs
+ misc/tst-utmp
+ mmap/mmap
+ mmap/mmap2
+@@ -254,6 +256,7 @@ stdio/64bit
+ stdio/fclose-loop
+ stdlib/ptytest
+ stdlib/qsort
++stdlib/testarc4random
+ stdlib/testatexit
+ stdlib/test-canon
+ stdlib/test-canon2
+diff --git a/test/misc/Makefile.in b/test/misc/Makefile.in
+index 2263211..9b74d22 100644
+--- a/test/misc/Makefile.in
++++ b/test/misc/Makefile.in
+@@ -9,6 +9,12 @@ CFLAGS_dirent64 := -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS
+ DODIFF_dirent    := 1
+ DODIFF_dirent64  := 1
++DODIFF_tst-statfs := 1
++DODIFF_tst-statvfs := 1
+ OPTS_bug-glob1   := $(PWD)
+ OPTS_tst-fnmatch := < tst-fnmatch.input
++
++MNTENTS = $(shell mount | while read dev on mp rest; do echo $$mp; done)
++OPTS_tst-statfs := $(MNTENTS)
++OPTS_tst-statvfs := $(MNTENTS)
+diff --git a/test/misc/tst-statfs.c b/test/misc/tst-statfs.c
+new file mode 100644
+index 0000000..44ab3aa
+--- /dev/null
++++ b/test/misc/tst-statfs.c
+@@ -0,0 +1,33 @@
++#define _FILE_OFFSET_BITS 64
++
++#include <sys/vfs.h>
++#include <errno.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++int
++main(int argc, char* argv[])
++{
++      struct statfs s;
++      int ret = 0, i;
++
++      for (i = 1; i < argc; i++) {
++              if (statfs(argv[i], &s) != 0) {
++                      fprintf(stderr, "%s: %s: statfs failed. %s\n",
++                              *argv, argv[i], strerror(errno));
++                      exit(EXIT_FAILURE);
++              }
++              ++ret;
++              printf("statfs %s:\n\tblocks=%lld\n\tblkfree=%lld\n\tbsize=%d\n",
++                      argv[i], s.f_blocks, s.f_bfree, s.f_bsize);
++#ifdef _STATFS_F_FRSIZE
++              printf("\tfrsize=%lld\n", s.f_frsize);
++#elif defined __mips__
++              printf("\tfrsize=mips, unsupported?\n");
++#else
++# error no _STATFS_F_FRSIZE
++#endif
++      }
++      exit(ret ? EXIT_SUCCESS : EXIT_FAILURE);
++}
+diff --git a/test/misc/tst-statvfs.c b/test/misc/tst-statvfs.c
+new file mode 100644
+index 0000000..c1e8fde
+--- /dev/null
++++ b/test/misc/tst-statvfs.c
+@@ -0,0 +1,28 @@
++#define _FILE_OFFSET_BITS 64
++
++#include <sys/statvfs.h>
++#include <errno.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++int
++main(int argc, char* argv[])
++{
++      struct statvfs s;
++      int i;
++
++      for (i = 1; i < argc; i++) {
++              if (statvfs(argv[i], &s) != 0) {
++                      fprintf(stderr, "%s: %s: statvfs failed. %s\n",
++                              *argv, argv[i], strerror(errno));
++                      exit(EXIT_FAILURE);
++              }
++              printf("statvfs %s:\n\tblocks=%lld\n\tblkfree=%lld\n\tbsize=%d\n",
++                      argv[i], s.f_blocks, s.f_bfree, s.f_bsize);
++#if 1 // def _STATFS_F_FRSIZE
++              printf("\tfrsize=%lld\n", s.f_frsize);
++#endif
++      }
++      exit(EXIT_SUCCESS);
++}
+-- 
+1.7.10.4
+