public bool importFile(int fnum, bool isid, byte[] data) { DinnerEntry e = fileInfo(fnum, isid); FileHeader hdr = readHeader(fnum, isid); byte[] fl; if (e.compressed && hdr.compressed && hdr.tot_size != e.size) { UInt32 decompsz = (uint)data.Length; if (e.header) { hdr = new FileHeader(data); fl = data; data = new byte[fl.Length - FileHeader.size]; Array.Copy(fl, FileHeader.size, data, 0, data.Length); hdr.setSize(decompsz); } else { hdr.setSize(decompsz); } byte[] cmpr = RNC.compress(data); data = new byte[cmpr.Length + FileHeader.size]; Array.Copy(hdr.buf, 0, data, 0, FileHeader.size); Array.Copy(cmpr, 0, data, FileHeader.size, cmpr.Length); } int resize = data.Length - (int)e.size; if (resize != 0) { resizeDisk(resize, ref e); } Array.Copy(data, 0, diskbuf, e.offset, data.Length); return(true); }
public byte[] readFile(int fnum, bool isid) { DinnerEntry e = fileInfo(fnum, isid); FileHeader hdr = readHeader(fnum, isid); byte[] res = null; if (e.compressed && hdr.compressed && hdr.tot_size != e.size) { byte[] fl = new byte[e.size - FileHeader.size]; Array.Copy(diskbuf, e.offset + FileHeader.size, fl, 0, e.size - FileHeader.size); res = RNC.decompress(fl); if (e.header) { fl = res; res = new byte[fl.Length + FileHeader.size]; Array.Copy(hdr.buf, res, FileHeader.size); Array.Copy(fl, 0, res, FileHeader.size, fl.Length); } } else { res = new byte[e.size]; Array.Copy(diskbuf, e.offset, res, 0, e.size); } return(res); }