* Applied slightly cleaned up patch by romain that sanitizes the volume names.

* This closes bug #4602.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35523 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2010-02-19 16:52:55 +00:00
parent 63b69bec3c
commit a791687e90
3 changed files with 30 additions and 16 deletions
+3 -11
View File
@@ -765,6 +765,7 @@ dosfs_identify_partition(int fd, partition_data *partition, void **_cookie)
cookie->bytes_per_sector = bytes_per_sector; cookie->bytes_per_sector = bytes_per_sector;
cookie->total_sectors = total_sectors; cookie->total_sectors = total_sectors;
sanitize_name(name, 12);
strlcpy(cookie->name, name, 12); strlcpy(cookie->name, name, 12);
*_cookie = cookie; *_cookie = cookie;
@@ -994,7 +995,6 @@ static status_t
dosfs_read_fs_stat(fs_volume *_vol, struct fs_info * fss) dosfs_read_fs_stat(fs_volume *_vol, struct fs_info * fss)
{ {
nspace* vol = (nspace*)_vol->private_volume; nspace* vol = (nspace*)_vol->private_volume;
int i;
LOCK_VOL(vol); LOCK_VOL(vol);
@@ -1021,19 +1021,11 @@ dosfs_read_fs_stat(fs_volume *_vol, struct fs_info * fss)
strncpy(fss->device_name, vol->device, sizeof(fss->device_name)); strncpy(fss->device_name, vol->device, sizeof(fss->device_name));
if (vol->vol_entry > -2) if (vol->vol_entry > -2)
strncpy(fss->volume_name, vol->vol_label, sizeof(fss->volume_name)); strlcpy(fss->volume_name, vol->vol_label, sizeof(fss->volume_name));
else else
strcpy(fss->volume_name, "no name"); strcpy(fss->volume_name, "no name");
// XXX: should sanitize name as well sanitize_name(fss->volume_name, 12);
for (i=10;i>0;i--)
if (fss->volume_name[i] != ' ')
break;
fss->volume_name[i+1] = 0;
for (;i>=0;i--) {
if ((fss->volume_name[i] >= 'A') && (fss->volume_name[i] <= 'Z'))
fss->volume_name[i] += 'a' - 'A';
}
// File system name // File system name
strcpy(fss->fsh_name, "fat"); strcpy(fss->fsh_name, "fat");
@@ -2,6 +2,8 @@
Copyright 1999-2001, Be Incorporated. All Rights Reserved. Copyright 1999-2001, Be Incorporated. All Rights Reserved.
This file may be used under the terms of the Be Sample Code License. This file may be used under the terms of the Be Sample Code License.
*/ */
#include <SupportDefs.h> #include <SupportDefs.h>
#include <KernelExport.h> #include <KernelExport.h>
@@ -164,3 +166,20 @@ hash_msdos_name(const char *name)
c = (c << 7) + (c >> 1) + *(p++); c = (c << 7) + (c >> 1) + *(p++);
return c; return c;
} }
void
sanitize_name(char *name, int length)
{
int i;
for (i = length - 1; i > 0; i--) {
if (name[i] != ' ')
break;
}
name[i + 1] = 0;
for (; i >= 0; i--) {
if (name[i] >= 'A' && name[i] <= 'Z')
name[i] += 'a' - 'A';
}
}
+4 -1
View File
@@ -5,8 +5,10 @@
#ifndef _DOSFS_UTIL_H_ #ifndef _DOSFS_UTIL_H_
#define _DOSFS_UTIL_H_ #define _DOSFS_UTIL_H_
#include <ByteOrder.h> #include <ByteOrder.h>
// debugging functions // debugging functions
#ifndef ASSERT #ifndef ASSERT
#ifndef DEBUG #ifndef DEBUG
@@ -25,6 +27,7 @@ time_t dos2time_t(uint32 t);
uint32 time_t2dos(time_t s); uint32 time_t2dos(time_t s);
uint8 hash_msdos_name(const char *name); uint8 hash_msdos_name(const char *name);
void sanitize_name(char *name, int length);
#if 0 #if 0
#define read32(buffer,off) \ #define read32(buffer,off) \
@@ -41,4 +44,4 @@ uint8 hash_msdos_name(const char *name);
#define read16(buffer,off) \ #define read16(buffer,off) \
B_LENDIAN_TO_HOST_INT16(*(uint16 *)&buffer[off]) B_LENDIAN_TO_HOST_INT16(*(uint16 *)&buffer[off])
#endif #endif /* _DOSFS_UTIL_H_ */