fileset

git mirror of https://ccx.te2000.cz/bzr/fileset
git clone https://ccx.te2000.cz/git/fileset
Log | Files | Refs | README

commit 1bd58fa87350a055516e42878ccc6a9b91810f4a
parent 9a34c6a86cbdefc38c99723eaa9bf26c1de1a9cc
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Thu,  2 Apr 2020 17:45:13 +0200

Allow creating device nodes
Diffstat:
MREADME | 3+++
Mzsh-functions/confz_fileset_init | 33+++++++++++++++++++++++++++++++++
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