summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-28 08:46:57 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-28 08:46:57 +0000
commit3ae59505d04bfca289ea4936e40a1cbbb08693d5 (patch)
tree881a7911e5810bfc98ff02f73edd97ff89b75148 /cpukit/libfs
parent2010-12-27 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-3ae59505d04bfca289ea4936e40a1cbbb08693d5.tar.bz2
2010-12-28 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libfs/src/dosfs/msdos_misc.c: Create short file names acceptable for Windows.
Diffstat (limited to 'cpukit/libfs')
-rw-r--r--cpukit/libfs/src/dosfs/msdos_misc.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos_misc.c b/cpukit/libfs/src/dosfs/msdos_misc.c
index d8a7773090..3af6492a07 100644
--- a/cpukit/libfs/src/dosfs/msdos_misc.c
+++ b/cpukit/libfs/src/dosfs/msdos_misc.c
@@ -92,12 +92,13 @@ msdos_short_name_hex(char* sfn, int num)
static const char* hex = "0123456789ABCDEF";
char* c = MSDOS_DIR_NAME(sfn);
int i;
- for (i = 0; i < 3; i++, c++)
+ for (i = 0; i < 2; i++, c++)
if ((*c == ' ') || (*c == '.'))
- *c = '~';
- *c++ = '~';
+ *c = '_';
for (i = 0; i < 4; i++, c++)
*c = hex[(num >> ((3 - i) * 4)) & 0xf];
+ *c++ = '~';
+ *c++ = '1';
}
/* msdos_name_type --
@@ -1535,6 +1536,7 @@ int msdos_find_name_in_fat_file(
char* p;
const char* n;
int i;
+ char fill = 0;
length += MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
lfn_entry++;
@@ -1600,9 +1602,17 @@ int msdos_find_name_in_fat_file(
for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; i++)
{
- *p = *n;
if (*n != 0)
+ {
+ *p = *n;
n++;
+ }
+ else
+ {
+ p [0] = fill;
+ p [1] = fill;
+ fill = 0xff;
+ }
switch (i)
{