[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ascii \177 char in filename



On Mon, May 21, 2001 at 06:31:38PM -0700, Eric G. Miller wrote:

Okay, I'm really bored so I whipped this up real quick. USE AT YOUR OWN
PERIL!

To compile:
$ gcc -Wall -o badfile badfile.c

Run in each directory (directory is hardcoded to "./")
$ ./badfile

Luck,
-- 
Eric G. Miller <egm2@jps.net>
#include <stdio.h>
#include <ctype.h>
#include <stddef.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>

int main (void)
{
	char *p, buf[NAME_MAX + 1];
	DIR *directory;
	union {
	   struct dirent d;
	   char   b[offsetof (struct dirent, d_name) + NAME_MAX + 1];
	} u;
	struct dirent *d;
	size_t len;
	int flag = 0;
	
	directory = opendir ("./");
	fprintf (stderr, "Examining...\n");
	while (readdir_r (directory, &u.d, &d) == 0 && d != NULL)
	{
		len = d->d_reclen;
		if ((len == 1 && d->d_name[0] == '.')
		    || (len == 2 && d->d_name[0] == '.' && d->d_name[1] == '.'))
		{
			fprintf (stderr, "Skipping <%s>\n", d->d_name);
			continue;
		}
		strncpy (buf, d->d_name, len);
		
		flag = 0;
		for (p = buf; *p ; p++)
		{
			if (!isprint (*p))
			{
				*p = '_';
				flag = 1;
			}
		}

		if (flag)
		{
			fprintf (stderr, "Renaming a bad file to <%s>\n",  buf);
			rename (d->d_name, buf);
		}
		else
		{
			fprintf (stderr, "Skipping <%s>\n", d->d_name);
		}
	} /* End while() */
	closedir (directory);
	
	fprintf (stderr, "Finished!\n");

	return 0;
}


Reply to: