| aubifs_link#(OLD_DENT, FI, RO, FO; P_INODE, C_INODE, NEW_DENT, ERR, RI, FS, LOG, CSYNCED) {if pre-link(P_INODE, C_INODE, OLD_DENT, NEW_DENT, FS, RI, RO) then choose INO, ADR1, ADR2, ADR3, KEY1, KEY2, KEY3, ND1, ND2, ND3 with INO = C_INODE.ino in {KEY1 := inodekey(P_INODE.ino); KEY2 := dentrykey(P_INODE.ino, NEW_DENT.name); KEY3 := inodekey(INO); ND1 := inodenode(KEY1, P_INODE.meta, P_INODE.directory, P_INODE.nlink, P_INODE.nsubdirs, P_INODE.size + 1); ND2 := dentrynode(KEY2, INO); ND3 := inodenode(KEY3, C_INODE.meta, C_INODE.directory, C_INODE.nlink + 1, C_INODE.nsubdirs, C_INODE.size); aubifs_core_journal_add3#(ND1, ND2, ND3, RI, FI, RO, FO; ADR1, ADR2, ADR3, FS, LOG; CSYNCED, ERR); if ERR = ESUCCESS then {aubifs_core_index_store#(KEY1, ADR1, FI, RO, FO, FS, LOG, CSYNCED; RI); aubifs_core_index_store#(KEY2, ADR2, FI, RO, FO, FS, LOG, CSYNCED; RI); aubifs_core_index_store#(KEY3, ADR3, FI, RO, FO, FS, LOG, CSYNCED; RI); NEW_DENT := mkdentry(NEW_DENT.name, INO); P_INODE := mkinode(P_INODE.ino, ND1.meta, ND1.directory, ND1.nlink, ND1.nsubdirs, ND1.size); C_INODE := mkinode(INO, ND3.meta, ND3.directory, ND3.nlink, ND3.nsubdirs, ND3.size)}} else abort } |