1/* 2 * volume_id - reads filesystem label and uuid 3 * 4 * Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation version 2 of the License. 9 */ 10 11#ifndef _GNU_SOURCE 12#define _GNU_SOURCE 1 13#endif 14 15#ifdef HAVE_CONFIG_H 16# include <config.h> 17#endif 18 19#include <stdio.h> 20#include <stdlib.h> 21#include <unistd.h> 22#include <string.h> 23#include <errno.h> 24#include <ctype.h> 25 26#include "libvolume_id.h" 27#include "util.h" 28 29struct jfs_super_block { 30 uint8_t magic[4]; 31 uint32_t version; 32 uint64_t size; 33 uint32_t bsize; 34 uint32_t dummy1; 35 uint32_t pbsize; 36 uint32_t dummy2[27]; 37 uint8_t uuid[16]; 38 uint8_t label[16]; 39 uint8_t loguuid[16]; 40} PACKED; 41 42#define JFS_SUPERBLOCK_OFFSET 0x8000 43 44int volume_id_probe_jfs(struct volume_id *id, uint64_t off, uint64_t size) 45{ 46 struct jfs_super_block *js; 47 48 info("probing at offset 0x%llx", (unsigned long long) off); 49 50 js = (struct jfs_super_block *) volume_id_get_buffer(id, off + JFS_SUPERBLOCK_OFFSET, 0x200); 51 if (js == NULL) 52 return -1; 53 54 if (memcmp(js->magic, "JFS1", 4) != 0) 55 return -1; 56 57 volume_id_set_label_raw(id, js->label, 16); 58 volume_id_set_label_string(id, js->label, 16); 59 volume_id_set_uuid(id, js->uuid, 0, UUID_DCE); 60 61 volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); 62 id->type = "jfs"; 63 64 return 0; 65} 66