Homework: Naming

Read: namei in fs.c, file.c, sysfile.c

Hand-In Procedure

You are to turn in this homework before lecture. Please email your answers to 6.828-homework@pdos.csail.mit.edu, preferably in plain text.

Symbolic Links

As you read namei and explore its varied uses throughout xv6, think about what steps would be required to add symbolic links to xv6. A symbolic link is simply a file with a special type (e.g., T_SYMLINK instead of T_FILE or T_DIR) whose contents contain the path being linked to.

Submit: A short writeup of how you would change xv6 to support symlinks. List the functions that would have to be added or changed, with short descriptions of the new functionality or changes.

The following is not required. If you want to try implementing symbolic links in xv6, here are the files that the course staff had to change to implement them:
fs.c: 20 lines added, 4 modified
fs.h: 1 line added
syscall.c: 2 lines added
syscall.h: 1 line added
sysfile.c: 15 lines added
user.h: 1 line added
usys.S: 1 line added
Also, here is an ln program:
#include "types.h"
#include "user.h"

int
main(int argc, char *argv[])
{
  int (*ln)(char*, char*);
  
  ln = link;
  if(argc > 1 && strcmp(argv[1], "-s") == 0){
    ln = symlink;
    argc--;
    argv++;
  }
  
  if(argc != 3){
    printf(2, "usage: ln [-s] old new (%d)\n", argc);
    exit();
  }
  if(ln(argv[1], argv[2]) < 0){
    printf(2, "%s failed\n", ln == symlink ? "symlink" : "link");
    exit();
  }
  exit();
}