Files
s390-tools/cmsfs-fuse/edf.h
Michael Holzheu b627b8d8e1 Initial s390-tools-2.0.0 import
This commit is based on the s390-tools-1.39.0 version.

Changes on top of s390-tools-1.39.0:

 - Add MIT license to all source files
 - Add LICENSE file
 - Transform REAMDE to README.md (markdown)
 - Add AUTHORS.md file
 - Add CONTRIBUTING.md file
 - Move changelog from README to CHANGELOG.md file

Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
2017-08-21 10:55:40 +02:00

126 lines
2.5 KiB
C

/*
* cmsfs-fuse - CMS EDF filesystem support for Linux
*
* EDF and label structures
*
* Copyright IBM Corp. 2010, 2017
*
* s390-tools is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#ifndef _EDF_H
#define _EDF_H
#include "helper.h"
/*
* File status table entry
*/
struct fst_entry {
char name[8];
char type[8];
char res1[8];
short int mode;
char res2[4];
char record_format;
char flag;
int record_len;
char res3[4];
unsigned int fop;
/* number of data blocks (not incl. pointer blocks) */
int nr_blocks;
int nr_records;
char levels;
char ptr_size;
char date[6];
char res4[4];
};
struct cms_label {
char id[6];
char user_id[6];
unsigned int blocksize;
unsigned int dop;
unsigned int f_cylinders;
unsigned int max_cylinders;
unsigned int total_blocks;
unsigned int used_blocks;
unsigned int fst_entry_size;
unsigned int fst_per_block;
char date[6];
unsigned int res1[3];
char res2[8];
};
#define RECORD_LEN_VARIABLE 0xe5
#define RECORD_LEN_FIXED 0xc6
/* TODO: correct for fixed? */
#define MAX_RECORD_LEN 0xffff
#define FST_ENTRY_SIZE sizeof(struct fst_entry)
#define FST_ENTRY_DIR_NAME 0x0000000100000000ULL
#define FST_ENTRY_DIR_TYPE 0xc4c9d9c5c3e3d6d9ULL /* 'DIRECTOR' */
#define FST_ENTRY_ALLOC_NAME 0x0000000200000000ULL
#define FST_ENTRY_ALLOC_TYPE 0xc1d3d3d6c3d4c1d7ULL /* 'ALLOCMAP' */
#define FST_FLAG_CENTURY 0x0008
#define FST_FOP_OFFSET 0x28
#define FST_LEVEL_OFFSET 0x34
#define VAR_RECORD_HEADER_SIZE 0x2
#define VAR_RECORD_SPANNED 0xffffffff
#define PTR_SIZE (sizeof(struct fixed_ptr))
#define VPTR_SIZE (sizeof(struct var_ptr))
struct fixed_ptr {
unsigned int next;
};
struct var_ptr {
unsigned int next;
int hi_record_nr;
unsigned int disp;
};
static inline int is_directory(const char *name,
const char *type)
{
if ((*(unsigned long long *) name) != FST_ENTRY_DIR_NAME)
return 0;
if ((*(unsigned long long *) type) != FST_ENTRY_DIR_TYPE)
return 0;
return 1;
}
static inline int is_allocmap(const char *name,
const char *type)
{
if ((*(unsigned long long *) name) != FST_ENTRY_ALLOC_NAME)
return 0;
if ((*(unsigned long long *) type) != FST_ENTRY_ALLOC_TYPE)
return 0;
return 1;
}
static inline int is_file(void *name, void *type)
{
if ((*(unsigned long long *) name) == 0ULL)
return 0;
/* Assumption: type = 0 is not legal */
if ((*(unsigned long long *) type) == 0ULL)
return 0;
return 1;
}
#endif