• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/fstools/libblkid-tiny/squashfs.c

  1 /*
  2  * Copyright (C) 2008 Karel Zak <kzak@redhat.com>
  3  *
  4  * Inspired by libvolume_id by
  5  *     Kay Sievers <kay.sievers@vrfy.org>
  6  *
  7  * This file may be redistributed under the terms of the
  8  * GNU Lesser General Public License.
  9  */
 10 #include <stdio.h>
 11 #include <stdlib.h>
 12 #include <unistd.h>
 13 #include <string.h>
 14 #include <stdint.h>
 15 
 16 #include "bitops.h"     /* swab16() */
 17 #include "superblocks.h"
 18 
 19 #include <libubox/md5.h>
 20 
 21 struct squashfs_super_block {
 22         uint32_t s_magic;
 23         uint32_t inodes;
 24         uint32_t mkfs_time;
 25         uint32_t block_size;
 26         uint32_t fragments;
 27         uint16_t compression;
 28         uint16_t block_log;
 29         uint16_t flags;
 30         uint16_t no_ids;
 31         uint16_t s_major;
 32         uint16_t s_minor;
 33         uint64_t root_inode;
 34         uint64_t bytes_used;
 35         uint64_t id_table_start;
 36         uint64_t xattr_id_table_start;
 37         uint64_t inode_table_start;
 38         uint64_t directory_table_start;
 39         uint64_t fragment_table_start;
 40         uint64_t lookup_table_start;
 41 } __attribute__((packed));
 42 
 43 static int probe_squashfs(blkid_probe pr, const struct blkid_idmag *mag)
 44 {
 45         md5_ctx_t ctx = { 0 };
 46         uint32_t md5[4];
 47         struct squashfs_super_block *sq;
 48 
 49         sq = blkid_probe_get_sb(pr, mag, struct squashfs_super_block);
 50         if (!sq)
 51                 return -1;
 52 
 53         if (strcmp(mag->magic, "sqsh") == 0 ||
 54             strcmp(mag->magic, "qshs") == 0)
 55                 blkid_probe_sprintf_version(pr, "%u.%u",
 56                                 be16_to_cpu(sq->s_major),
 57                                 be16_to_cpu(sq->s_minor));
 58         else
 59                 blkid_probe_sprintf_version(pr, "%u.%u",
 60                                 le16_to_cpu(sq->s_major),
 61                                 le16_to_cpu(sq->s_minor));
 62         md5_begin(&ctx);
 63         md5_hash(sq, sizeof(*sq), &ctx);
 64         md5_end(&md5, &ctx);
 65         blkid_probe_sprintf_uuid(pr, NULL, 4, "%08x-%08x-%08x-%08x",
 66                         md5[3], md5[2], md5[1], md5[0]);
 67         return 0;
 68 }
 69 
 70 const struct blkid_idinfo squashfs_idinfo =
 71 {
 72         .name           = "squashfs",
 73         .usage          = BLKID_USAGE_FILESYSTEM,
 74         .probefunc      = probe_squashfs,
 75         .magics         =
 76         {
 77                 { .magic = "sqsh", .len = 4 }, /* BE legacy squashfs */
 78                 { .magic = "hsqs", .len = 4 }, /* LE / v4 squashfs */
 79 
 80                 /* LZMA version */
 81                 { .magic = "qshs", .len = 4 }, /* BE legacy squashfs with LZMA */
 82                 { .magic = "shsq", .len = 4 }, /* LE / v4 squashfs with LZMA */
 83                 { NULL }
 84         }
 85 };
 86 
 87 
 88 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt