@@ -444,14 +444,19 @@ class DriveManager extends EventEmitter {
444444 mkdir : async ( call ) => {
445445 const id = call . request . getId ( )
446446 const path = call . request . getPath ( )
447- const mode = call . request . getMode ( )
447+ const opts = fromStat ( call . request . getOpts ( ) )
448448
449449 if ( ! id ) throw new Error ( 'A mkdir request must specify a session ID.' )
450450 if ( ! path ) throw new Error ( 'A mkdir request must specify a directory path.' )
451451 const drive = this . driveForSession ( id )
452452
453+ const mkdirOpts = { }
454+ if ( opts . uid ) mkdirOpts . uid = opts . uid
455+ if ( opts . gid ) mkdirOpts . gid = opts . gid
456+ if ( opts . mode ) mkdirOpts . mode = opts . mode
457+
453458 return new Promise ( ( resolve , reject ) => {
454- drive . mkdir ( path , mode , err => {
459+ drive . mkdir ( path , mkdirOpts , err => {
455460 if ( err ) return reject ( err )
456461
457462 const rsp = new rpc . drive . messages . MkdirResponse ( )
@@ -569,6 +574,26 @@ class DriveManager extends EventEmitter {
569574 }
570575 } ,
571576
577+ symlink : async ( call ) => {
578+ const id = call . request . getId ( )
579+ const target = call . request . getTarget ( )
580+ const linkname = call . request . getLinkname ( )
581+
582+ if ( ! id ) throw new Error ( 'A symlink request must specify a session ID.' )
583+ if ( ! target ) throw new Error ( 'A symlink request must specify a target.' )
584+ if ( ! linkname ) throw new Error ( 'A symlink request must specify a linkname.' )
585+ const drive = this . driveForSession ( id )
586+
587+ return new Promise ( ( resolve , reject ) => {
588+ drive . symlink ( target , linkname , err => {
589+ if ( err ) return reject ( err )
590+
591+ const rsp = new rpc . drive . messages . SymlinkResponse ( )
592+ return resolve ( rsp )
593+ } )
594+ } )
595+ } ,
596+
572597 close : async ( call ) => {
573598 const id = call . request . getId ( )
574599
0 commit comments