/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġok io Ċ Ċ import Ġkotlinx . c interop . to K String Ċ import Ġok io . Path . Companion . to Path Ċ import Ġplatform . posix . E ACC ES Ċ import Ġplatform . posix . ENO ENT Ċ import Ġplatform . posix . PATH _ MAX Ċ import Ġplatform . posix ._ full path Ċ import Ġplatform . posix . errno Ċ import Ġplatform . posix . free Ċ import Ġplatform . posix . getenv Ċ import Ġplatform . posix . mkdir Ċ import Ġplatform . posix . remove Ċ import Ġplatform . posix . r mdir Ċ Ċ internal Ġactual Ġval ĠVARI ANT _ DIRECTORY _ SEPARATOR Ġ= Ġ"\ \" Ċ Ċ internal Ġactual Ġfun ĠPos ix System Filesystem . variant Temporary Directory (): ĠPath Ġ{ ĊĠ Ġ// ĠWindows ' Ġbuilt - in ĠAPIs Ġcheck Ġthe ĠTEMP , ĠTMP , Ġand ĠUSER PROFILE Ġenvironment Ġvariables Ġin Ġorder . ĊĠ Ġ// Ġhttps :// docs . microsoft . com / en - us / windows / win 3 2 / api / file api / nf - file api - get temp path a ? redirect ed from = MS DN ĊĠ Ġval Ġtemp Ġ= Ġgetenv (" TEMP ") ĊĠ Ġif Ġ( temp Ġ!= Ġnull ) Ġreturn Ġtemp . to K String (). to Path () ĊĊĠ Ġval Ġtmp Ġ= Ġgetenv (" TMP ") ĊĠ Ġif Ġ( tmp Ġ!= Ġnull ) Ġreturn Ġtmp . to K String (). to Path () ĊĊĠ Ġval Ġuser Profile Ġ= Ġgetenv (" USER PROFILE ") ĊĠ Ġif Ġ( user Profile Ġ!= Ġnull ) Ġreturn Ġuser Profile . to K String (). to Path () ĊĊĠ Ġreturn Ġ"\\ Windows \\ TEMP ". to Path () Ċ } Ċ Ċ internal Ġactual Ġfun ĠPos ix System Filesystem . variant Delete ( path : ĠPath ) Ġ{ ĊĠ Ġval Ġpath String Ġ= Ġpath . toString () ĊĊĠ Ġif Ġ( remove ( path String ) Ġ== Ġ 0 ) Ġreturn ĊĊĠ Ġ// ĠIf Ġremove Ġfailed Ġwith ĠE ACC ES , Ġit Ġmight Ġbe Ġa Ġdirectory . ĠTry Ġthat . ĊĠ Ġif Ġ( errno Ġ== ĠE ACC ES ) Ġ{ ĊĠĠĠ Ġif Ġ( r mdir ( path String ) Ġ== Ġ 0 ) Ġreturn ĊĠ Ġ} ĊĊĠ Ġthrow ĠIOException ( errno String ( E ACC ES )) Ċ } Ċ Ċ internal Ġactual Ġfun ĠPos ix System Filesystem . variant Mk dir ( dir : ĠPath ): ĠInt Ġ{ ĊĠ Ġreturn Ġmkdir ( dir . toString ()) Ċ } Ċ Ċ internal Ġactual Ġfun ĠPos ix System Filesystem . variant Canonical ize ( path : ĠPath ): ĠPath Ġ{ ĊĠ Ġ// ĠNote Ġthat Ġ_ full path () Ġreturns Ġnormally Ġif Ġthe Ġfile Ġdoesn 't Ġexist . ĊĠ Ġval Ġfull path Ġ= Ġ_ full path ( null , Ġpath . toString (), ĠPATH _ MAX ) ĊĠĠĠ Ġ?: Ġthrow ĠIOException ( errno String ( errno )) ĊĠ Ġtry Ġ{ ĊĠĠĠ Ġval Ġpath String Ġ= ĠBuffer (). write Null Terminated ( full path ). read Utf 8 () ĊĠĠĠ Ġif Ġ( platform . posix . access ( path String , Ġ 0 ) Ġ!= Ġ 0 Ġ&& Ġerrno Ġ== ĠENO ENT ) Ġthrow ĠIOException (" no Ġsuch Ġfile ") ĊĠĠĠ Ġreturn Ġpath String . to Path () ĊĠ Ġ} Ġfinally Ġ{ ĊĠĠĠ Ġfree ( full path ) ĊĠ Ġ} Ċ } Ċ