MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / seek_hole_common

Function seek_hole_common

block/src/qcow/mod.rs:3897–3968  ·  view source on GitHub ↗
(direct: bool)

Source from the content-addressed store, hash-verified

3895 }
3896
3897 fn seek_hole_common(direct: bool) {
3898 with_default_file(0x30000, direct, |mut file| {
3899 // File consisting entirely of a hole
3900 assert_eq!(file.seek_hole(0).unwrap(), Some(0));
3901 assert_eq!(seek_cur(&mut file), 0);
3902 assert_eq!(file.seek_hole(0xFFFF).unwrap(), Some(0xFFFF));
3903 assert_eq!(seek_cur(&mut file), 0xFFFF);
3904
3905 // seek_hole at or after the end of the file should return None
3906 file.rewind().unwrap();
3907 assert_eq!(file.seek_hole(0x30000).unwrap(), None);
3908 assert_eq!(seek_cur(&mut file), 0);
3909 assert_eq!(file.seek_hole(0x30001).unwrap(), None);
3910 assert_eq!(seek_cur(&mut file), 0);
3911
3912 // Write some data to [0x10000, 0x20000)
3913 let b = [0x55u8; 0x10000];
3914 file.seek(SeekFrom::Start(0x10000)).unwrap();
3915 file.write_all(&b).unwrap();
3916
3917 // seek_hole within a hole should return the same offset
3918 assert_eq!(file.seek_hole(0).unwrap(), Some(0));
3919 assert_eq!(seek_cur(&mut file), 0);
3920 assert_eq!(file.seek_hole(0xFFFF).unwrap(), Some(0xFFFF));
3921 assert_eq!(seek_cur(&mut file), 0xFFFF);
3922
3923 // seek_hole within data should return the next hole
3924 file.rewind().unwrap();
3925 assert_eq!(file.seek_hole(0x10000).unwrap(), Some(0x20000));
3926 assert_eq!(seek_cur(&mut file), 0x20000);
3927 file.rewind().unwrap();
3928 assert_eq!(file.seek_hole(0x10001).unwrap(), Some(0x20000));
3929 assert_eq!(seek_cur(&mut file), 0x20000);
3930 file.rewind().unwrap();
3931 assert_eq!(file.seek_hole(0x1FFFF).unwrap(), Some(0x20000));
3932 assert_eq!(seek_cur(&mut file), 0x20000);
3933 file.rewind().unwrap();
3934 assert_eq!(file.seek_hole(0xFFFF).unwrap(), Some(0xFFFF));
3935 assert_eq!(seek_cur(&mut file), 0xFFFF);
3936 file.rewind().unwrap();
3937 assert_eq!(file.seek_hole(0x10000).unwrap(), Some(0x20000));
3938 assert_eq!(seek_cur(&mut file), 0x20000);
3939 file.rewind().unwrap();
3940 assert_eq!(file.seek_hole(0x1FFFF).unwrap(), Some(0x20000));
3941 assert_eq!(seek_cur(&mut file), 0x20000);
3942 file.rewind().unwrap();
3943 assert_eq!(file.seek_hole(0x20000).unwrap(), Some(0x20000));
3944 assert_eq!(seek_cur(&mut file), 0x20000);
3945 file.rewind().unwrap();
3946 assert_eq!(file.seek_hole(0x20001).unwrap(), Some(0x20001));
3947 assert_eq!(seek_cur(&mut file), 0x20001);
3948
3949 // seek_hole at EOF should return None
3950 file.rewind().unwrap();
3951 assert_eq!(file.seek_hole(0x30000).unwrap(), None);
3952 assert_eq!(seek_cur(&mut file), 0);
3953
3954 // Write some data to [0x20000, 0x30000)

Callers 2

seek_holeFunction · 0.85
seek_hole_directFunction · 0.85

Calls 2

with_default_fileFunction · 0.85
seekMethod · 0.45

Tested by 2

seek_holeFunction · 0.68
seek_hole_directFunction · 0.68