Files
s390-tools/cmsfs-fuse/cmsfs-fuse.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

133 lines
2.9 KiB
C

/*
* cmsfs-fuse - CMS EDF filesystem support for Linux
*
* Data 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 _CMSFS_H
#define _CMSFS_H
#include <iconv.h>
#include <search.h>
#include "lib/util_list.h"
#define COMP "cmsfs-fuse: "
extern struct cmsfs cmsfs;
/* conversion between absolute and relative addresses */
#define ABS(x) ((off_t) (x - 1) * cmsfs.blksize)
#define REL(x) ((x / cmsfs.blksize) + 1)
struct fcache_entry {
/* filename used as hash key */
char name[18];
/* location of fst entry */
off_t fst_addr;
/* filename string address */
char *str;
};
enum cmsfs_mode {
BINARY_MODE,
TEXT_MODE,
TYPE_MODE,
};
/* the per device global struture */
struct cmsfs {
/* name of the block device, e.g. /dev/dasde */
const char *device;
/* global file descriptor of the underlying block device */
int fd;
/* start of mmap of the whole block device */
char *map;
/* size of the disk */
off_t size;
/* formatted blocksize */
int blksize;
/* number of 512 byte blocks per block */
int nr_blocks_512;
/* device is read only */
int readonly;
/* access permission for other users */
int allow_other;
/* offset to label */
off_t label;
/* offset to file directory root FST */
off_t fdir;
/* offset to allocation map */
off_t amap;
/* depth of directories */
int dir_levels;
/* depth of allocation maps */
int amap_levels;
/* files count on the device */
int files;
/* conversion mode */
enum cmsfs_mode mode;
/* iconv codepage options */
const char *codepage_from;
const char *codepage_to;
iconv_t iconv_from;
iconv_t iconv_to;
/* disk stats */
int total_blocks;
int used_blocks;
/* blocks reserved for outstanding meta data */
int reserved_blocks;
/* constants */
int fixed_ptrs_per_block;
int var_ptrs_per_block;
int bits_per_data_block;
int bits_per_ptr_block;
int data_block_mask;
off_t amap_bytes_per_block;
/* file cache */
struct fcache_entry *fcache;
int fcache_used;
int fcache_max;
struct hsearch_data htab;
};
#define MAX_TYPE_LEN 9
struct filetype {
char name[MAX_TYPE_LEN];
struct util_list_node list;
};
#define NULL_BLOCK 0
#define VAR_FILE_END 1
#define PTRS_PER_BLOCK (cmsfs.fixed_ptrs_per_block)
#define VPTRS_PER_BLOCK (cmsfs.var_ptrs_per_block)
#define DATA_BLOCK_MASK (cmsfs.data_block_mask)
#define BITS_PER_DATA_BLOCK (cmsfs.bits_per_data_block)
#define BYTES_PER_BLOCK (cmsfs.amap_bytes_per_block)
extern int get_device_info(struct cmsfs *cmsfs);
extern int scan_conf_file(struct util_list *list);
extern int is_edf_char(int c);
#ifndef _CMSFS_FSCK
int _read(void *, size_t, off_t);
int _write(const void *, size_t, off_t);
int _zero(off_t, size_t);
off_t get_fixed_pointer(off_t);
off_t get_free_block(void);
off_t get_zero_block(void);
void free_block(off_t);
#endif
#endif