commit 1bd58fa87350a055516e42878ccc6a9b91810f4a
parent 9a34c6a86cbdefc38c99723eaa9bf26c1de1a9cc
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Thu, 2 Apr 2020 17:45:13 +0200
Allow creating device nodes
Diffstat:
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/README b/README
@@ -64,6 +64,9 @@ b<flags><tab><content>
s<flags><tab><content>
checksum, TODO description
+D<flags><tab><device-type>:<major>:<minor>
+ TODO
+
Commands that take whole statement:
P<tab><path>
diff --git a/zsh-functions/confz_fileset_init b/zsh-functions/confz_fileset_init
@@ -71,6 +71,8 @@ fileset_stat_set_cur(){
ftype=$[ [##16] $fileset_stat_cur[mode] >> 12 ]
fileset_stat_cur_type=$fileset_ftypes[$ftype]
fileset_stat_cur_perm=$[ [##8] $fileset_stat_cur[mode] & 4095 ]
+ fileset_stat_cur_major=$[ $fileset_stat_cur[rdev] >> 8 ]
+ fileset_stat_cur_minor=$[ $fileset_stat_cur[rdev] & 255 ]
}
fileset_resetcmd() {
@@ -156,6 +158,37 @@ confz_fs_l_do() {
}
+confz_fs_device_check() {
+ checkvars filename flags device_type major minor
+
+ if [[ $vars[flags] == *p* ]]; then
+ require fs_p :filename
+ fi
+
+ case $vars[device_type] in
+ (c) require fs_type_or_missing :filename :flags filetype=c ;;
+ (b) require fs_type_or_missing :filename :flags filetype=b ;;
+ (*) die "Incorrect device type: ${(qqq)vars[device_type]}" ;;
+ esac
+
+ fileset_stat $vars[filename] && \
+ [[ $fileset_stat_cur_type == $vars[device_type] ]] && \
+ [[ $fileset_stat_cur[major] == $vars[major] ]] && \
+ [[ $fileset_stat_cur[minor] == $vars[minor] ]]
+}
+
+confz_fs_device_do() {
+ local missing
+ fileset_stat $vars[filename]
+ missing=$?
+ fileset_reset_cache
+ if ! (($missing)); then
+ rm $vars[filename] || return $?
+ fi
+ mknod $vars[filename] $vars[major] $vars[minor]
+}
+
+
confz_fs_pipe_check() {
checkvars filename flags