1BSD/s6/pq.c

Compare this file to the similar file:
Show the results in this format:

/*
 * pq - print the quota file affecting you most immediately
 *
 * Kurt Shoens UCB July, 1977
 */
     struct  {
       char  minor;	    /* +0: minor device of i-node */
       char  major;	    /* +1: major device */
       int   inumber;	    /* +2 */
       int   flags;	    /* +4: see below */
       char  nlinks;	    /* +6: number of links to file */
       char  uid;	    /* +7: user ID of owner */
       char  gid;	    /* +8: group ID of owner */
       char  size0;	    /* +9: high byte of 24-bit size */
       int   size1;	    /* +10: low word of 24-bit size */
       int   addr[8];	    /* +12: block numbers or device number */
       int   actime[2];     /* +28: time of last access */
       int   modtime[2];    /* +32: time of last modification */
     } inode;
main(ct,av)
	char **av;
{
	int i,lastnode;
	if (ct==1)
	{
		lastnode=0;
		stat(".",&inode);
		while (lastnode != inode.inumber)
		{
			lastnode=inode.inumber;
			if (quota(".q"))
			{
				pq(".q");
				exit(0);
			}
			chdir("..");
			stat(".",&inode);
		}
		exit(9);
	}
	for (i=1;i<ct;++i) pq(av[i]);
}

pq(cp)
	char *cp;
{
	float cut,a,b;
	if (stat(cp,&inode))
	{
		perror(cp);
		return;
	}
	if (!quota(cp))
	{
		printf("%s: not a q-file.\n",cp);
		return;
	}
	a = inode.addr[1];
	b = inode.addr[2];
	cut = 100.0*a/b;
	printf("%d/%d %3.0f%%\n",inode.addr[1],inode.addr[2],cut);
	return;
}

quota(cp)
	char *cp;
{
	if (stat(cp,&inode)) return(0);
	if (((inode.flags & 060000) != 020000) || (inode.addr[0]!= -1))
		return(0);
	return(-1);
}