diff options
author | Christophe Grenier <[email protected]> | 2011-09-17 17:08:03 +0200 |
---|---|---|
committer | Christophe Grenier <[email protected]> | 2011-09-17 17:08:03 +0200 |
commit | 54897586fd7fb4a103c6a5af2486232df8c2ba84 (patch) | |
tree | 00742f133027c85b351e11343eb7b1c7c1c00039 /src | |
parent | 6cc686c84a447f27f9e2158d7a5c5692213211a1 (diff) |
PhotoRec: when renaming file, filter out name with too much bad chars
Diffstat (limited to 'src')
-rw-r--r-- | src/filegen.c | 34 |
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) |