Annotation of coherent/f/f0/cpdir.diff, revision 1.1

1.1     ! root        1: 2,6 c 2,3
        !             2: <  * cpdir.c
        !             3: <  * DON"T USE THIS SOURCE!  MAY REBOOT THE SYSTEM ON BIG CPDIRS!
        !             4: <  * Copy hierarchies in a file system, preserving structure.
        !             5: <  * Needs directory stuff in headers: cc -D__KERNEL__ cpdir.c
        !             6: <  * Define SLOW for 'block at a time copying' - not recommended.
        !             7: ---
        !             8: >  * Cpdir. Copy hierarchies in a file system, preserving structure.
        !             9: >  *     Define SLOW for 'block at a time copying' - not recommended tho.
        !            10: 8,13 d 4
        !            11: < 
        !            12: < /*
        !            13: <  * Known bug: if dir1/a and dir1/b are linked, and dir2/b exists,
        !            14: <  * cpdir -u dir1 dir2 creates new dir2/a not linked to dir2/b.
        !            15: <  */
        !            16: < 
        !            17: 15,16 d 5
        !            18: < #include <stdlib.h>
        !            19: < #include <string.h>
        !            20: 21 c 10
        !            21: < #include <sys/uproc.h>
        !            22: ---
        !            23: > #include <sys/dir.h>
        !            24: 26,33 c 15
        !            25: < extern       long    lseek();
        !            26: < 
        !            27: < /* Avoid conflicts with headers, bogus nachos. */
        !            28: < #undef       hash
        !            29: < #undef       DIRBUF
        !            30: < 
        !            31: < /* Manifest constants. */
        !            32: < #define      VERSION         "1.2"
        !            33: ---
        !            34: > #define      VERSION         "1.1"
        !            35: 43,44 d 24
        !            36: < #define      TRUE            (0==0)
        !            37: < #define      FALSE           (0==1)
        !            38: 46 d 25
        !            39: < /* Macros. */
        !            40: 49,50 c 28,29
        !            41: < /* Type definitions. */
        !            42: < typedef      char            bool;
        !            43: ---
        !            44: > #define      TRUE            (0==0)
        !            45: > #define      FALSE           (0==1)
        !            46: 52 c 31,37
        !            47: < typedef      union   {
        !            48: ---
        !            49: > typedef      char            bool;
        !            50: > typedef      unsigned char   uchar;
        !            51: > typedef      unsigned int    uint;
        !            52: > typedef      unsigned short  ushort;
        !            53: > typedef      unsigned long   ulong;
        !            54: > 
        !            55: > typedef union {
        !            56: 59 d 43
        !            57: < /* Link tables keep track of whether links have been properly preserved. */
        !            58: 65 c 49
        !            59: <      uint_t          l_nlink;
        !            60: ---
        !            61: >      uint            l_nlink;
        !            62: 74 a 59
        !            63: > 
        !            64: 77 a 63
        !            65: > extern       int     errno;
        !            66: 125 a 112,113
        !            67: > char *dot =          ".";
        !            68: > char *dotdot =       "..";
        !            69: 130 a 119
        !            70: > char *usage =        "usage: cpdir [options] dir1 dir2";
        !            71: 136 a 126
        !            72: > char *nomemory =     "out of memory";
        !            73: 147 a 138
        !            74: > long lseek();
        !            75: 149,154 c 140,141
        !            76: < bool dirchecks();
        !            77: < bool suppress();
        !            78: < LINK *linklocate();
        !            79: < LINK *linkinstall();
        !            80: < bool linkattempt();
        !            81: < bool tgtunlink();
        !            82: ---
        !            83: > char *realloc();
        !            84: > char *rindex();
        !            85: 156 a 144
        !            86: > bool suppress();
        !            87: 157 a 146,150
        !            88: > bool dirchecks();
        !            89: > bool linkattempt();
        !            90: > bool tgtunlink();
        !            91: > LINK *linklocate();
        !            92: > LINK *linkinstall();
        !            93: 168 c 161
        !            94: <      return exitval;
        !            95: ---
        !            96: >      return (exitval);
        !            97: 177,178 c 170,173
        !            98: <              if ((cp = *++av) == NULL)
        !            99: <                      usage();
        !           100: ---
        !           101: >              if ((cp = *++av) == NULL) {
        !           102: >                      errprint(fmt1, usage);
        !           103: >                      exit(1);
        !           104: >              }
        !           105: 220 c 215,216
        !           106: <                              usage();
        !           107: ---
        !           108: >                              errprint(fmt1, usage);
        !           109: >                              exit(1);
        !           110: 225,226 c 221,225
        !           111: <      if ((dir1=*av++) == NULL  ||  (dir2=*av++) == NULL  ||  *av != NULL)
        !           112: <              usage();
        !           113: ---
        !           114: >      if ((dir1=*av++) == NULL  ||  (dir2=*av++) == NULL  ||  *av != NULL) {
        !           115: >              errprint(fmt1, usage);
        !           116: >              exit(1);
        !           117: >      }
        !           118: >      return;
        !           119: 272,275 c 271,278
        !           120: <      if (stat(dir1, &srcstat) < 0)
        !           121: <              fatal(fmt2, dir1, nofind);
        !           122: <      if ((srcstat.st_mode & S_IFMT) != S_IFDIR)
        !           123: <              fatal(fmt2, dir1, notdir);
        !           124: ---
        !           125: >      if (stat(dir1, &srcstat) < 0) {
        !           126: >              errprint(fmt2, dir1, nofind);
        !           127: >              exit(1);
        !           128: >      }
        !           129: >      if ((srcstat.st_mode & S_IFMT) != S_IFDIR) {
        !           130: >              errprint(fmt2, dir1, notdir);
        !           131: >              exit(1);
        !           132: >      }
        !           133: 279,282 c 282,289
        !           134: <              if (stat(cp, &tgtstat) < 0)
        !           135: <                      fatal(fmt2, dir2, "cannot find parent");
        !           136: <              if (access(cp, AWRITE|ASRCH) < 0)
        !           137: <                      fatal(fmt2, dir2, nomkdir);
        !           138: ---
        !           139: >              if (stat(cp, &tgtstat) < 0) {
        !           140: >                      errprint(fmt2, dir2, "cannot find parent");
        !           141: >                      exit(1);
        !           142: >              }
        !           143: >              if (access(cp, AWRITE|ASRCH) < 0) {
        !           144: >                      errprint(fmt2, dir2, nomkdir);
        !           145: >                      exit(1);
        !           146: >              }
        !           147: 291 a 299
        !           148: >      return;
        !           149: 296,300 c 304,307
        !           150: <  * Assume:
        !           151: <  * Source is a directory we can read and search. Srcstat contains its status.
        !           152: <  * Target is a directory we can write and search. Tgtstat contains its status.
        !           153: <  * Src_dev and tgt_dev are the devices of the parents of source and target.
        !           154: <  * If tflag is on target may not exist. In this case tgtstat.st_dev
        !           155: ---
        !           156: >  * Assume: Source is a directory we can read and search. Srcstat contains its
        !           157: >  * status. Target is a directory we can write and search. Tgtstat contains its
        !           158: >  * status. Src_dev and tgt_dev are the devices of the parents of source and
        !           159: >  * target. If tflag is on target may not exist. In this case tgtstat.st_dev
        !           160: 370,371 c 377,378
        !           161: <                  !strcmp(dbp->db_name, ".")  ||
        !           162: <                  !strcmp(dbp->db_name, ".."))
        !           163: ---
        !           164: >                  !strcmp(dbp->db_name, dot)  ||
        !           165: >                  !strcmp(dbp->db_name, dotdot))
        !           166: 426 c 433
        !           167: <                                      "cannot reopen, copy incomplete");
        !           168: ---
        !           169: >                              "cannot reopen, copy incomplete");
        !           170: 441 a 449
        !           171: >      return;
        !           172: 466 d 473
        !           173: <      LINK *lp;
        !           174: 473 c 480
        !           175: <      if (uflag && stat(target, &tgtstat) == 0)
        !           176: ---
        !           177: >      if (uflag  &&  stat(target, &tgtstat) == 0)
        !           178: 475,478 d 481
        !           179: <                      /*
        !           180: <                       * Target exists and is not older, do not update.
        !           181: <                       * But watch out for links and keep the link counts sane.
        !           182: <                       */
        !           183: 481,492 d 483
        !           184: <                      if (srcstat.st_nlink > 1) {
        !           185: <                              if ((lp = linklocate(SOURCE)) == NULL)
        !           186: <                                      linkinstall(SOURCE);
        !           187: <                              else if (lp->l_nlink == 0)
        !           188: <                                      linkpurge(SOURCE, lp);
        !           189: <                      }
        !           190: <                      if (tgtstat.st_nlink > 1) {
        !           191: <                              if ((lp = linklocate(TARGET)) == NULL)
        !           192: <                                      linkinstall(TARGET);
        !           193: <                              else if (lp->l_nlink == 0)
        !           194: <                                      linkpurge(TARGET, lp);
        !           195: <                      }
        !           196: 547 c 538
        !           197: <                                      return FALSE;
        !           198: ---
        !           199: >                                      return (FALSE);
        !           200: 558 c 549
        !           201: <                      return FALSE;
        !           202: ---
        !           203: >                      return (FALSE);
        !           204: 574 c 565
        !           205: <                      return FALSE;
        !           206: ---
        !           207: >                      return (FALSE);
        !           208: 590,591 c 581,582
        !           209: <      else
        !           210: <              vprintf();
        !           211: ---
        !           212: >      else vprintf();
        !           213: >      return;
        !           214: 619 a 611
        !           215: >      return;
        !           216: 636,637 c 628,631
        !           217: <              if ((source = realloc(source, a+b)) == NULL)
        !           218: <                      nomemory();
        !           219: ---
        !           220: >              if ((source = realloc(source, a+b)) == NULL) {
        !           221: >                      errprint(fmt1, nomemory);
        !           222: >                      exit(1);
        !           223: >              }
        !           224: 646,647 c 640,643
        !           225: <              if ((target = realloc(target, a+b)) == NULL)
        !           226: <                      nomemory();
        !           227: ---
        !           228: >              if ((target = realloc(target, a+b)) == NULL) {
        !           229: >                      errprint(fmt1, nomemory);
        !           230: >                      exit(1);
        !           231: >              }
        !           232: 667 a 664
        !           233: >      return;
        !           234: 690 c 687
        !           235: <      return sum;
        !           236: ---
        !           237: >      return (sum);
        !           238: 704 a 702
        !           239: >      return;
        !           240: 707,713 d 704
        !           241: < fatal(arg)
        !           242: < char *arg[];
        !           243: < {
        !           244: <      errprint("%r", &arg);
        !           245: <      exit(1);
        !           246: < }
        !           247: < 
        !           248: 722,724 c 713,717
        !           249: <      if ((cp = malloc(n)) == NULL)
        !           250: <              nomemory();
        !           251: <      return cp;
        !           252: ---
        !           253: >      if ((cp = malloc(n)) == NULL) {
        !           254: >              errprint(fmt1, nomemory);
        !           255: >              exit(1);
        !           256: >      }
        !           257: >      return (cp);
        !           258: 740 a 734,736
        !           259: >      register int n;
        !           260: >      static int status;
        !           261: > 
        !           262: 743 c 739
        !           263: <              return FALSE;
        !           264: ---
        !           265: >              return (FALSE);
        !           266: 749 c 745
        !           267: <                      return FALSE;
        !           268: ---
        !           269: >                      return (FALSE);
        !           270: 753 c 749
        !           271: <                      return FALSE;
        !           272: ---
        !           273: >                      return (FALSE);
        !           274: 755 c 751
        !           275: <              return TRUE;
        !           276: ---
        !           277: >              return (TRUE);
        !           278: 760 c 756
        !           279: <              return TRUE;
        !           280: ---
        !           281: >              return (TRUE);
        !           282: 765 c 761
        !           283: <              return FALSE;
        !           284: ---
        !           285: >              return (FALSE);
        !           286: 770 c 766
        !           287: <              return FALSE;
        !           288: ---
        !           289: >              return (FALSE);
        !           290: 772 c 768
        !           291: <      return TRUE;
        !           292: ---
        !           293: >      return (TRUE);
        !           294: 788 a 785
        !           295: >      return;
        !           296: 803 c 800
        !           297: <              return FALSE;
        !           298: ---
        !           299: >              return (FALSE);
        !           300: 810 c 807
        !           301: <                      return TRUE;
        !           302: ---
        !           303: >                      return (TRUE);
        !           304: 815 c 812
        !           305: <      return FALSE;
        !           306: ---
        !           307: >      return (FALSE);
        !           308: 819 c 816
        !           309: < register uchar_t *cp;
        !           310: ---
        !           311: > register uchar *cp;
        !           312: 821 c 818
        !           313: <      register uint_t sum = 0;
        !           314: ---
        !           315: >      register uint sum = 0;
        !           316: 824 c 821
        !           317: <      return sum % HASHSIZE;
        !           318: ---
        !           319: >      return (sum % HASHSIZE);
        !           320: 827,831 d 823
        !           321: < /*
        !           322: <  * Look for a LINK entry in the source or target link table.
        !           323: <  * If found, decrement the link count field and return a pointer to the LINK.
        !           324: <  * If not found, return NULL.
        !           325: <  */
        !           326: 842 c 834,835
        !           327: <      } else {
        !           328: ---
        !           329: >      }
        !           330: >      else {
        !           331: 853 c 846
        !           332: <              return lp;
        !           333: ---
        !           334: >              return (lp);
        !           335: 855 c 848
        !           336: <      return NULL;
        !           337: ---
        !           338: >      return (NULL);
        !           339: 858,861 d 850
        !           340: < /*
        !           341: <  * Create a new LINK table entry and add it to the source or target LINK table.
        !           342: <  * Initialize its link count to nlinks - 1.
        !           343: <  */
        !           344: 892 c 881
        !           345: <      return lp;
        !           346: ---
        !           347: >      return (lp);
        !           348: 895,897 d 883
        !           349: < /*
        !           350: <  * Purge LINK entry lp from the source or target LINK table.
        !           351: <  */
        !           352: 920 a 907
        !           353: >      return;
        !           354: 923,927 d 909
        !           355: < /*
        !           356: <  * The source file has a link count greater than 1.
        !           357: <  * If the source file is not in the source LINK list already,
        !           358: <  * add it to the list and return FALSE.
        !           359: <  */
        !           360: 935 d 916
        !           361: <      ret = TRUE;
        !           362: 937,938 c 918,919
        !           363: <              linkinstall(SOURCE);            /* add new source LINK */
        !           364: <              return FALSE;
        !           365: ---
        !           366: >              linkinstall(SOURCE);
        !           367: >              return (FALSE);
        !           368: 942 c 923
        !           369: <      if (tflag) {                            /* test only */
        !           370: ---
        !           371: >      if (tflag) {
        !           372: 947 c 928,929
        !           373: <              } else
        !           374: ---
        !           375: >              }
        !           376: >              else {
        !           377: 949 c 931,934
        !           378: <      } else if (link(cp, target) == 0) {     /* link succeeded */
        !           379: ---
        !           380: >                      ret = TRUE;
        !           381: >              }
        !           382: >      }
        !           383: >      else if (link(cp, target) == 0) {
        !           384: 951 c 936,938
        !           385: <      } else {                                /* link failed */
        !           386: ---
        !           387: >              ret = TRUE;
        !           388: >      }
        !           389: >      else {
        !           390: 959 c 946
        !           391: <      return ret;
        !           392: ---
        !           393: >      return (ret);
        !           394: 962,966 d 948
        !           395: < /*
        !           396: <  * Unlink the target.
        !           397: <  * Return TRUE if the unlink is successful (or target does not exist)
        !           398: <  * or FALSE if the unlink fails.
        !           399: <  */
        !           400: 973 c 955
        !           401: <              return TRUE;
        !           402: ---
        !           403: >              return (TRUE);
        !           404: 976,979 c 958
        !           405: <              return FALSE;
        !           406: <      } else if ((tgtstat.st_mode & S_IFMT) != (srcstat.st_mode & S_IFMT)) {
        !           407: <              errprint(fmt3, source, "file type mismatch with ", target);
        !           408: <              return FALSE;
        !           409: ---
        !           410: >              return (FALSE);
        !           411: 980 a 960,963
        !           412: >      else if ((tgtstat.st_mode & S_IFMT) != (srcstat.st_mode & S_IFMT)) {
        !           413: >              errprint(fmt3, source, "file type mismatch with ", target);
        !           414: >              return (FALSE);
        !           415: >      }
        !           416: 981 a 965,969
        !           417: >      if (!tflag)
        !           418: >              if (unlink(target) < 0) {
        !           419: >                      errprint(fmt2, target, nounlink);
        !           420: >                      return (FALSE);
        !           421: >              }
        !           422: 984,987 d 971
        !           423: <      else if (unlink(target) < 0) {
        !           424: <              errprint(fmt2, target, nounlink);
        !           425: <              return FALSE;                   /* unlink failed */
        !           426: <      }
        !           427: 989,990 c 973
        !           428: <      /* The unlink succeeded, decrement the target link count. */
        !           429: <      if ((lp = linklocate(TARGET)) != NULL) {        /* target LINK exists */
        !           430: ---
        !           431: >      if ((lp = linklocate(TARGET)) != NULL) {
        !           432: 993,995 c 976,979
        !           433: <      } else if (tgtstat.st_nlink > 1)
        !           434: <              linkinstall(TARGET);            /* add new target LINK */
        !           435: <      return TRUE;
        !           436: ---
        !           437: >      }
        !           438: >      else if (tgtstat.st_nlink > 1)
        !           439: >              linkinstall(TARGET);
        !           440: >      return (TRUE);
        !           441: 998,1001 d 981
        !           442: < /*
        !           443: <  * Report on link botches.
        !           444: <  * This information is not known until the actual copying is finished.
        !           445: <  */
        !           446: 1026 a 1007
        !           447: >      return;
        !           448: 1048 a 1030
        !           449: >      return;
        !           450: 1073 c 1055
        !           451: <      return ret;
        !           452: ---
        !           453: >      return (ret);
        !           454: 1086 c 1068
        !           455: <              return ".";
        !           456: ---
        !           457: >              return (dot);
        !           458: 1089 c 1071
        !           459: <      return ret;
        !           460: ---
        !           461: >      return (ret);
        !           462: 1097 d 1078
        !           463: < 
        !           464: 1100,1101 c 1081,1082
        !           465: <                      return FALSE;
        !           466: <      return TRUE;
        !           467: ---
        !           468: >                      return (FALSE);
        !           469: >      return (TRUE);
        !           470: 1142,1154 d 1122
        !           471: < 
        !           472: < usage()
        !           473: < {
        !           474: <      fprintf(stderr, "Usage: cpdir [options] dir1 dir2\n");
        !           475: <      exit(1);
        !           476: < }
        !           477: < 
        !           478: < nomemory()
        !           479: < {
        !           480: <      fatal(fmt1, "out of memory");
        !           481: < }
        !           482: < 
        !           483: < /* end of cpdir.c */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.