~mmach/netext73/busybox

« back to all changes in this revision

Viewing changes to util-linux/volume_id/xfs.c

  • Committer: mmach
  • Date: 2021-04-14 13:54:24 UTC
  • Revision ID: netbit73@gmail.com-20210414135424-8x3fxf716zs4wflb
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * volume_id - reads filesystem label and uuid
 
3
 *
 
4
 * Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org>
 
5
 *
 
6
 *      This library is free software; you can redistribute it and/or
 
7
 *      modify it under the terms of the GNU Lesser General Public
 
8
 *      License as published by the Free Software Foundation; either
 
9
 *      version 2.1 of the License, or (at your option) any later version.
 
10
 *
 
11
 *      This library is distributed in the hope that it will be useful,
 
12
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 
14
 *      Lesser General Public License for more details.
 
15
 *
 
16
 *      You should have received a copy of the GNU Lesser General Public
 
17
 *      License along with this library; if not, write to the Free Software
 
18
 *      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
19
 */
 
20
//config:config FEATURE_VOLUMEID_XFS
 
21
//config:       bool "xfs filesystem"
 
22
//config:       default y
 
23
//config:       depends on VOLUMEID
 
24
 
 
25
//kbuild:lib-$(CONFIG_FEATURE_VOLUMEID_XFS) += xfs.o
 
26
 
 
27
#include "volume_id_internal.h"
 
28
 
 
29
struct xfs_super_block {
 
30
        uint8_t magic[4];
 
31
        uint32_t        blocksize;
 
32
        uint64_t        dblocks;
 
33
        uint64_t        rblocks;
 
34
        uint32_t        dummy1[2];
 
35
        uint8_t uuid[16];
 
36
        uint32_t        dummy2[15];
 
37
        uint8_t fname[12];
 
38
        uint32_t        dummy3[2];
 
39
        uint64_t        icount;
 
40
        uint64_t        ifree;
 
41
        uint64_t        fdblocks;
 
42
} PACKED;
 
43
 
 
44
int FAST_FUNC volume_id_probe_xfs(struct volume_id *id /*,uint64_t off*/)
 
45
{
 
46
#define off ((uint64_t)0)
 
47
        struct xfs_super_block *xs;
 
48
 
 
49
        dbg("probing at offset 0x%llx", (unsigned long long) off);
 
50
 
 
51
        xs = volume_id_get_buffer(id, off, 0x200);
 
52
        if (xs == NULL)
 
53
                return -1;
 
54
 
 
55
        if (memcmp(xs->magic, "XFSB", 4) != 0)
 
56
                return -1;
 
57
 
 
58
//      volume_id_set_label_raw(id, xs->fname, 12);
 
59
        volume_id_set_label_string(id, xs->fname, 12);
 
60
        volume_id_set_uuid(id, xs->uuid, UUID_DCE);
 
61
 
 
62
//      volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
 
63
        IF_FEATURE_BLKID_TYPE(id->type = "xfs";)
 
64
 
 
65
        return 0;
 
66
}