NTFS: Fix - Tracker faults when 'Show volumes on desktop' mode enabled.
+alpha 4
This commit is contained in:
@@ -28,6 +28,7 @@ int32 kFreeTypeCookie = 0x87654321;
|
|||||||
|
|
||||||
char *kFailBackMime = {"application/octet-stream"};
|
char *kFailBackMime = {"application/octet-stream"};
|
||||||
char *kDirectoryMime = {"application/x-vnd.Be-directory"};
|
char *kDirectoryMime = {"application/x-vnd.Be-directory"};
|
||||||
|
char *kAttrTypeName = {"BEOS:TYPE"};
|
||||||
|
|
||||||
|
|
||||||
status_t set_mime(vnode *node, const char *filename)
|
status_t set_mime(vnode *node, const char *filename)
|
||||||
@@ -35,7 +36,7 @@ status_t set_mime(vnode *node, const char *filename)
|
|||||||
struct ext_mime *p;
|
struct ext_mime *p;
|
||||||
int32 namelen;
|
int32 namelen;
|
||||||
int32 ext_len;
|
int32 ext_len;
|
||||||
node->mime = kFailBackMime;
|
node->mime = NULL;
|
||||||
|
|
||||||
if (filename == NULL)
|
if (filename == NULL)
|
||||||
{
|
{
|
||||||
@@ -56,7 +57,10 @@ status_t set_mime(vnode *node, const char *filename)
|
|||||||
if (!strcasecmp(filename + namelen - ext_len, p->extension))
|
if (!strcasecmp(filename + namelen - ext_len, p->extension))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
node->mime = p->mime;
|
if(p->mime==NULL)
|
||||||
|
node->mime = kFailBackMime;
|
||||||
|
else
|
||||||
|
node->mime = p->mime;
|
||||||
return B_NO_ERROR;
|
return B_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,8 +193,8 @@ fake_read_attrib_dir(fs_volume *_vol, fs_vnode *_node, void *_cookie,
|
|||||||
|
|
||||||
entry->d_ino = node->vnid;
|
entry->d_ino = node->vnid;
|
||||||
entry->d_dev = ns->id;
|
entry->d_dev = ns->id;
|
||||||
entry->d_reclen = sizeof(struct dirent) + 10;
|
entry->d_reclen = sizeof(struct dirent) + strlen(kAttrTypeName);
|
||||||
strcpy(entry->d_name, "BEOS:TYPE");
|
strcpy(entry->d_name, kAttrTypeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
*cookie = kCloseTypeCookie;
|
*cookie = kCloseTypeCookie;
|
||||||
@@ -207,24 +211,19 @@ fake_create_attrib(fs_volume *_vol, fs_vnode *_node, const char* name,
|
|||||||
uint32 type, int openMode, void** _cookie)
|
uint32 type, int openMode, void** _cookie)
|
||||||
{
|
{
|
||||||
nspace *ns = (nspace *)_vol->private_volume;
|
nspace *ns = (nspace *)_vol->private_volume;
|
||||||
int result = B_NO_ERROR;
|
|
||||||
|
|
||||||
LOCK_VOL(ns);
|
LOCK_VOL(ns);
|
||||||
|
|
||||||
TRACE("fake_create_attrib - ENTER (name = [%s])\n",name);
|
TRACE("fake_create_attrib - ENTER (name = [%s])\n",name);
|
||||||
|
|
||||||
if (strcmp(name, "BEOS:TYPE") != 0)
|
if (strcmp(name, kAttrTypeName) == 0)
|
||||||
goto exit;
|
*_cookie = &kSetTypeCookie;
|
||||||
|
|
||||||
*_cookie = &kSetTypeCookie;
|
|
||||||
|
|
||||||
exit:
|
TRACE("fake_create_attrib - EXIT\n");
|
||||||
|
|
||||||
TRACE("fake_create_attrib - EXIT, result is %s\n", strerror(result));
|
|
||||||
|
|
||||||
UNLOCK_VOL(ns);
|
UNLOCK_VOL(ns);
|
||||||
|
|
||||||
return result;
|
return B_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
@@ -232,18 +231,16 @@ fake_open_attrib(fs_volume *_vol, fs_vnode *_node, const char *name,
|
|||||||
int openMode, void **_cookie)
|
int openMode, void **_cookie)
|
||||||
{
|
{
|
||||||
nspace *ns = (nspace *)_vol->private_volume;
|
nspace *ns = (nspace *)_vol->private_volume;
|
||||||
int result = B_NO_ERROR;
|
status_t result = B_NO_ERROR;
|
||||||
|
|
||||||
LOCK_VOL(ns);
|
LOCK_VOL(ns);
|
||||||
|
|
||||||
TRACE("fake_open_attrib - ENTER (name = [%s])\n",name);
|
TRACE("fake_open_attrib - ENTER (name = [%s])\n",name);
|
||||||
|
|
||||||
if (strcmp(name, "BEOS:TYPE") != 0)
|
if (strcmp(name, kAttrTypeName) == 0)
|
||||||
goto exit;
|
*_cookie = &kSetTypeCookie;
|
||||||
|
else
|
||||||
*_cookie = &kSetTypeCookie;
|
result = ENOENT;
|
||||||
|
|
||||||
exit:
|
|
||||||
|
|
||||||
TRACE("fake_open_attrib - EXIT, result is %s\n", strerror(result));
|
TRACE("fake_open_attrib - EXIT, result is %s\n", strerror(result));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user