diff --git a/core/io/files/files.factor b/core/io/files/files.factor index b51d767069..899a1be006 100755 --- a/core/io/files/files.factor +++ b/core/io/files/files.factor @@ -54,6 +54,7 @@ TUPLE: no-parent-directory path ; TUPLE: file-info type size permissions modified ; HOOK: file-info io-backend ( path -- info ) +HOOK: link-info io-backend ( path -- info ) SYMBOL: +regular-file+ SYMBOL: +directory+ diff --git a/extra/io/unix/files/files.factor b/extra/io/unix/files/files.factor index db3cf674c7..4142c4be77 100755 --- a/extra/io/unix/files/files.factor +++ b/extra/io/unix/files/files.factor @@ -89,3 +89,12 @@ M: unix-io file-info ( path -- info ) [ stat-st_mtim timespec-sec seconds unix-1970 time+ ] } cleave \ file-info construct-boa ; + +M: unix-io link-info ( path -- info ) + lstat* { + [ stat>type ] + [ stat-st_size ] + [ stat-st_mode ] + [ stat-st_mtim timespec-sec seconds unix-1970 time+ ] + } cleave + \ file-info construct-boa ; diff --git a/extra/unix/stat/stat.factor b/extra/unix/stat/stat.factor index 204321f30c..6d60caf987 100644 --- a/extra/unix/stat/stat.factor +++ b/extra/unix/stat/stat.factor @@ -74,3 +74,8 @@ FUNCTION: int mkdir ( char* path, mode_t mode ) ; "stat" dup >r stat check-status r> ; + +: lstat* ( pathname -- stat ) + "stat" dup >r + lstat check-status + r> ;