/* ĊĠĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 ĠChar les ĠK orn . ĊĊĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĊĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġb ate ct . docker client . io Ċ Ċ import Ġb ate ct . docker client . Docker ClientException Ċ import Ġb ate ct . docker client . native . Create Output Pipe Ċ import Ġb ate ct . docker client . native . Dispose Output Pipe Ċ import Ġb ate ct . docker client . native . Free Create Output Pipe Return Ċ import Ġb ate ct . docker client . native . Free Error Ċ import Ġkotlinx . c interop . Byte Var Of Ċ import Ġkotlinx . c interop . CP o inter Ċ import Ġkotlinx . c interop . get Ċ import Ġkotlinx . c interop . point ed Ċ import Ġok io . Buffer Ċ import Ġok io . IOException Ċ import Ġok io . Sink Ċ import Ġok io . buffer Ċ import Ġplatform . posix . str error Ċ Ċ public Ġactual Ġsealed Ġinterface ĠText Output Ġ{ ĊĠĠĠ Ġpublic Ġactual Ġfun Ġprepare Stream (): ĠPrepared OutputStream ĊĊĠĠĠ Ġpublic Ġactual Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġactual Ġval ĠStandard Output : ĠText Output Ġ= ĠStandard Text Output ( 1 u ) ĊĠĠĠĠĠĠĠ Ġpublic Ġactual Ġval ĠStandard Error : ĠText Output Ġ= ĠStandard Text Output ( 2 u ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġactual Ġclass ĠS ink Text Output Ġactual Ġconstructor ( public Ġval Ġsink : ĠS ink ) Ġ: ĠText Output Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprepare Stream (): ĠPrepared OutputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPipe ( sink ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPipe ( private Ġval Ġsink : ĠS ink ) Ġ: ĠPrepared OutputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġval ĠoutputStream Handle : ĠU Long ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsource : ĠPipe Source ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠCreate Output Pipe () !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret . point ed . Error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDocker ClientException ( ret . point ed . Error !!. point ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Handle Ġ= Ġret . point ed . OutputStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfd Ġ= Ġret . point ed . ReadFile Descriptor . safe ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= ĠPipe Source ( fd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFree Create Output Pipe Return ( ret ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . buffer (). read All ( sink ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠDispose Output Pipe ( output Stream Handle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDocker ClientException ( error . point ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFree Error ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠU Long . safe ToInt () Ġ= Ġif Ġ( this Ġ> ĠInt . MAX _ VALUE . to UL ong ()) Ġthrow ĠIllegalArgumentException (" Value Ġout Ġof Ġrange ") Ġelse Ġthis . toInt () Ċ Ċ // ĠThese Ġtwo Ġfunctions Ġare Ġbased Ġon Ġok io 's Ġimplementations . Ċ internal Ġfun Ġerrno To IOException ( errno : ĠInt ): ĠIOException Ġ{ ĊĠĠĠ Ġval Ġmessage Ġ= Ġstrerror ( errno ) ĊĊĠĠĠ Ġval Ġmessage String Ġ= Ġif Ġ( message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBuffer (). write Null Terminated ( message ). read Utf 8 () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ" errno : Ġ$ errno " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠIOException ( message String ) Ċ } Ċ Ċ internal Ġfun ĠBuffer . write Null Terminated ( bytes : ĠC Pointer < Byte Var Of < Byte >> ): ĠBuffer Ġ= Ġapply Ġ{ ĊĠĠĠ Ġvar Ġpos Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbyte Ġ= Ġbytes [ pos ++ ]. toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( byte Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Byte ( byte ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ