From 64c217eb07ad168142e8e9ebdddc1ca811200fa2 Mon Sep 17 00:00:00 2001 From: Chao-Ying Fu Date: Fri, 17 Aug 2012 12:22:39 -0700 Subject: [PATCH] Add portable support for stuct statfs and two functions. Change-Id: I1e34428574a11bedb3a5a35a45dc519fcae3cd03 --- ndk/sources/android/libportable/Android.mk | 1 + .../android/libportable/arch-mips/statfs.c | 49 +++++++++++++++++ .../common/include/statfs_portable.h | 54 +++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 ndk/sources/android/libportable/arch-mips/statfs.c create mode 100644 ndk/sources/android/libportable/common/include/statfs_portable.h diff --git a/ndk/sources/android/libportable/Android.mk b/ndk/sources/android/libportable/Android.mk index 44b20a2d9..9c0272f41 100644 --- a/ndk/sources/android/libportable/Android.mk +++ b/ndk/sources/android/libportable/Android.mk @@ -33,6 +33,7 @@ libportable_arch_src_files += \ arch-mips/ioctl.c \ arch-mips/mmap.c \ arch-mips/stat.c \ + arch-mips/statfs.c \ arch-mips/open.c \ arch-mips/socket.c \ arch-mips/sockopt.c \ diff --git a/ndk/sources/android/libportable/arch-mips/statfs.c b/ndk/sources/android/libportable/arch-mips/statfs.c new file mode 100644 index 000000000..cd8b5afac --- /dev/null +++ b/ndk/sources/android/libportable/arch-mips/statfs.c @@ -0,0 +1,49 @@ +/* + * Copyright 2012, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +static inline void statfs_ntop(struct statfs *n_statfs, struct statfs_portable *p_statfs) +{ + memset(p_statfs, '\0', sizeof(struct statfs_portable)); + p_statfs->f_type = n_statfs->f_type; + p_statfs->f_bsize = n_statfs->f_bsize; + p_statfs->f_blocks = n_statfs->f_blocks; + p_statfs->f_bfree = n_statfs->f_bfree; + p_statfs->f_bavail = n_statfs->f_bavail; + p_statfs->f_files = n_statfs->f_files; + p_statfs->f_ffree = n_statfs->f_ffree; + p_statfs->f_fsid = n_statfs->f_fsid; + p_statfs->f_namelen = n_statfs->f_namelen; + p_statfs->f_frsize = n_statfs->f_frsize; +} + +int statfs_portable(const char* path, struct statfs_portable* stat) +{ + struct statfs mips_stat; + int ret = statfs(path, &mips_stat); + statfs_ntop(&mips_stat, stat); + return ret; +} + +int fstatfs_portable(int fd, struct statfs_portable* stat) +{ + struct statfs mips_stat; + int ret = fstatfs(fd, &mips_stat); + statfs_ntop(&mips_stat, stat); + return ret; +} diff --git a/ndk/sources/android/libportable/common/include/statfs_portable.h b/ndk/sources/android/libportable/common/include/statfs_portable.h new file mode 100644 index 000000000..23451ea8a --- /dev/null +++ b/ndk/sources/android/libportable/common/include/statfs_portable.h @@ -0,0 +1,54 @@ +/* + * Copyright 2012, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _STATFS_PORTABLE_H_ +#define _STATFS_PORTABLE_H_ + +#include + +/* It's easy to change kernel to support statfs */ +struct statfs_portable { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + __kernel_fsid_t f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_spare[5]; +}; + +/* +The MIPS Version is +struct statfs { + uint32_t f_type; + uint32_t f_bsize; + uint32_t f_frsize; + uint32_t __pad; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_files; + uint64_t f_ffree; + uint64_t f_bavail; + __kernel_fsid_t f_fsid; + uint32_t f_namelen; + uint32_t f_spare[6]; +}; +*/ +#endif /* _STATFS_PORTABLE_H_ */