# 2.11BSD#431 - /usr/src/sbin/dump/dumpitime.c

##### Functions

    bmapest           X
    est               X
    getitime          X
    getrecord         X
    inititimes        X
    makeidate         X
    prdate            X
    putitime          X
    recout            X

##### Variables

    recno             X

       1: #if !defined(lint) && defined(DOSCCS)
       2: static  char *sccsid = "@(#)dumpitime.c	1.2 (2.11BSD GTE) 12/6/94";
       3: #endif
       4:
       5: #include "dump.h"
       6:
       7: char *prdate(d)
       8:     time_t d;
       9: {
      10:     register char *p;
      11:
      12:     if(d == 0)
      13:         return("the epoch");
      14:     p = ctime(&d);
      15:     p[24] = 0;
      16:     return(p);
      17: }
      18:
      19: inititimes()
      20: {
      21:             FILE    *df;
      22:     register    int i;
      23:     register    struct  itime   *itwalk;
      24:
      25:     if (idates_in)
      26:         return;
      27:     if ( (df = fopen(increm, "r")) == NULL){
      28:         nidates = 0;
      29:         ithead = 0;
      30:     } else {
      31:         do{
      32:             itwalk=(struct itime *)calloc(1,sizeof (struct itime));
      33:             if (getrecord(df, &(itwalk->it_value)) < 0)
      34:                 break;
      35:             nidates++;
      36:             itwalk->it_next = ithead;
      37:             ithead = itwalk;
      38:         } while (1);
      39:         fclose(df);
      40:     }
      41:
      42:     idates_in = 1;
      43:     /*
      44: 	 *	arrayify the list, leaving enough room for the additional
      45: 	 *	record that we may have to add to the idate structure
      46: 	 */
      47:     idatev = (struct idates **)calloc((unsigned)(nidates + 1), sizeof (struct idates *));
      48:     for (i = nidates-1, itwalk = ithead; i >= 0; i--, itwalk = itwalk->it_next)
      49:         idatev[i] = &itwalk->it_value;
      50: }
      51:
      52: getitime()
      53: {
      54:     register    struct  idates  *ip;
      55:     register    int i;
      56:             char    *fname;
      57:
      58:     fname = disk;
      59: #ifdef FDEBUG
      60:     msg("Looking for name %s in increm = %s for delta = %c\n",
      61:         fname, increm, incno);
      62: #endif
      63:     spcl.c_ddate = 0;
      64:     lastlevel = '0';
      65:
      66:     inititimes();
      67:     /*
      68: 	 *	Go find the entry with the same name for a lower increment
      69: 	 *	and older date
      70: 	 */
      71:     ITITERATE(i, ip){
      72:         if(strncmp(fname, ip->id_name,
      73:                 sizeof (ip->id_name)) != 0)
      74:             continue;
      75:         if (ip->id_incno >= incno)
      76:             continue;
      77:         if (ip->id_ddate <= spcl.c_ddate)
      78:             continue;
      79:         spcl.c_ddate = ip->id_ddate;
      80:         lastlevel = ip->id_incno;
      81:     }
      82: }
      83:
      84: putitime()
      85: {
      86:     FILE        *df;
      87:     register    struct  idates  *itwalk;
      88:     register    int i;
      89:     char        *fname;
      90:
      91:     if(uflag == 0)
      92:         return;
      93:     fname = disk;
      94:
      95:     spcl.c_ddate = 0;
      96:     ITITERATE(i, itwalk){
      97:         if (strncmp(fname, itwalk->id_name,
      98:                 sizeof (itwalk->id_name)) != 0)
      99:             continue;
     100:         if (itwalk->id_incno != incno)
     101:             continue;
     102:         goto found;
     103:     }
     104:     /*
     105: 	 *	construct the new upper bound;
     106: 	 *	Enough room has been allocated.
     107: 	 */
     108:     itwalk = idatev[nidates] =
     109:         (struct idates *)calloc(1, sizeof(struct idates));
     110:     nidates += 1;
     111:   found:
     112:     strncpy(itwalk->id_name, fname, sizeof (itwalk->id_name));
     113:     itwalk->id_incno = incno;
     114:     itwalk->id_ddate = spcl.c_date;
     115:
     116:     if ( (df = fopen(increm, "w")) == NULL){
     117:         msg("Cannot open %s\n", increm);
     118:         dumpabort();
     119:     }
     120:     ITITERATE(i, itwalk){
     121:         recout(df, itwalk);
     122:     }
     123:     fclose(df);
     124:     msg("level %c dump on %s\n", incno, prdate(spcl.c_date));
     125: }
     126:
     127: recout(file, what)
     128:     FILE    *file;
     129:     struct  idates  *what;
     130: {
     131:     fprintf(file, DUMPOUTFMT,
     132:         what->id_name,
     133:         what->id_incno,
     134:         ctime(&(what->id_ddate))
     135:     );
     136: }
     137:
     138: int recno;
     139: int getrecord(df, idatep)
     140:     FILE    *df;
     141:     struct  idates  *idatep;
     142: {
     143:     char    buf[BUFSIZ];
     144:
     145:     recno = 0;
     146:     if ( (fgets(buf, BUFSIZ, df)) != buf)
     147:         return(-1);
     148:     recno++;
     149:     if (makeidate(idatep, buf) < 0)
     150:         msg("Unknown intermediate format in %s, line %d\n",
     151:             NINCREM, recno);
     152:
     153: #ifdef FDEBUG
     154:     msg("getrecord: %s %c %s\n",
     155:         idatep->id_name, idatep->id_incno, prdate(idatep->id_ddate));
     156: #endif
     157:     return(0);
     158: }
     159:
     160: time_t  unctime();
     161:
     162: int makeidate(ip, buf)
     163:     struct  idates  *ip;
     164:     char    *buf;
     165: {
     166:     char    un_buf[128];
     167:
     168:     sscanf(buf, DUMPINFMT, ip->id_name, &ip->id_incno, un_buf);
     169:     ip->id_ddate = unctime(un_buf);
     170:     if (ip->id_ddate < 0)
     171:         return(-1);
     172:     return(0);
     173: }
     174:
     175: est(ip)
     176:     struct dinode *ip;
     177: {
     178:     long s;
     179:
     180:     esize++;
     181:     s = (ip->di_size + DEV_BSIZE-1) / DEV_BSIZE;
     182:     esize += s;
     183:     if(s > NADDR-3) {
     184:         /*
     185: 		 *	This code is only appproximate.
     186: 		 *	it totally estimates low on doubly and triply indirect
     187: 		 *	files.
     188: 		 */
     189:         s -= NADDR-3;
     190:         s = ((s + DEV_BSIZE/sizeof(daddr_t))-1) / (DEV_BSIZE/sizeof(daddr_t));
     191:         esize += s;
     192:     }
     193: }
     194:
     195: bmapest(map)
     196: short *map;
     197: {
     198:     register i, n;
     199:
     200:     n = -1;
     201:     for(i=0; i<MSIZ; i++)
     202:         if(map[i])
     203:             n = i;
     204:     if(n < 0)
     205:         return;
     206:     esize++;
     207:     esize += (n + (DEV_BSIZE/sizeof(short))-1) / (DEV_BSIZE/sizeof(short));
     208: }

#### Defined functions

bmapest defined in line 195; used 2 times

- in /usr/src/sbin/dump/dumpmain.c line 243-244(2)

est defined in line 175; used 2 times

- in /usr/src/sbin/dump/dumptraverse.c line 111, 126

getitime defined in line 52; used 1 times

- in /usr/src/sbin/dump/dumpmain.c line 206

getrecord defined in line 139; used 1 times

- in line 33

inititimes defined in line 19; used 2 times

- in line 66
- in /usr/src/sbin/dump/dumpoptr.c line 277

makeidate defined in line 162; used 1 times

- in line 149

prdate defined in line 7; used 5 times

- in line 124, 155
- in /usr/src/sbin/dump/dump.h line 63
- in /usr/src/sbin/dump/dumpmain.c line 209-211(2)

putitime defined in line 84; used 1 times

- in /usr/src/sbin/dump/dumpmain.c line 310

recout defined in line 127; used 1 times

- in line 121

#### Defined variables

recno defined in line 138; used 3 times

- in line 145-151(3)

sccsid defined in line 2; never used

Last modified: 1994-12-16 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 971 |