busybox/util-linux/volume_id/squashfs.c
Denys Vlasenko f560422fa0 Big cleanup in config help and description
Redundant help texts (one which only repeats the description)
are deleted.

Descriptions and help texts are trimmed.

Some config options are moved, even across menus.

No config option _names_ are changed.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2017-01-10 14:58:54 +01:00

60 lines
1.6 KiB
C

/*
* volume_id - reads filesystem label and uuid
*
* Copyright (C) 2012 S-G Bergh <sgb@systemasis.org>
*
* Licensed under GPLv2, see file LICENSE in this source tree.
*/
//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_SQUASHFS) += squashfs.o
//config:config FEATURE_VOLUMEID_SQUASHFS
//config: bool "SquashFS filesystem"
//config: default y
//config: depends on VOLUMEID && FEATURE_BLKID_TYPE
//config: help
//config: Squashfs is a compressed read-only filesystem for Linux. Squashfs is
//config: intended for general read-only filesystem use and in constrained block
//config: device/memory systems (e.g. embedded systems) where low overhead is
//config: needed.
#include "volume_id_internal.h"
struct squashfs_superblock {
uint32_t magic;
/*
uint32_t dummy[6];
uint16_t major;
uint16_t minor;
*/
} PACKED;
int FAST_FUNC volume_id_probe_squashfs(struct volume_id *id /*,uint64_t off*/)
{
#define off ((uint64_t)0)
struct squashfs_superblock *sb;
dbg("SquashFS: probing at offset 0x%llx", (unsigned long long) off);
sb = volume_id_get_buffer(id, off, 0x200);
if (!sb)
return -1;
// Old SquashFS (pre 4.0) can be both big and little endian, so test for both.
// Likewise, it is commonly used in firwmare with some non-standard signatures.
#define pack(a,b,c,d) ( (uint32_t)((a * 256 + b) * 256 + c) * 256 + d )
#define SIG1 pack('s','q','s','h')
#define SIG2 pack('h','s','q','s')
#define SIG3 pack('s','h','s','q')
#define SIG4 pack('q','s','h','s')
if (sb->magic == SIG1
|| sb->magic == SIG2
|| sb->magic == SIG3
|| sb->magic == SIG4
) {
IF_FEATURE_BLKID_TYPE(id->type = "squashfs";)
return 0;
}
return -1;
}