All pastes #184706 Raw Edit

Something

public c v1 · immutable
#184706 ·published 2006-09-28 04:50 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/dir.h>#include <sys/stat.h>unsigned long long dirsiz (char *);void help ();void outull (unsigned long long);main (int a, char** v){	if (!--a)		help ();	++v;	int b;	struct stat tmp;	for (b=0;b<a;++b)	{		stat (v[b], &tmp);		printf ("%s is ", v[b]);		if (S_ISDIR (tmp.st_mode))		{			printf ("a directory, size: ");			outull (dirsiz (v[b]));		}		else		if (S_ISREG (tmp.st_mode))		{			printf ("a file, size: ");			outull (tmp.st_size);		}		else			printf ("is not a file!\n");	}	putchar ('\n');	return 0;}void help (){	printf ("Usage: siz [file/dir name]\n");	exit (0);}unsigned long long dirsiz (char *fn){	DIR *di = opendir (fn);	struct dirent *tmp;	if (!di)		exit (1);	struct stat tp;	unsigned long long ret=0;	char tstr[256];	while (tmp = readdir (di))	{		if (!strcmp (tmp->d_name, ".") || !strcmp (tmp->d_name, ".."))			continue;		strcpy (tstr, fn);		strcat (tstr, "/");		strcat (tstr, tmp->d_name);		stat (tstr, &tp);		if (S_ISDIR (tp.st_mode))			ret += dirsiz (tstr);		else			ret += tp.st_size;	}	closedir (di);	return ret;}void outull (unsigned long long var){	unsigned suffix=0;	while (var>1024)	{		var /= 1024;		++suffix;	}	unsigned m = (unsigned) var;	printf ("%d %sB\n", m, suffix==1?"K":suffix==2?"M":suffix==3?"G":suffix==4?"T":""); //lol @ "T"}