@@ -10,7 +10,13 @@ import (
1010 "github.com/Microsoft/hcsshim/internal/winapi/types"
1111)
1212
13- type g = guid.GUID
13+ // pickSupported makes sure we use appropriate syscalls depending on which DLLs are present.
14+ func pickSupported [F any ](cimWriterFunc , cimfsFunc F ) F {
15+ if cimwriter .Supported () {
16+ return cimWriterFunc
17+ }
18+ return cimfsFunc
19+ }
1420
1521func CimMountImage (imagePath string , fsName string , flags uint32 , volumeID * guid.GUID ) error {
1622 return cimfs .CimMountImage (imagePath , fsName , flags , volumeID )
@@ -21,112 +27,112 @@ func CimDismountImage(volumeID *guid.GUID) error {
2127}
2228
2329func CimCreateImage (imagePath string , oldFSName * uint16 , newFSName * uint16 , cimFSHandle * types.FsHandle ) error {
24- if cimwriter . CimWriterSupported () {
25- return cimwriter .CimCreateImage ( imagePath , oldFSName , newFSName , cimFSHandle )
26- }
27- return cimfs . CimCreateImage (imagePath , oldFSName , newFSName , cimFSHandle )
30+ return pickSupported (
31+ cimwriter .CimCreateImage ,
32+ cimfs . CimCreateImage ,
33+ ) (imagePath , oldFSName , newFSName , cimFSHandle )
2834}
2935
3036func CimCreateImage2 (imagePath string , flags uint32 , oldFSName * uint16 , newFSName * uint16 , cimFSHandle * types.FsHandle ) error {
31- if cimwriter . CimWriterSupported () {
32- return cimwriter .CimCreateImage2 ( imagePath , flags , oldFSName , newFSName , cimFSHandle )
33- }
34- return cimfs . CimCreateImage2 (imagePath , flags , oldFSName , newFSName , cimFSHandle )
37+ return pickSupported (
38+ cimwriter .CimCreateImage2 ,
39+ cimfs . CimCreateImage2 ,
40+ ) (imagePath , flags , oldFSName , newFSName , cimFSHandle )
3541}
3642
3743func CimCloseImage (cimFSHandle types.FsHandle ) error {
38- if cimwriter . CimWriterSupported () {
39- return cimwriter .CimCloseImage ( cimFSHandle )
40- }
41- return cimfs . CimCloseImage (cimFSHandle )
44+ return pickSupported (
45+ cimwriter .CimCloseImage ,
46+ cimfs . CimCloseImage ,
47+ ) (cimFSHandle )
4248}
4349
4450func CimCommitImage (cimFSHandle types.FsHandle ) error {
45- if cimwriter . CimWriterSupported () {
46- return cimwriter .CimCommitImage ( cimFSHandle )
47- }
48- return cimfs . CimCommitImage (cimFSHandle )
51+ return pickSupported (
52+ cimwriter .CimCommitImage ,
53+ cimfs . CimCommitImage ,
54+ ) (cimFSHandle )
4955}
5056
5157func CimCreateFile (cimFSHandle types.FsHandle , path string , file * types.CimFsFileMetadata , cimStreamHandle * types.StreamHandle ) error {
52- if cimwriter . CimWriterSupported () {
53- return cimwriter .CimCreateFile ( cimFSHandle , path , file , cimStreamHandle )
54- }
55- return cimfs . CimCreateFile (cimFSHandle , path , file , cimStreamHandle )
58+ return pickSupported (
59+ cimwriter .CimCreateFile ,
60+ cimfs . CimCreateFile ,
61+ ) (cimFSHandle , path , file , cimStreamHandle )
5662}
5763
5864func CimCloseStream (cimStreamHandle types.StreamHandle ) error {
59- if cimwriter . CimWriterSupported () {
60- return cimwriter .CimCloseStream ( cimStreamHandle )
61- }
62- return cimfs . CimCloseStream (cimStreamHandle )
65+ return pickSupported (
66+ cimwriter .CimCloseStream ,
67+ cimfs . CimCloseStream ,
68+ ) (cimStreamHandle )
6369}
6470
6571func CimWriteStream (cimStreamHandle types.StreamHandle , buffer uintptr , bufferSize uint32 ) error {
66- if cimwriter . CimWriterSupported () {
67- return cimwriter .CimWriteStream ( cimStreamHandle , buffer , bufferSize )
68- }
69- return cimfs . CimWriteStream (cimStreamHandle , buffer , bufferSize )
72+ return pickSupported (
73+ cimwriter .CimWriteStream ,
74+ cimfs . CimWriteStream ,
75+ ) (cimStreamHandle , buffer , bufferSize )
7076}
7177
7278func CimDeletePath (cimFSHandle types.FsHandle , path string ) error {
73- if cimwriter . CimWriterSupported () {
74- return cimwriter .CimDeletePath ( cimFSHandle , path )
75- }
76- return cimfs . CimDeletePath (cimFSHandle , path )
79+ return pickSupported (
80+ cimwriter .CimDeletePath ,
81+ cimfs . CimDeletePath ,
82+ ) (cimFSHandle , path )
7783}
7884
7985func CimCreateHardLink (cimFSHandle types.FsHandle , newPath string , oldPath string ) error {
80- if cimwriter . CimWriterSupported () {
81- return cimwriter .CimCreateHardLink ( cimFSHandle , newPath , oldPath )
82- }
83- return cimfs . CimCreateHardLink (cimFSHandle , newPath , oldPath )
86+ return pickSupported (
87+ cimwriter .CimCreateHardLink ,
88+ cimfs . CimCreateHardLink ,
89+ ) (cimFSHandle , newPath , oldPath )
8490}
8591
8692func CimCreateAlternateStream (cimFSHandle types.FsHandle , path string , size uint64 , cimStreamHandle * types.StreamHandle ) error {
87- if cimwriter . CimWriterSupported () {
88- return cimwriter .CimCreateAlternateStream ( cimFSHandle , path , size , cimStreamHandle )
89- }
90- return cimfs . CimCreateAlternateStream (cimFSHandle , path , size , cimStreamHandle )
93+ return pickSupported (
94+ cimwriter .CimCreateAlternateStream ,
95+ cimfs . CimCreateAlternateStream ,
96+ ) (cimFSHandle , path , size , cimStreamHandle )
9197}
9298
9399func CimAddFsToMergedImage (cimFSHandle types.FsHandle , path string ) error {
94- if cimwriter . CimWriterSupported () {
95- return cimwriter .CimAddFsToMergedImage ( cimFSHandle , path )
96- }
97- return cimfs . CimAddFsToMergedImage (cimFSHandle , path )
100+ return pickSupported (
101+ cimwriter .CimAddFsToMergedImage ,
102+ cimfs . CimAddFsToMergedImage ,
103+ ) (cimFSHandle , path )
98104}
99105
100106func CimAddFsToMergedImage2 (cimFSHandle types.FsHandle , path string , flags uint32 ) error {
101- if cimwriter . CimWriterSupported () {
102- return cimwriter .CimAddFsToMergedImage2 ( cimFSHandle , path , flags )
103- }
104- return cimfs . CimAddFsToMergedImage2 (cimFSHandle , path , flags )
107+ return pickSupported (
108+ cimwriter .CimAddFsToMergedImage2 ,
109+ cimfs . CimAddFsToMergedImage2 ,
110+ ) (cimFSHandle , path , flags )
105111}
106112
107113func CimMergeMountImage (numCimPaths uint32 , backingImagePaths * types.CimFsImagePath , flags uint32 , volumeID * guid.GUID ) error {
108114 return cimfs .CimMergeMountImage (numCimPaths , backingImagePaths , flags , volumeID )
109115}
110116
111117func CimTombstoneFile (cimFSHandle types.FsHandle , path string ) error {
112- if cimwriter . CimWriterSupported () {
113- return cimwriter .CimTombstoneFile ( cimFSHandle , path )
114- }
115- return cimfs . CimTombstoneFile (cimFSHandle , path )
118+ return pickSupported (
119+ cimwriter .CimTombstoneFile ,
120+ cimfs . CimTombstoneFile ,
121+ ) (cimFSHandle , path )
116122}
117123
118124func CimCreateMergeLink (cimFSHandle types.FsHandle , newPath string , oldPath string ) (hr error ) {
119- if cimwriter . CimWriterSupported () {
120- return cimwriter .CimCreateMergeLink ( cimFSHandle , newPath , oldPath )
121- }
122- return cimfs . CimCreateMergeLink (cimFSHandle , newPath , oldPath )
125+ return pickSupported (
126+ cimwriter .CimCreateMergeLink ,
127+ cimfs . CimCreateMergeLink ,
128+ ) (cimFSHandle , newPath , oldPath )
123129}
124130
125131func CimSealImage (blockCimPath string , hashSize * uint64 , fixedHeaderSize * uint64 , hash * byte ) (hr error ) {
126- if cimwriter . CimWriterSupported () {
127- return cimwriter .CimSealImage ( blockCimPath , hashSize , fixedHeaderSize , hash )
128- }
129- return cimfs . CimSealImage (blockCimPath , hashSize , fixedHeaderSize , hash )
132+ return pickSupported (
133+ cimwriter .CimSealImage ,
134+ cimfs . CimSealImage ,
135+ ) (blockCimPath , hashSize , fixedHeaderSize , hash )
130136}
131137
132138func CimGetVerificationInformation (blockCimPath string , isSealed * uint32 , hashSize * uint64 , signatureSize * uint64 , fixedHeaderSize * uint64 , hash * byte , signature * byte ) (hr error ) {
0 commit comments