home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / ln.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  980 b   |  57 lines

  1. /*
  2.  * ln [ -f ] target [ new name ]
  3.  */
  4.  
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #include "stdio.h"
  8. char    *rindex();
  9.  
  10. main(argc, argv)
  11. char **argv;
  12. {
  13.     struct stat statb;
  14.     register char *np;
  15.     int fflag = 0;
  16.     char nb[100], *name=nb, *arg2;
  17.     int statres;
  18.  
  19.     if (argc >1 && strcmp(argv[1], "-f")==0) {
  20.         argc--;
  21.         argv++;
  22.         fflag++;
  23.     }
  24.     if (argc<2 || argc>3) {
  25.         printf("Usage: ln target [ newname ]\n");
  26.         exit(1);
  27.     }
  28.     np = rindex(argv[1], '/');
  29.     if (np==0)
  30.         np = argv[1];
  31.     else
  32.         np++;
  33.     if (argc==2)
  34.         arg2 = np;
  35.     else
  36.         arg2 = argv[2];
  37.     statres = stat(argv[1], &statb);
  38.     if (statres<0) {
  39.         printf ("ln: %s does not exist\n", argv[1]);
  40.         exit(1);
  41.     }
  42.     if (fflag==0 && (statb.st_mode&S_IFMT) == S_IFDIR) {
  43.         printf("ln: %s is a directory\n", argv[1]);
  44.         exit(1);
  45.     }
  46.     statres = stat(arg2, &statb);
  47.     if (statres>=0 && (statb.st_mode&S_IFMT) == S_IFDIR)
  48.         sprintf(name, "%s/%s", arg2, np);
  49.     else
  50.         name = arg2;
  51.     if (link(argv[1], name)<0) {
  52.         perror("ln");
  53.         exit(1);
  54.     }
  55.     exit(0);
  56. }
  57.