Style clean-ups *and* Index::Update() now correctly converts B_MIME_STRING_TYPE

to B_STRING_TYPE for the lower layers - should probably find a better solution
to handle this.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2166 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2002-12-06 04:32:05 +00:00
parent ae25cd6c51
commit 697df4613d
+42 -28
View File
@@ -14,6 +14,12 @@
#include <TypeConstants.h> #include <TypeConstants.h>
// B_MIME_STRING_TYPE is defined in storage/Mime.h, but we
// don't need the whole file here; the type can't change anyway
#ifndef _MIME_H
# define B_MIME_STRING_TYPE 'MIMS'
#endif
Index::Index(Volume *volume) Index::Index(Volume *volume)
: :
@@ -28,7 +34,7 @@ Index::~Index()
if (fNode == NULL) if (fNode == NULL)
return; return;
put_vnode(fVolume->ID(),fNode->ID()); put_vnode(fVolume->ID(), fNode->ID());
} }
@@ -38,7 +44,7 @@ Index::Unset()
if (fNode == NULL) if (fNode == NULL)
return; return;
put_vnode(fVolume->ID(),fNode->ID()); put_vnode(fVolume->ID(), fNode->ID());
fNode = NULL; fNode = NULL;
} }
@@ -58,16 +64,16 @@ Index::SetTo(const char *name)
return B_BAD_VALUE; return B_BAD_VALUE;
vnode_id id; vnode_id id;
status_t status = tree->Find((uint8 *)name,(uint16)strlen(name),&id); status_t status = tree->Find((uint8 *)name, (uint16)strlen(name), &id);
if (status != B_OK) if (status != B_OK)
return status; return status;
if (get_vnode(fVolume->ID(),id,(void **)&fNode) != B_OK) if (get_vnode(fVolume->ID(), id, (void **)&fNode) != B_OK)
return B_ENTRY_NOT_FOUND; return B_ENTRY_NOT_FOUND;
if (fNode == NULL) { if (fNode == NULL) {
FATAL(("fatal error at Index::InitCheck(), get_vnode() returned NULL pointer\n")); FATAL(("fatal error at Index::InitCheck(), get_vnode() returned NULL pointer\n"));
put_vnode(fVolume->ID(),id); put_vnode(fVolume->ID(), id);
return B_ERROR; return B_ERROR;
} }
fName = name; fName = name;
@@ -137,7 +143,7 @@ Index::KeySize()
status_t status_t
Index::Create(Transaction *transaction,const char *name,uint32 type) Index::Create(Transaction *transaction, const char *name, uint32 type)
{ {
Unset(); Unset();
@@ -190,7 +196,8 @@ Index::Create(Transaction *transaction,const char *name,uint32 type)
*/ */
status_t status_t
Index::Update(Transaction *transaction,const char *name,int32 type,const uint8 *oldKey,uint16 oldLength,const uint8 *newKey,uint16 newLength,Inode *inode) Index::Update(Transaction *transaction, const char *name, int32 type, const uint8 *oldKey,
uint16 oldLength, const uint8 *newKey, uint16 newLength, Inode *inode)
{ {
if (name == NULL if (name == NULL
|| oldKey == NULL && newKey == NULL || oldKey == NULL && newKey == NULL
@@ -198,19 +205,23 @@ Index::Update(Transaction *transaction,const char *name,int32 type,const uint8 *
|| newKey != NULL && newLength == 0) || newKey != NULL && newLength == 0)
return B_BAD_VALUE; return B_BAD_VALUE;
// B_MIME_STRING_TYPE is the only supported non-standard type
if (type == B_MIME_STRING_TYPE)
type = B_STRING_TYPE;
// if the two keys are identical, don't do anything // if the two keys are identical, don't do anything
if (type != 0 && !compareKeys(type,oldKey,oldLength,newKey,newLength)) if (type != 0 && !compareKeys(type, oldKey, oldLength, newKey, newLength))
return B_OK; return B_OK;
// update all live queries about the change, if they have an index or not // update all live queries about the change, if they have an index or not
fVolume->UpdateLiveQueries(inode,name,type,oldKey,oldLength,newKey,newLength); fVolume->UpdateLiveQueries(inode, name, type, oldKey, oldLength, newKey, newLength);
status_t status; status_t status;
if (name != fName && (status = SetTo(name)) < B_OK) if (name != fName && (status = SetTo(name)) < B_OK)
return B_BAD_INDEX; return B_BAD_INDEX;
// now that we have the type, check again for equality // now that we have the type, check again for equality
if (type == 0 && !compareKeys(Type(),oldKey,oldLength,newKey,newLength)) if (type == 0 && !compareKeys(Type(), oldKey, oldLength, newKey, newLength))
return B_OK; return B_OK;
BPlusTree *tree; BPlusTree *tree;
@@ -220,43 +231,44 @@ Index::Update(Transaction *transaction,const char *name,int32 type,const uint8 *
// remove the old key from the tree // remove the old key from the tree
if (oldKey != NULL) { if (oldKey != NULL) {
status = tree->Remove(transaction,(const uint8 *)oldKey,oldLength,inode->ID()); status = tree->Remove(transaction, (const uint8 *)oldKey, oldLength, inode->ID());
if (status == B_ENTRY_NOT_FOUND) { if (status == B_ENTRY_NOT_FOUND) {
// That's not nice, but should be no reason to let the whole thing fail // That's not nice, but should be no reason to let the whole thing fail
FATAL(("Could not find value in index \"%s\"!\n",name)); FATAL(("Could not find value in index \"%s\"!\n", name));
} else if (status < B_OK) } else if (status < B_OK)
return status; return status;
} }
// add the new key to the key // add the new key to the tree
if (newKey != NULL) if (newKey != NULL)
status = tree->Insert(transaction,(const uint8 *)newKey,newLength,inode->ID()); status = tree->Insert(transaction, (const uint8 *)newKey, newLength, inode->ID());
return status; return status;
} }
status_t status_t
Index::InsertName(Transaction *transaction,const char *name,Inode *inode) Index::InsertName(Transaction *transaction, const char *name, Inode *inode)
{ {
return UpdateName(transaction,NULL,name,inode); return UpdateName(transaction, NULL, name, inode);
} }
status_t status_t
Index::RemoveName(Transaction *transaction,const char *name,Inode *inode) Index::RemoveName(Transaction *transaction, const char *name, Inode *inode)
{ {
return UpdateName(transaction,name,NULL,inode); return UpdateName(transaction, name, NULL, inode);
} }
status_t status_t
Index::UpdateName(Transaction *transaction,const char *oldName, const char *newName,Inode *inode) Index::UpdateName(Transaction *transaction, const char *oldName, const char *newName, Inode *inode)
{ {
uint16 oldLength = oldName ? strlen(oldName) : 0; uint16 oldLength = oldName ? strlen(oldName) : 0;
uint16 newLength = newName ? strlen(newName) : 0; uint16 newLength = newName ? strlen(newName) : 0;
return Update(transaction,"name",B_STRING_TYPE,(uint8 *)oldName,oldLength,(uint8 *)newName,newLength,inode); return Update(transaction, "name", B_STRING_TYPE, (uint8 *)oldName, oldLength,
(uint8 *)newName, newLength, inode);
} }
@@ -264,7 +276,7 @@ status_t
Index::InsertSize(Transaction *transaction, Inode *inode) Index::InsertSize(Transaction *transaction, Inode *inode)
{ {
off_t size = inode->Size(); off_t size = inode->Size();
return Update(transaction,"size",B_INT64_TYPE,NULL,0,(uint8 *)&size,sizeof(int64),inode); return Update(transaction, "size", B_INT64_TYPE, NULL, 0, (uint8 *)&size, sizeof(int64), inode);
} }
@@ -273,7 +285,7 @@ Index::RemoveSize(Transaction *transaction, Inode *inode)
{ {
// Inode::OldSize() is the size that's in the index // Inode::OldSize() is the size that's in the index
off_t size = inode->OldSize(); off_t size = inode->OldSize();
return Update(transaction,"size",B_INT64_TYPE,(uint8 *)&size,sizeof(int64),NULL,0,inode); return Update(transaction, "size", B_INT64_TYPE, (uint8 *)&size, sizeof(int64), NULL, 0, inode);
} }
@@ -282,9 +294,9 @@ Index::UpdateSize(Transaction *transaction, Inode *inode)
{ {
off_t oldSize = inode->OldSize(); off_t oldSize = inode->OldSize();
off_t newSize = inode->Size(); off_t newSize = inode->Size();
status_t status = Update(transaction,"size",B_INT64_TYPE,(uint8 *)&oldSize,sizeof(int64),
(uint8 *)&newSize,sizeof(int64),inode);
status_t status = Update(transaction, "size", B_INT64_TYPE, (uint8 *)&oldSize,
sizeof(int64), (uint8 *)&newSize, sizeof(int64), inode);
if (status == B_OK) if (status == B_OK)
inode->UpdateOldSize(); inode->UpdateOldSize();
@@ -296,7 +308,8 @@ status_t
Index::InsertLastModified(Transaction *transaction, Inode *inode) Index::InsertLastModified(Transaction *transaction, Inode *inode)
{ {
off_t modified = inode->LastModified(); off_t modified = inode->LastModified();
return Update(transaction,"last_modified",B_INT64_TYPE,NULL,0,(uint8 *)&modified,sizeof(int64),inode); return Update(transaction, "last_modified", B_INT64_TYPE, NULL, 0,
(uint8 *)&modified, sizeof(int64), inode);
} }
@@ -305,7 +318,8 @@ Index::RemoveLastModified(Transaction *transaction, Inode *inode)
{ {
// Inode::OldLastModified() is the value which is in the index // Inode::OldLastModified() is the value which is in the index
off_t modified = inode->OldLastModified(); off_t modified = inode->OldLastModified();
return Update(transaction,"last_modified",B_INT64_TYPE,(uint8 *)&modified,sizeof(int64),NULL,0,inode); return Update(transaction, "last_modified", B_INT64_TYPE, (uint8 *)&modified,
sizeof(int64), NULL, 0, inode);
} }
@@ -317,8 +331,8 @@ Index::UpdateLastModified(Transaction *transaction, Inode *inode, off_t modified
modified = (bigtime_t)time(NULL) << INODE_TIME_SHIFT; modified = (bigtime_t)time(NULL) << INODE_TIME_SHIFT;
modified |= fVolume->GetUniqueID() & INODE_TIME_MASK; modified |= fVolume->GetUniqueID() & INODE_TIME_MASK;
status_t status = Update(transaction,"last_modified",B_INT64_TYPE,(uint8 *)&oldModified,sizeof(int64), status_t status = Update(transaction, "last_modified", B_INT64_TYPE, (uint8 *)&oldModified,
(uint8 *)&modified,sizeof(int64),inode); sizeof(int64), (uint8 *)&modified, sizeof(int64), inode);
inode->Node()->last_modified_time = modified; inode->Node()->last_modified_time = modified;
if (status == B_OK) if (status == B_OK)