Increase support of pathconf options.

Bug: 18206366
Change-Id: Ie770e49f5af3631eb9fbd2cd5174edf004c81e00
This commit is contained in:
Yabin Cui 2014-11-08 14:58:12 -08:00
parent e5cabca516
commit b5e581abfe
2 changed files with 28 additions and 3 deletions

View File

@ -100,12 +100,16 @@ static long __pathconf(const struct statfs& s, int name) {
case _PC_2_SYMLINKS:
return __2_symlinks(s);
case _PC_ALLOC_SIZE_MIN: /* fall through */
case _PC_REC_XFER_ALIGN:
return s.f_frsize;
case _PC_REC_MIN_XFER_SIZE:
return s.f_bsize;
#if 0
case _PC_ALLOC_SIZE_MIN:
case _PC_REC_INCR_XFER_SIZE:
case _PC_REC_MAX_XFER_SIZE:
case _PC_REC_MIN_XFER_SIZE:
case _PC_REC_XFER_ALIGN:
#endif
case _PC_SYMLINK_MAX:

View File

@ -23,6 +23,7 @@
#include <fcntl.h>
#include <limits.h>
#include <stdint.h>
#include <sys/param.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/utsname.h>
@ -502,3 +503,23 @@ TEST(unistd, gethostname) {
ASSERT_EQ(-1, gethostname(hostname, strlen(hostname)));
ASSERT_EQ(ENAMETOOLONG, errno);
}
TEST(unistd, pathconf_fpathconf) {
TemporaryFile tf;
long rc = 0L;
// As a file system's block size is always power of 2, the configure values
// for ALLOC and XFER should be power of 2 as well.
rc = pathconf(tf.filename, _PC_ALLOC_SIZE_MIN);
ASSERT_TRUE(rc > 0 && powerof2(rc));
rc = pathconf(tf.filename, _PC_REC_MIN_XFER_SIZE);
ASSERT_TRUE(rc > 0 && powerof2(rc));
rc = pathconf(tf.filename, _PC_REC_XFER_ALIGN);
ASSERT_TRUE(rc > 0 && powerof2(rc));
rc = fpathconf(tf.fd, _PC_ALLOC_SIZE_MIN);
ASSERT_TRUE(rc > 0 && powerof2(rc));
rc = fpathconf(tf.fd, _PC_REC_MIN_XFER_SIZE);
ASSERT_TRUE(rc > 0 && powerof2(rc));
rc = fpathconf(tf.fd, _PC_REC_XFER_ALIGN);
ASSERT_TRUE(rc > 0 && powerof2(rc));
}