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: