home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / sco-crash / inodes.c < prev    next >
C/C++ Source or Header  |  1989-02-03  |  2KB  |  80 lines

  1. #include <sys/param.h>
  2. #include <sys/sysmacros.h>
  3. #include <sys/types.h>
  4. #include <sys/var.h>
  5. #include <sys/inode.h>
  6. #include <a.out.h>
  7. #include "crash.h"
  8.  
  9. prinodes (items, cnt)
  10. int    *items;
  11. int    cnt;
  12. {
  13.     int    i;
  14.  
  15.     inodes = (struct inode *) malloc (v.v_inode * sizeof (struct inode));
  16.     l_lseek (kmemfd, namelist[NM_INODE].xl_value, 0);
  17.     r_read (kmemfd, inodes, sizeof (struct inode) * v.v_inode);
  18.  
  19.     printf ("SLOT MAJ  MIN INUMB REF LINK  UID  GID     SIZE    MODE SMAJ SMIN FLAGS\n");
  20.  
  21.     if (cnt == 0) {
  22.         for (i = 0;i < v.v_inode;i++) {
  23.             if (inodes[i].i_count == 0)
  24.                 continue;
  25.  
  26.             doinode (i);
  27.         }
  28.     } else {
  29.         for (i = 0;i < cnt;i++) {
  30.             if (items[i] >= v.v_inode)
  31.                 printf ("value (%d) out of range\n", items[i]);
  32.             else
  33.                 doinode (items[i]);
  34.         }
  35.     }
  36.     free ((char *) inodes);
  37. }
  38.     
  39. doinode (i)
  40. int    i;
  41. {
  42.     char    *modes = " pcCd bBf";
  43.     struct    inode    *ip;
  44.  
  45.     ip = &inodes[i];
  46.  
  47.     printf ("%4d %03o %04o %5d %3d %4d%5d%5d %8ld %c%c%c%c%03o",
  48.         i, major (ip->i_dev), minor (ip->i_dev), ip->i_number,
  49.         ip->i_count, ip->i_nlink, ip->i_uid, ip->i_gid,
  50.         ip->i_size,
  51.         modes[(ip->i_mode & IFMT) >> 12],
  52.         (ip->i_mode & ISUID) ? 'u':'-',
  53.         (ip->i_mode & ISGID) ? 'g':'-',
  54.         (ip->i_mode & ISVTX) ? 't':'-',
  55.         (ip->i_mode & 0777));
  56.  
  57.     if (! (((ip->i_mode & IFMT) == IFDIR) ||
  58.         ((ip->i_mode & IFMT) == IFREG) ||
  59.         ((ip->i_mode & IFMT) == IFIFO)))
  60.         printf (" %04o %04o", major (ip->i_rdev),
  61.                     minor (ip->i_rdev));
  62.     else
  63.         printf ("    -    -");    /* special file stuff */
  64.     if (ip->i_flag & IUPD)        printf (" upd");
  65.     if (ip->i_flag & IACC)        printf (" acc");
  66.     if (ip->i_flag & ICHG)        printf (" chg");
  67.     if (ip->i_flag & IMOUNT)    printf (" mnt");
  68.     if (ip->i_flag & ITEXT)        printf (" txt");
  69.     if (ip->i_flag & ILOCK)        printf (" lck");
  70. #ifdef    ISYN
  71.     if (ip->i_flag & ISYN)        printf (" syn");
  72. #endif
  73. #ifdef    IRMT
  74.     if (ip->i_flag & IRMT)        printf (" rmt");
  75. #endif
  76.     if (ip->i_flag & IWANT)        printf (" wnt");
  77.  
  78.     printf ("\n");
  79. }
  80.