From c09ec54a59c4514e55e256a2fcfc65ee5852060f Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Mon, 1 Jul 2013 14:17:51 +0200 Subject: [PATCH] Fix MIME type creation error DatabaseLocation::OpenOrCreateType(): BNode::WriteAttr() returns the number of bytes written, not just an error code., so we erroneously reported an error on success. Fixes the first part of #9845. --- src/kits/storage/mime/DatabaseLocation.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/kits/storage/mime/DatabaseLocation.cpp b/src/kits/storage/mime/DatabaseLocation.cpp index d4df7c7919..bbe364286b 100644 --- a/src/kits/storage/mime/DatabaseLocation.cpp +++ b/src/kits/storage/mime/DatabaseLocation.cpp @@ -114,8 +114,14 @@ DatabaseLocation::OpenOrCreateType(const char* type, BNode& _node, return error; // write the type attribute - error = _node.WriteAttr(kTypeAttr, B_STRING_TYPE, 0, type, - strlen(type) + 1); + size_t toWrite = strlen(type) + 1; + ssize_t bytesWritten = _node.WriteAttr(kTypeAttr, B_STRING_TYPE, 0, type, + toWrite); + if (bytesWritten < 0) + error = bytesWritten; + else if ((size_t)bytesWritten != toWrite) + error = B_FILE_ERROR; + if (error != B_OK) { _node.Unset(); return error;