1*9663SMark.Logan@Sun.COM /* 2*9663SMark.Logan@Sun.COM * runlist.h - Exports for runlist handling. Part of the Linux-NTFS project. 3*9663SMark.Logan@Sun.COM * 4*9663SMark.Logan@Sun.COM * Copyright (c) 2002 Anton Altaparmakov 5*9663SMark.Logan@Sun.COM * Copyright (c) 2002 Richard Russon 6*9663SMark.Logan@Sun.COM * 7*9663SMark.Logan@Sun.COM * This program/include file is free software; you can redistribute it and/or 8*9663SMark.Logan@Sun.COM * modify it under the terms of the GNU General Public License as published 9*9663SMark.Logan@Sun.COM * by the Free Software Foundation; either version 2 of the License, or 10*9663SMark.Logan@Sun.COM * (at your option) any later version. 11*9663SMark.Logan@Sun.COM * 12*9663SMark.Logan@Sun.COM * This program/include file is distributed in the hope that it will be 13*9663SMark.Logan@Sun.COM * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 14*9663SMark.Logan@Sun.COM * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*9663SMark.Logan@Sun.COM * GNU General Public License for more details. 16*9663SMark.Logan@Sun.COM * 17*9663SMark.Logan@Sun.COM * You should have received a copy of the GNU General Public License 18*9663SMark.Logan@Sun.COM * along with this program (in the main directory of the Linux-NTFS 19*9663SMark.Logan@Sun.COM * distribution in the file COPYING); if not, write to the Free Software 20*9663SMark.Logan@Sun.COM * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21*9663SMark.Logan@Sun.COM */ 22*9663SMark.Logan@Sun.COM 23*9663SMark.Logan@Sun.COM #ifndef _NTFS_RUNLIST_H 24*9663SMark.Logan@Sun.COM #define _NTFS_RUNLIST_H 25*9663SMark.Logan@Sun.COM 26*9663SMark.Logan@Sun.COM #include "types.h" 27*9663SMark.Logan@Sun.COM 28*9663SMark.Logan@Sun.COM /* Forward declarations */ 29*9663SMark.Logan@Sun.COM typedef struct _runlist_element runlist_element; 30*9663SMark.Logan@Sun.COM typedef runlist_element runlist; 31*9663SMark.Logan@Sun.COM 32*9663SMark.Logan@Sun.COM #include "attrib.h" 33*9663SMark.Logan@Sun.COM #include "volume.h" 34*9663SMark.Logan@Sun.COM 35*9663SMark.Logan@Sun.COM /** 36*9663SMark.Logan@Sun.COM * struct _runlist_element - in memory vcn to lcn mapping array element. 37*9663SMark.Logan@Sun.COM * @vcn: starting vcn of the current array element 38*9663SMark.Logan@Sun.COM * @lcn: starting lcn of the current array element 39*9663SMark.Logan@Sun.COM * @length: length in clusters of the current array element 40*9663SMark.Logan@Sun.COM * 41*9663SMark.Logan@Sun.COM * The last vcn (in fact the last vcn + 1) is reached when length == 0. 42*9663SMark.Logan@Sun.COM * 43*9663SMark.Logan@Sun.COM * When lcn == -1 this means that the count vcns starting at vcn are not 44*9663SMark.Logan@Sun.COM * physically allocated (i.e. this is a hole / data is sparse). 45*9663SMark.Logan@Sun.COM */ 46*9663SMark.Logan@Sun.COM struct _runlist_element {/* In memory vcn to lcn mapping structure element. */ 47*9663SMark.Logan@Sun.COM VCN vcn; /* vcn = Starting virtual cluster number. */ 48*9663SMark.Logan@Sun.COM LCN lcn; /* lcn = Starting logical cluster number. */ 49*9663SMark.Logan@Sun.COM s64 length; /* Run length in clusters. */ 50*9663SMark.Logan@Sun.COM }; 51*9663SMark.Logan@Sun.COM 52*9663SMark.Logan@Sun.COM extern LCN ntfs_rl_vcn_to_lcn(const runlist_element *rl, const VCN vcn); 53*9663SMark.Logan@Sun.COM 54*9663SMark.Logan@Sun.COM extern s64 ntfs_rl_pread(const ntfs_volume *vol, const runlist_element *rl, 55*9663SMark.Logan@Sun.COM const s64 pos, s64 count, void *b); 56*9663SMark.Logan@Sun.COM extern s64 ntfs_rl_pwrite(const ntfs_volume *vol, const runlist_element *rl, 57*9663SMark.Logan@Sun.COM const s64 pos, s64 count, void *b); 58*9663SMark.Logan@Sun.COM 59*9663SMark.Logan@Sun.COM extern int ntfs_rl_fill_zero(const ntfs_volume *vol, const runlist *rl, 60*9663SMark.Logan@Sun.COM s64 pos, const s64 count); 61*9663SMark.Logan@Sun.COM 62*9663SMark.Logan@Sun.COM extern runlist_element *ntfs_runlists_merge(runlist_element *drl, 63*9663SMark.Logan@Sun.COM runlist_element *srl); 64*9663SMark.Logan@Sun.COM 65*9663SMark.Logan@Sun.COM extern runlist_element *ntfs_mapping_pairs_decompress(const ntfs_volume *vol, 66*9663SMark.Logan@Sun.COM const ATTR_RECORD *attr, runlist_element *old_rl); 67*9663SMark.Logan@Sun.COM 68*9663SMark.Logan@Sun.COM extern int ntfs_get_nr_significant_bytes(const s64 n); 69*9663SMark.Logan@Sun.COM 70*9663SMark.Logan@Sun.COM extern int ntfs_get_size_for_mapping_pairs(const ntfs_volume *vol, 71*9663SMark.Logan@Sun.COM const runlist_element *rl, const VCN start_vcn); 72*9663SMark.Logan@Sun.COM 73*9663SMark.Logan@Sun.COM extern int ntfs_write_significant_bytes(u8 *dst, const u8 *dst_max, 74*9663SMark.Logan@Sun.COM const s64 n); 75*9663SMark.Logan@Sun.COM 76*9663SMark.Logan@Sun.COM extern int ntfs_mapping_pairs_build(const ntfs_volume *vol, u8 *dst, 77*9663SMark.Logan@Sun.COM const int dst_len, const runlist_element *rl, 78*9663SMark.Logan@Sun.COM const VCN start_vcn, VCN *const stop_vcn); 79*9663SMark.Logan@Sun.COM 80*9663SMark.Logan@Sun.COM extern int ntfs_rl_truncate(runlist **arl, const VCN start_vcn); 81*9663SMark.Logan@Sun.COM 82*9663SMark.Logan@Sun.COM extern int ntfs_rl_sparse(runlist *rl); 83*9663SMark.Logan@Sun.COM extern s64 ntfs_rl_get_compressed_size(ntfs_volume *vol, runlist *rl); 84*9663SMark.Logan@Sun.COM 85*9663SMark.Logan@Sun.COM #ifdef NTFS_TEST 86*9663SMark.Logan@Sun.COM int test_rl_main(int argc, char *argv[]); 87*9663SMark.Logan@Sun.COM #endif 88*9663SMark.Logan@Sun.COM 89*9663SMark.Logan@Sun.COM #endif /* defined _NTFS_RUNLIST_H */ 90*9663SMark.Logan@Sun.COM 91