stailey@iris613.gsfc.nasa.gov (Ken Stailey) (02/22/90)
Symbolic links are now available for MINIX 1.5.3 PC & ST If you would like the beta upgrade kit please mail me a note saying so. For those of you who do not have access to a BSD UNIX or System V R.4 et. al, a symbolic link is like a filename that get substituted for another pathname when you try to access it. It is not limited to only joining things that are on one disk. It can be used to link directories across filesystems to. For example I have my manfiles & doc files on one floppy disk. I can mount it in one location and link both /usr/man & /usr/doc to it. The more disks you have the more useful it becomes to link between them. This table summarizes the increase in size that the kit causes to the fs. text data bss stack memory 27704 1846 40390 61132 131072 fs.mix text data bss stack memory 26048 1846 40386 62792 131072 ../fs.old/fs.mix ====== ==== ===== ===== ====== 1656 0 4 -1660 0 This outline describes the changes that are made to the fs. fs/path.c: o modify eat_path() to check for sym. links at the end of a path & loop back if one is found. o modify last_dir() to check for sym. links and put their targets into the path o add slink_traverse() to change the path & curr. directory to the base of the sym. link fs/link.c: o modify do_unlink() to work on sym. links by changing their mode to regular & wipe_inode()ing them fs/open.c: o add do_slink() to make new sym. links o modify new_inode() in a fashion similar to eat_path() fs/inode.c: o modify put_inode() to avoid truncating sym. links even if their count is zero fs/stadir.c: o add do_lstat() to return the modes of a link instead of its target o add do_rdlink() to return the name of the target fs/table.c: o add the call vectors for do_slink(), do_rdlink() & do_lstat() fs/glo.h: o add a global var for number of symbolic link traverses o add a global flag used to tell last_dir to reset # traverses fs/proto.h: o add prototypes for: do_slink(), do_rdlink(), do_lstat(), slink_traverse(), include/errno.h: o add ELOOP for "too many levels (traverses) of sym links" o add ENOTSLINK for "not a sym. link" (used by do_rdlink()) include/limits.h: o add SLINK_PATH_MAX = 30 minix/callnr.h: o add SLINK = 45 o add LSTAT = 49 o add RDLINK = 50 minix/const.h: o add I_SYM_LINK = 01000 sys/stat.h: o add S_IFLNK = 01000 o add S_ISLNK macro o modify S_IFMT = 0171000 libc.a: o add interface functions for: symlink(), readlink() & lstat() o change perror()'s sys_errlist to include new error numbers tools: ls: change to use lstat() instead of stat() inodes: no changes -- already sym. link ready 8-) ln: change to support -s option rm: change to not reject sym. links because of access() saying that the target is a directory. fsck: change to know about sym. links INET stailey@iris613.gsfc.nasa.gov UUCP {backbone}!dftsrv!iris613!stailey