Patch #: 27 Type: operational change Priority: none Modification: maintain Mac create/modify times on file copy Submitted: David Hornsby Archived: munnari.OZ.AU mac/cap.patches/cap60.patch027 Summary: extend .finderinfo files to store date information WARNING: patch 27 modifies include file, 'make include' required File: cap60/Configure File: cap60/netat/macfile.h File: cap60/applications/aufs/afpos.c File: cap60/applications/aufs/afposfi.c *** Configure.orig Thu Jun 13 21:29:46 1991 --- Configure Thu Jun 13 21:31:37 1991 *************** *** 1,7 **** #!/bin/sh ! # $Author: djh $ $Date: 1991/05/29 12:23:59 $ ! # $Header: /mac/src/cap60/RCS/Configure,v 2.10 1991/05/29 12:23:59 djh Rel djh $ ! # $Revision: 2.10 $ # CAP configuration shell script. This ain't perfect, but it's a start. # Execute with /bin/sh Configure if your system won't run it (ksh is okay too) # --- 1,7 ---- #!/bin/sh ! # $Author: djh $ $Date: 1991/06/13 11:31:28 $ ! # $Header: /mac/src/cap60/RCS/Configure,v 2.11 1991/06/13 11:31:28 djh Rel djh $ ! # $Revision: 2.11 $ # CAP configuration shell script. This ain't perfect, but it's a start. # Execute with /bin/sh Configure if your system won't run it (ksh is okay too) # *************** *** 460,465 **** --- 460,468 ---- # # + ULTRIX_SECURITY adds ULTRIX enhanced security to aufs # define(`specialcflags',concat(specialcflags,` -DULTRIX_SECURITY')) + # + # + USE_MAC_DATES maintains Mac Create/Modify dates on file copy + # define(`specialcflags',concat(specialcflags,` -DUSE_MAC_DATES')) # EOT0 result=0 *** netat/macfile.h.orig Thu Feb 28 23:43:38 1991 --- netat/macfile.h Thu Jun 13 21:15:17 1991 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 91/02/15 22:59:20 $ ! * $Header: macfile.h,v 2.1 91/02/15 22:59:20 djh Rel $ ! * $Revision: 2.1 $ */ /* --- 1,7 ---- /* ! * $Author: djh $ $Date: 1991/06/13 11:14:52 $ ! * $Header: /mac/src/cap60/netat/RCS/macfile.h,v 2.2 1991/06/13 11:14:52 djh Rel djh $ ! * $Revision: 2.2 $ */ /* *************** *** 51,56 **** --- 51,65 ---- byte fi_macfilename[32+1]; /* possible macintosh file name */ byte fi_comln; /* comment length */ byte fi_comnt[MAXCLEN+1]; /* comment string */ + #ifdef USE_MAC_DATES + byte fi_datemagic; /* sanity check */ + #define FI_MDATE 0x01 /* mtime & utime are valid */ + #define FI_CDATE 0x02 /* ctime is valid */ + byte fi_datevalid; /* validity flags */ + byte fi_ctime[4]; /* mac file create time */ + byte fi_mtime[4]; /* mac file modify time */ + byte fi_utime[4]; /* (real) time mtime was set */ + #endif USE_MAC_DATES } FileInfo; /* Atribute flags */ *** applications/aufs/afpos.c.orig Wed May 29 19:15:37 1991 --- applications/aufs/afpos.c Thu Jun 13 21:17:33 1991 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 1991/05/29 09:15:27 $ ! * $Header: /mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.9 1991/05/29 09:15:27 djh Exp djh $ ! * $Revision: 2.9 $ */ /* --- 1,7 ---- /* ! * $Author: djh $ $Date: 1991/06/13 11:17:11 $ ! * $Header: /mac/src/cap60/applications/aufs/RCS/afpos.c,v 2.10 1991/06/13 11:17:11 djh Rel djh $ ! * $Revision: 2.10 $ */ /* *************** *** 1274,1283 **** /* pick out the earliest date for mac creation time */ sometime = (buf.st_mtime > buf.st_ctime) ? buf.st_ctime : buf.st_mtime; fdp->fdp_cdate = (sometime > buf.st_atime) ? buf.st_atime : sometime; ! /* pick the later of status change and modification for */ ! /* mac modified */ fdp->fdp_mdate = (buf.st_mtime < buf.st_ctime) ? buf.st_ctime : buf.st_mtime; fdp->fdp_bdate = 0; fdp->fdp_zero = 0; /* zero the zero byte (?) */ #ifdef SHORT_NAMES --- 1274,1291 ---- /* pick out the earliest date for mac creation time */ sometime = (buf.st_mtime > buf.st_ctime) ? buf.st_ctime : buf.st_mtime; fdp->fdp_cdate = (sometime > buf.st_atime) ? buf.st_atime : sometime; ! /* pick the later of status change and modification for mac modified */ fdp->fdp_mdate = (buf.st_mtime < buf.st_ctime) ? buf.st_ctime : buf.st_mtime; + #ifdef USE_MAC_DATES + { time_t when; + OSGetCDate(ipdir,fn,&fdp->fdp_cdate); + if (OSGetMDate(ipdir,fn,&sometime,&when) == noErr) + if (fdp->fdp_mdate < (when+5)) /* fuzz factor */ + fdp->fdp_mdate = sometime; + } + #endif USE_MAC_DATES + fdp->fdp_bdate = 0; fdp->fdp_zero = 0; /* zero the zero byte (?) */ #ifdef SHORT_NAMES *************** *** 1607,1617 **** { word bm = fdp->fdp_fbitmap; if (bm & (FP_FINFO|FP_ATTR|FP_PDOS)) OSSetFA(ipdir,fn,fdp->fdp_fbitmap,fdp); return(noErr); } - /* * OSSetDirParms --- 1615,1629 ---- { word bm = fdp->fdp_fbitmap; + #ifdef USE_MAC_DATES + if (bm & (FP_FINFO|FP_ATTR|FP_PDOS|FP_CDATE|FP_MDATE)) + #else USE_MAC_DATES if (bm & (FP_FINFO|FP_ATTR|FP_PDOS)) + #endif USE_MAC_DATES OSSetFA(ipdir,fn,fdp->fdp_fbitmap,fdp); + return(noErr); } /* * OSSetDirParms *** applications/aufs/afposfi.c.orig Thu Feb 28 23:44:27 1991 --- applications/aufs/afposfi.c Thu Jun 13 21:21:22 1991 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 91/02/15 21:08:41 $ ! * $Header: afposfi.c,v 2.1 91/02/15 21:08:41 djh Rel $ ! * $Revision: 2.1 $ */ /* --- 1,7 ---- /* ! * $Author: djh $ $Date: 1991/06/13 11:21:02 $ ! * $Header: /mac/src/cap60/applications/aufs/RCS/afposfi.c,v 2.2 1991/06/13 11:21:02 djh Rel djh $ ! * $Revision: 2.2 $ */ /* *************** *** 556,561 **** --- 556,578 ---- else fi->fi_attr &= ~attr; } + + #ifdef USE_MAC_DATES + if (bm & FP_CDATE) { + fi->fi_datemagic = FI_MAGIC; + fi->fi_datevalid |= FI_CDATE; + bcopy(&fdp->fdp_cdate,fi->fi_ctime,sizeof(fi->fi_ctime)); + } + if (bm & FP_MDATE) { + time_t when; + time(&when); + fi->fi_datemagic = FI_MAGIC; + fi->fi_datevalid |= FI_MDATE; + bcopy(&when,fi->fi_utime,sizeof(fi->fi_utime)); + bcopy(&fdp->fdp_mdate,fi->fi_mtime,sizeof(fi->fi_mtime)); + } + #endif USE_MAC_DATES + if (bm & FP_FINFO) { bcopy(fdp->fdp_finfo,fi->fi_fndr,FINFOLEN); if (!(bm & FP_PDOS)) /* setting finder info BUT NOT PRODOS */ *************** *** 566,572 **** --- 583,593 ---- if (!(bm & FP_FINFO)) /* setting PRODOS info BUT NOT finder */ mapPDOS2FNDR(fdp,fi); /* derive suitable fdCreator & fdType */ + #ifdef USE_MAC_DATES + if (bm & (FP_ATTR|FP_FINFO|FP_PDOS|FP_CDATE|FP_MDATE)) + #else USE_MAC_DATES if (bm & (FP_ATTR|FP_FINFO|FP_PDOS)) + #endif USE_MAC_DATES WriteFA(pdir,fn,fi); return(noErr); } *************** *** 631,636 **** --- 652,689 ---- bcopy(fi->fi_comnt,cs,*cl); return(noErr); } + + #ifdef USE_MAC_DATES + OSGetCDate(pdir,fn,cdate) + IDirP pdir; + char *fn; + time_t *cdate; + { + FileInfo *fi; + + fi = os_getfi(pdir,fn); + if (fi->fi_datemagic != FI_MAGIC || (!(fi->fi_datevalid & FI_CDATE))) + return(-1); + bcopy(fi->fi_ctime,cdate,sizeof(fi->fi_ctime)); + return(noErr); + } + + OSGetMDate(pdir,fn,mdate,udate) + IDirP pdir; + char *fn; + time_t *mdate; + time_t *udate; + { + FileInfo *fi; + + fi = os_getfi(pdir,fn); + if (fi->fi_datemagic != FI_MAGIC || (!(fi->fi_datevalid & FI_MDATE))) + return(-1); + bcopy(fi->fi_mtime,mdate,sizeof(fi->fi_mtime)); + bcopy(fi->fi_utime,udate,sizeof(fi->fi_utime)); + return(noErr); + } + #endif USE_MAC_DATES /* * Establish the mac file name after a os_move *** README.orig Thu Jun 13 21:12:40 1991 --- README Thu Jun 13 21:12:59 1991 *************** *** 3,9 **** (For use with AppleTalk/Ethernet bridge) o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 26, June 1991 Introduction ------------ --- 3,9 ---- (For use with AppleTalk/Ethernet bridge) o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 27, June 1991 Introduction ------------