@@ -67,32 +67,41 @@ export class DeviceFileSystem extends BaseFileSystem implements FileSystem {
67
67
}
68
68
}
69
69
70
- export function configureFileSystem ( devices : { [ name : string ] : Device } , cb : BFSCallback < FS > ) : void {
71
- DeviceFileSystem . Create ( { devices : devices } , ( e , dfs ) => {
72
- if ( e ) {
73
- cb ( e ) ;
74
- return ;
75
- }
70
+ export async function configureFileSystem ( devices : { [ name : string ] : Device } ) : Promise < FS > {
71
+ const dfs = await new Promise < DeviceFileSystem > ( ( resolve , reject ) => {
72
+ DeviceFileSystem . Create ( { devices : devices } , ( e , dfs ) => e ? reject ( e ) : resolve ( dfs ) )
73
+ } ) ;
74
+ const mfs = await new Promise < MountableFileSystem > ( ( resolve , reject ) => {
76
75
MountableFileSystem . Create ( {
77
76
"/dev" : dfs
78
- } , ( e , mfs ) => {
79
- if ( e ) {
80
- cb ( e ) ;
81
- return
82
- }
83
-
84
- const fs = new FS ( ) ;
85
- fs . initialize ( mfs ) ;
86
-
87
- const fdMap : { [ id : number ] : File } = ( fs as any ) . fdMap ;
88
- fdMap [ 0 ] = handles . stdin ;
89
- fdMap [ 1 ] = handles . stdout ;
90
- fdMap [ 2 ] = handles . stderr ;
91
-
92
- cb ( undefined , fs ) ;
93
- } ) ;
77
+ } , ( e , mfs ) => e ? reject ( e ) : resolve ( mfs ) ) ;
78
+ } ) ;
79
+
80
+ const fs = new FS ( ) ;
81
+ fs . initialize ( mfs ) ;
82
+
83
+ const fdMap : { [ id : number ] : File } = ( fs as any ) . fdMap ;
84
+ fdMap [ 0 ] = handles . stdin ;
85
+ fdMap [ 1 ] = handles . stdout ;
86
+ fdMap [ 2 ] = handles . stderr ;
87
+
88
+ return fs ;
89
+ }
90
+
91
+ export async function asyncRead ( fs : FS , fd : number , buffer : Buffer , offset : number , length : number , position : number | null )
92
+ : Promise < { byteLength : number , buffer : Buffer } > {
93
+ return new Promise < { byteLength : number , buffer : Buffer } > ( ( resolve , reject ) => {
94
+ fs . read ( fd , buffer , offset , length , position ,
95
+ ( err , n , buf ) => err ? reject ( err ) : resolve ( { byteLength : n , buffer : buf } ) ) ;
96
+ } ) ;
97
+ }
98
+
99
+ export async function asyncWrite ( fs : FS , fd : number , buffer : Buffer , offset : number , length : number , position : number | null )
100
+ : Promise < void > {
101
+ return new Promise < void > ( ( resolve , reject ) => {
102
+ fs . write ( fd , buffer , offset , length , position , e => e ? reject ( e ) : resolve ( ) )
94
103
} ) ;
95
104
}
96
105
97
106
// Re-export for device implementors
98
- export { BFSCallback , Stats , File , FileFlag } ;
107
+ export { BFSCallback , Stats , File , FileFlag , FS } ;
0 commit comments