summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristophe Grenier <[email protected]>2011-09-17 17:08:03 +0200
committerChristophe Grenier <[email protected]>2011-09-17 17:08:03 +0200
commit54897586fd7fb4a103c6a5af2486232df8c2ba84 (patch)
tree00742f133027c85b351e11343eb7b1c7c1c00039 /src
parent6cc686c84a447f27f9e2158d7a5c5692213211a1 (diff)
PhotoRec: when renaming file, filter out name with too much bad chars
Diffstat (limited to 'src')
-rw-r--r--src/filegen.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/filegen.c b/src/filegen.c
index 8b01cc67..6f95dd33 100644
--- a/src/filegen.c
+++ b/src/filegen.c
@@ -382,7 +382,10 @@ void file_rename(const char *old_filename, const unsigned char *buffer, const in
/* Add original filename */
if(offset < buffer_size && buffer!=NULL)
{
+ char *dst_old=dst;
int off;
+ int ok=0;
+ int bad=0;
*dst++ = '_';
for(off=offset; off<buffer_size && buffer[off]!='\0'; off++)
{
@@ -393,15 +396,29 @@ void file_rename(const char *old_filename, const unsigned char *buffer, const in
case ':':
case '*':
*dst++ = '_';
+ bad++;
break;
default:
if(isprint(buffer[off]) && !isspace(buffer[off]))
+ {
*dst++ = buffer[off];
+ ok++;
+ }
else
+ {
*dst++ = '_';
+ bad++;
+ }
break;
}
}
+ if(ok <= bad)
+ dst=dst_old;
+ else
+ {
+ while(dst > dst_old && *(dst-1)=='_')
+ dst--;
+ }
}
/* Add extension */
if(new_ext!=NULL)
@@ -458,7 +475,10 @@ void file_rename_unicode(const char *old_filename, const unsigned char *buffer,
/* Add original filename */
if(offset < buffer_size && buffer!=NULL)
{
+ char *dst_old=dst;
int off;
+ int ok=0;
+ int bad=0;
*dst++ = '_';
for(off=offset; off<buffer_size && buffer[off]!='\0'; off+=2)
{
@@ -469,15 +489,29 @@ void file_rename_unicode(const char *old_filename, const unsigned char *buffer,
case ':':
case '*':
*dst++ = '_';
+ bad++;
break;
default:
if(isprint(buffer[off]) && !isspace(buffer[off]))
+ {
*dst++ = buffer[off];
+ ok++;
+ }
else
+ {
*dst++ = '_';
+ bad++;
+ }
break;
}
}
+ if(ok <= bad)
+ dst=dst_old;
+ else
+ {
+ while(dst > dst_old && *(dst-1)=='_')
+ dst--;
+ }
}
/* Add extension */
if(new_ext!=NULL)