File indexing completed on 2025-05-11 08:24:31
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031
0032 #include <sys/statvfs.h>
0033 #include <string.h>
0034 #include <fcntl.h>
0035 #include <unistd.h>
0036
0037 #include "fstest.h"
0038 #include "fs_config.h"
0039 #include <tmacros.h>
0040
0041 const char rtems_test_name[] = "FSSTATVFS " FILESYSTEM;
0042 const RTEMS_TEST_STATE rtems_test_state = TEST_STATE;
0043
0044 static void statvfs_validate(struct statvfs *stat)
0045 {
0046 rtems_test_assert(stat->f_bsize > 0);
0047 rtems_test_assert(stat->f_frsize > 0);
0048 rtems_test_assert(stat->f_blocks > 0);
0049 rtems_test_assert(stat->f_bfree <= stat->f_blocks);
0050 rtems_test_assert(stat->f_bavail <= stat->f_blocks);
0051 rtems_test_assert(stat->f_ffree <= stat->f_files);
0052 rtems_test_assert(stat->f_favail <= stat->f_files);
0053 rtems_test_assert(stat->f_namemax > 0);
0054 }
0055
0056 static void statvfs_test01(void)
0057 {
0058 struct statvfs statbuf1, statbuf2;
0059 int status;
0060 int fd;
0061 ssize_t n;
0062 const char *databuf = "STATVFS";
0063 int datalen = strlen(databuf);
0064 const char *filename = __func__;
0065
0066
0067
0068
0069 status = statvfs("/", &statbuf1);
0070 rtems_test_assert(status == 0);
0071 statvfs_validate(&statbuf1);
0072
0073
0074
0075
0076 fd = open(filename, O_CREAT | O_WRONLY, 0775);
0077 rtems_test_assert(fd >= 0);
0078 n = write(fd, databuf, datalen);
0079 rtems_test_assert(n == datalen);
0080 status = close(fd);
0081 rtems_test_assert(status == 0);
0082
0083
0084
0085
0086 status = statvfs("/", &statbuf2);
0087 rtems_test_assert(status == 0);
0088 statvfs_validate(&statbuf2);
0089
0090
0091
0092
0093 rtems_test_assert(statbuf1.f_bsize == statbuf2.f_bsize);
0094 rtems_test_assert(statbuf1.f_frsize == statbuf2.f_frsize);
0095 rtems_test_assert(statbuf1.f_blocks == statbuf2.f_blocks);
0096 rtems_test_assert(statbuf1.f_bfree >= statbuf2.f_bfree);
0097 rtems_test_assert(statbuf1.f_bavail >= statbuf2.f_bavail);
0098 rtems_test_assert(statbuf1.f_ffree >= statbuf2.f_ffree);
0099 rtems_test_assert(statbuf1.f_favail >= statbuf2.f_favail);
0100 rtems_test_assert(statbuf1.f_namemax == statbuf2.f_namemax);
0101 }
0102
0103
0104
0105
0106
0107 void test(void)
0108 {
0109 statvfs_test01();
0110 }