Ejemplo n.º 1
0
static void getstat(void)
{ /* set status line */
    int i;
    if (mip->ERNUM) instat(erptr,"ERROR");
    else       instat(erptr,"     ");
    if (mip->EXACT) instat(exptr,"EXACT");
    else       instat(exptr,"     ");
    if (size(m)!=0) instat(mmptr,"MEM");
    else            instat(mmptr,"   ");
    if (mip->RPOINT) instat(typtr,"POINT");
    else        instat(typtr,"FRACT");
    for (i=0;i<4;i++)
         instat(stptr[i],settings[i][option[i]]);
}
Ejemplo n.º 2
0
/*
 ****************************************************************
 *	Imprime os símbolos de um módulo			*
 ****************************************************************
 */
void
list_mod (const MOD *mp)
{
	const SYMTB	*zp;
	const char	*cp, *tp;
	STAT		s;
	char		first = 1;

	printf ("\n");

	if (vflag)
	{
		if (instat (lib_dev, mp->m_ino, &s) >= 0)
		{
			cp = modetostr (s.st_mode);
			tp = btime (&s.st_mtime);

			printf
			(	"%s %-14.14s %6d  %-5.5s %-15.15s  ", 
				cp + 14, pwcache (s.st_uid),
				s.st_size, tp, tp + 9
			);
		}
	}

	printf (mp->m_mod_nm);

	/*
	 *	Imprime os símbolos
	 */
	if (vflag)
		printf ("\n\nSímbolos: ");
	else
		printf (": ");

	for (zp = mp->m_sym; zp != NOSYMTB; zp = zp->z_sym_next)
	{
		if (first)
			first = 0;
		else
			printf (", ");

		printf ("%s", zp->z_sym_nm);
	}

	printf ("\n");

}	/* end list_mod */
Ejemplo n.º 3
0
/*
 ****************************************************************
 *	Calcula o total de uma <árvore>				*
 ****************************************************************
 */
long
file_analysis (const char *file_nm, int file_len, int dev, int ino, int root)
{
	DIR		*dir_fd;
	const DIRENT	*dp;
	long		dir_total = 0;
	char		*memnm;
	STAT		s;
	NAME		name_list, *lp, *ip;

	if (gflag)
		error ("file_analysis (%s, %d)", file_nm, root);

	/*
	 *	Inicialmente, obtém o estado do arquivo
	 */
	if (instat (dev, ino, &s) < 0)
	{
		error ("*Não consegui obter o estado de \"%s\"", file_nm);
		ret++;
		return (0);
	}

	/*
	 ******	Arquivo NÃO-diretório ***********************************
	 */
	if (!S_ISDIR (s.st_mode))
	{
		int		blsize;

		if (!pattern_accept (file_nm))
			return (0);

		if (s.st_nlink > 1 && proc_link (&s))
		{
			if (gflag)
				printf ("L %s\n", file_nm);

			return (0);
		}

		blsize = round_file_size_to_BL (&s);

		if (aflag && !root)
			printf (du_fmt, edit_sz_value (blsize), file_nm);

		return (blsize);
	}

	/*
	 ******	Diretório ***********************************************
	 */
	if ((dir_fd = inopendir (s.st_dev, s.st_ino)) == NODIR)
	{
		error ("*Não consegui abrir o diretório \"%s\"", file_nm);
		ret++; return (0);
	}

	/*
	 *	Lê o conteúdo do diretório
	 */
	name_list.i_next = NONAME;

	ip = alloca (sizeof (NAME));

	while ((dp = readdir (dir_fd)) != NODIRENT)
	{
		if (dp->d_name[0] == '.')
		{
			if   (!dotflag)
				continue;
			elif (dp->d_name[1] == '\0')
				continue;
			elif (dp->d_name[1] == '.' && dp->d_name[2] == '\0')
				continue;
		}

		ip->i_nm = alloca (dp->d_namlen + 1);

		strcpy (ip->i_nm, dp->d_name);
		ip->i_len = dp->d_namlen;

		ip->i_ino = dp->d_ino;

		/*
		 *	Completa os campos de NAME
		 */
	   /***	ip->i_nm   = ... ***/	/* Acima */
	   /***	ip->i_s    = ... ***/	/* Acima */
	   /***	ip->i_next = ... ***/	/* Abaixo  */

		/*
		 *	Insere na lista
		 */
		for (lp = &name_list; lp->i_next != NONAME; lp = lp->i_next)
		{
			if (strcmp (ip->i_nm, lp->i_next->i_nm) <= 0)
				break;
		}

		ip->i_next = lp->i_next;
		lp->i_next = ip;

		ip = alloca (sizeof (NAME));	/* Já aloca um seguinte */

	}	/* end lendo o diretório */

	closedir (dir_fd);

	/*
	 *	Agora, processa a lista
	 */
	for (ip = name_list.i_next; ip != NONAME; ip = ip->i_next)
	{
		int	len = file_len + ip->i_len + 1;

		memnm = alloca (len + 1);

		if (streq (file_nm, "."))
		{
			strcpy (memnm, ip->i_nm);
			len = ip->i_len;
		}
		else
		{
			strcpy (memnm, file_nm);
			strcat (memnm, "/");
			strcat (memnm, ip->i_nm);
		}

		dir_total += file_analysis (memnm, len, s.st_dev, ip->i_ino, 0 /* Not root */);
	}

	/*
	 *	Terminou de processar o diretório
	 *	Não esquecer de contar o tamanho do próprio diretório
	 */
	dir_total += round_file_size_to_BL (&s);

	if (dflag && !root)
		printf (du_fmt, edit_sz_value (dir_total), file_nm);

	return (dir_total);

}	/* end file_analysis */