From 01e42b24c9b56b3ca88a2cf563a8c695d5a74534 Mon Sep 17 00:00:00 2001 From: Mohamad Ayyash Date: Wed, 1 Apr 2015 19:25:28 -0700 Subject: Introduce squashfs-utils that includes helper functions For example: extracting filesystem size from superblock Change-Id: I97c79d80ebb767a977c8ca27f7e0877b5ead8fdc Signed-off-by: Mohamad Ayyash --- squashfs_utils/Android.mk | 7 +++++ squashfs_utils/squashfs_utils.c | 63 +++++++++++++++++++++++++++++++++++++++++ squashfs_utils/squashfs_utils.h | 39 +++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 squashfs_utils/squashfs_utils.c create mode 100644 squashfs_utils/squashfs_utils.h diff --git a/squashfs_utils/Android.mk b/squashfs_utils/Android.mk index 7808ec0d..c3d2f2d1 100644 --- a/squashfs_utils/Android.mk +++ b/squashfs_utils/Android.mk @@ -2,6 +2,13 @@ LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) +LOCAL_SRC_FILES := squashfs_utils.c +LOCAL_STATIC_LIBRARIES := libcutils +LOCAL_C_INCLUDES := external/squashfs-tools/squashfs-tools +LOCAL_MODULE := libsquashfs_utils +include $(BUILD_STATIC_LIBRARY) + ifeq ($(HOST_OS),linux) include $(CLEAR_VARS) diff --git a/squashfs_utils/squashfs_utils.c b/squashfs_utils/squashfs_utils.c new file mode 100644 index 00000000..128a3ef8 --- /dev/null +++ b/squashfs_utils/squashfs_utils.c @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2015 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 "squashfs_utils.h" + +#include +#include +#include +#include +#include +#include + +#include "squashfs_fs.h" + +#define ERROR(x...) KLOG_ERROR("squashfs_utils", x) + +int squashfs_parse_sb(char *blk_device, struct squashfs_info *info) { + int ret = 0; + struct squashfs_super_block sb; + int data_device; + + data_device = TEMP_FAILURE_RETRY(open(blk_device, O_RDONLY | O_CLOEXEC)); + if (data_device == -1) { + ERROR("Error opening block device (%s)\n", strerror(errno)); + return -1; + } + + if (TEMP_FAILURE_RETRY(read(data_device, &sb, sizeof(sb))) + != sizeof(sb)) { + ERROR("Error reading superblock\n"); + ret = -1; + goto cleanup; + } + if (sb.s_magic != SQUASHFS_MAGIC) { + ERROR("Not a valid squashfs filesystem\n"); + ret = -1; + goto cleanup; + } + + info->block_size = sb.block_size; + info->inodes = sb.inodes; + info->bytes_used = sb.bytes_used; + // by default mksquashfs pads the filesystem to 4K blocks + info->bytes_used_4K_padded = + sb.bytes_used + (4096 - (sb.bytes_used & (4096 - 1))); + +cleanup: + TEMP_FAILURE_RETRY(close(data_device)); + return ret; +} diff --git a/squashfs_utils/squashfs_utils.h b/squashfs_utils/squashfs_utils.h new file mode 100644 index 00000000..ccad32dd --- /dev/null +++ b/squashfs_utils/squashfs_utils.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2015 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 _SQUASHFS_UTILS_H_ +#define _SQUASHFS_UTILS_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct squashfs_info { + uint32_t block_size; + uint32_t inodes; + uint64_t bytes_used; + uint64_t bytes_used_4K_padded; +}; + +int squashfs_parse_sb(char *blk_device, struct squashfs_info *info); + +#ifdef __cplusplus +} +#endif + +#endif -- cgit v1.2.3