mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-06 04:52:26 +00:00
FsHelper checks if file/dir/symlink etc exists
This commit is contained in:
parent
c02b5d6c83
commit
909c300c77
3 changed files with 114 additions and 1 deletions
|
|
@ -1,10 +1,39 @@
|
||||||
MODULE vpkFsHelper;
|
MODULE vpkFsHelper;
|
||||||
IMPORT SYSTEM;
|
IMPORT SYSTEM;
|
||||||
|
|
||||||
|
CONST
|
||||||
|
dir* = 0; char* = 1; block* = 2; file* = 3; fifo* = 4;
|
||||||
|
symlink* = 5; socket* = 6;
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
fileInfo* = RECORD;
|
||||||
|
name* : ARRAY 64 OF CHAR;
|
||||||
|
attr- : SET
|
||||||
|
END;
|
||||||
|
|
||||||
|
Status = RECORD (* struct stat *)
|
||||||
|
dev* : HUGEINT; (* dev_t 8 *)
|
||||||
|
ino* : HUGEINT; (* ino 8 *)
|
||||||
|
nlink* : HUGEINT;
|
||||||
|
mode* : LONGINT;
|
||||||
|
uid*, gid*: LONGINT;
|
||||||
|
pad0* : LONGINT;
|
||||||
|
rdev* : HUGEINT;
|
||||||
|
size* : HUGEINT;
|
||||||
|
blksize* : HUGEINT;
|
||||||
|
blocks* : HUGEINT;
|
||||||
|
atime* : HUGEINT;
|
||||||
|
atimences* : HUGEINT;
|
||||||
|
mtime* : HUGEINT;
|
||||||
|
mtimensec* : HUGEINT;
|
||||||
|
ctime* : HUGEINT;
|
||||||
|
ctimensec* : HUGEINT;
|
||||||
|
unused0*, unused1*, unused2*: HUGEINT;
|
||||||
|
END;
|
||||||
|
|
||||||
PROCEDURE -Aincludesysstat '#include <sys/stat.h>';
|
PROCEDURE -Aincludesysstat '#include <sys/stat.h>';
|
||||||
PROCEDURE -Aincludesystypes '#include <sys/types.h>';
|
PROCEDURE -Aincludesystypes '#include <sys/types.h>';
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE -mkdir(VAR path: ARRAY OF CHAR): INTEGER
|
PROCEDURE -mkdir(VAR path: ARRAY OF CHAR): INTEGER
|
||||||
"(int)mkdir(path, 0755)";
|
"(int)mkdir(path, 0755)";
|
||||||
|
|
||||||
|
|
@ -15,6 +44,56 @@ BEGIN
|
||||||
IF res = 0 THEN RETURN TRUE ELSE RETURN FALSE END
|
IF res = 0 THEN RETURN TRUE ELSE RETURN FALSE END
|
||||||
END mkDir;
|
END mkDir;
|
||||||
|
|
||||||
|
PROCEDURE -stat(VAR path : ARRAY OF CHAR; st: Status): INTEGER
|
||||||
|
"stat((const char*)path, (struct stat*)&st)";
|
||||||
|
|
||||||
|
PROCEDURE -isDir(mode: LONGINT): INTEGER
|
||||||
|
"S_ISDIR(mode)";
|
||||||
|
|
||||||
|
PROCEDURE -isChar(mode: LONGINT): INTEGER
|
||||||
|
"S_ISCHR(mode)";
|
||||||
|
|
||||||
|
PROCEDURE -isBlock(mode: LONGINT): INTEGER
|
||||||
|
"S_ISBLK(mode)";
|
||||||
|
|
||||||
|
PROCEDURE -isReg(mode: LONGINT): INTEGER
|
||||||
|
"S_ISREG(mode)";
|
||||||
|
|
||||||
|
PROCEDURE -isFIFO(mode: LONGINT): INTEGER
|
||||||
|
"S_ISFIFO(mode)";
|
||||||
|
|
||||||
|
PROCEDURE -isLnk(mode: LONGINT): INTEGER
|
||||||
|
"S_ISLNK(mode)";
|
||||||
|
|
||||||
|
PROCEDURE -isSock(mode: LONGINT): INTEGER
|
||||||
|
"S_ISSOCK(mode)";
|
||||||
|
|
||||||
|
PROCEDURE Exists*(VAR fl : fileInfo): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
i : INTEGER;
|
||||||
|
st: Status;
|
||||||
|
BEGIN
|
||||||
|
fl.attr := {};
|
||||||
|
i := stat(fl.name, st);
|
||||||
|
IF i < 0 THEN RETURN FALSE END;
|
||||||
|
IF i = 0 THEN (* file exists*)
|
||||||
|
i := isDir(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {dir} END;
|
||||||
|
i := isChar(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {char} END;
|
||||||
|
i := isBlock(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {block} END;
|
||||||
|
i := isReg(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {file} END;
|
||||||
|
i := isFIFO(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {fifo} END;
|
||||||
|
i := isLnk(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {symlink} END;
|
||||||
|
i := isSock(st.mode);
|
||||||
|
IF i # 0 THEN fl.attr := fl.attr + {socket} END;
|
||||||
|
RETURN TRUE
|
||||||
|
END;
|
||||||
|
END Exists;
|
||||||
|
|
||||||
|
|
||||||
END vpkFsHelper.
|
END vpkFsHelper.
|
||||||
|
|
|
||||||
9
unit_tests/makefile
Normal file
9
unit_tests/makefile
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
BLD = build
|
||||||
|
VOC = /opt/voc/bin/voc
|
||||||
|
|
||||||
|
all:
|
||||||
|
mkdir -p $(BLD)
|
||||||
|
cd $(BLD) && $(VOC) -s ../../src/vpkFsHelper.Mod ../testFsHelper.Mod -m
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BLD)
|
||||||
25
unit_tests/testFsHelper.Mod
Normal file
25
unit_tests/testFsHelper.Mod
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
MODULE testFsHelper;
|
||||||
|
IMPORT Out, vpkFsHelper;
|
||||||
|
|
||||||
|
VAR
|
||||||
|
dir : ARRAY 64 OF CHAR;
|
||||||
|
f : vpkFsHelper.fileInfo;
|
||||||
|
b : BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
dir := "/home";
|
||||||
|
f.name := "/home";
|
||||||
|
|
||||||
|
IF vpkFsHelper.Exists(f) THEN
|
||||||
|
Out.String("exists"); Out.Ln;
|
||||||
|
IF vpkFsHelper.dir IN f.attr THEN Out.String("directory"); Out.Ln; END;
|
||||||
|
IF vpkFsHelper.char IN f.attr THEN Out.String("char"); Out.Ln; END;
|
||||||
|
IF vpkFsHelper.block IN f.attr THEN Out.String("block"); Out.Ln; END;
|
||||||
|
IF vpkFsHelper.file IN f.attr THEN Out.String("file"); Out.Ln; END;
|
||||||
|
IF vpkFsHelper.fifo IN f.attr THEN Out.String("fifo"); Out.Ln; END;
|
||||||
|
IF vpkFsHelper.symlink IN f.attr THEN Out.String("symlink"); Out.Ln; END;
|
||||||
|
IF vpkFsHelper.socket IN f.attr THEN Out.String("socket"); Out.Ln; END;
|
||||||
|
ELSE
|
||||||
|
Out.String("does not exist"); Out.Ln;
|
||||||
|
END;
|
||||||
|
|
||||||
|
END testFsHelper.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue