*/
class Tools {
- const S_IFMT = 170000;
- const S_IFGITLINK = 160000;
- const S_IFLNK = 120000;
- const S_IFREG = 100000;
- const S_IFDIR = 40000;
- const S_IFINVALID = 30000;
- const S_IXUSR = 100;
+ /* octal constants (sys/stat.h) */
+ const S_IFMT = 0170000;
+ const S_IFGITLINK = 0160000; /* GIT defined */
+ const S_IFLNK = 0120000;
+ const S_IFREG = 0100000;
+ const S_IFDIR = 0040000;
+ const S_IPERMS = 0000777;
+ const S_IXUSR = 0000100;
public static function get_filetype($mode, $exec = false) {
if(!preg_match('/^[0-7]+$/', $mode))
return $mode;
- if(($mode & self::S_IFMT) == S_IFGITLINK)
+ $mode = octdec($mode);
+
+ if(($mode & self::S_IFMT) == self::S_IFGITLINK)
return 'submodule';
- else if(($mode & self::S_IFMT) == S_IFDIR)
+ else if(($mode & self::S_IFMT) == self::S_IFDIR)
return 'directory';
- else if(($mode & self::S_IFMT) == S_IFLNK)
+ else if(($mode & self::S_IFMT) == self::S_IFLNK)
return 'symlink';
- else if(($mode & self::S_IFMT) == S_IFREG) {
+ else if(($mode & self::S_IFMT) == self::S_IFREG) {
if($exec && ($mode & self::S_IXUSR))
return 'executable';
return 'file';
return 'unknown';
}
+ public static function is_regular_file($mode) {
+ $mode = octdec($mode);
+ return (($mode & self::S_IFMT) == self::S_IFREG);
+ }
+
+ public static function get_file_permissions($mode) {
+ $mode = octdec($mode);
+ return sprintf("%04o",($mode & self::S_IPERMS));
+ }
+
public static function age_calculate($last_change) {
$result = array();
$now = time();
return $offset;
}
+ public static function replaceTabs($line) {
+ while(($pos = strpos($line, "\t")) !== false) {
+ $spacecount = 8 - ($pos % 8);
+ $i = 1;
+ while($line[$pos + $i] == "\t") { //maybe a little bit faster ;)
+ $i++;
+ $spacecount += 8;
+ }
+ $line = substr($line, 0, $pos).str_repeat(' ', $spacecount).substr($line, $pos + $i);
+ }
+ return $line;
+ }
+
}
?>
\ No newline at end of file