# Homework: Naming

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

This homework should be turned in at the beginning of lecture.

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.

Turn in 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.

This completes the homework.

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
    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();
    }