* Shortened all strndup() buffers by one to have the same outcome as with

the previous local strndup() implementation.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28950 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2009-01-19 10:08:06 +00:00
parent 9c2491ccc4
commit 82fcd4339f
+45 -43
View File
@@ -1,14 +1,16 @@
/* ParameterWeb - implements the following classes: /*
** BParameterWeb, BParameterGroup, BParameter, BNullParameter, * Copyright 2002-2009, Haiku. All Rights Reserved.
** BContinuousParameter, BDiscreteParameter * This file may be used under the terms of the MIT License.
** *
** Author: Zousar Shaker * Author: Zousar Shaker
** Axel Dörfler, [email protected] * Axel Dörfler, [email protected]
** Marcus Overhagen * Marcus Overhagen
** */
** This file may be used under the terms of the OpenBeOS License.
*/
/*! Implements the following classes:
BParameterWeb, BParameterGroup, BParameter, BNullParameter,
BContinuousParameter, BDiscreteParameter
*/
#include <ParameterWeb.h> #include <ParameterWeb.h>
#include <MediaNode.h> #include <MediaNode.h>
@@ -23,7 +25,7 @@
/* /*
The following is documentation on the flattened format The following is documentation on the flattened format
of structures/classes in this module: of structures/classes in this module:
//--------BEGIN-CORE-BPARAMETER-STRUCT--------------------- //--------BEGIN-CORE-BPARAMETER-STRUCT---------------------
?? (0x02040607): 4 bytes ?? (0x02040607): 4 bytes
BParameter Struct Size (in bytes): 4 bytes BParameter Struct Size (in bytes): 4 bytes
@@ -58,7 +60,7 @@
Item Value: 4 bytes (as int) Item Value: 4 bytes (as int)
//for each item END //for each item END
//--------END-BDISCRETEPARAMETER-STRUCT------------------- //--------END-BDISCRETEPARAMETER-STRUCT-------------------
//--------BEGIN-CORE-BPARAMETERGROUP-STRUCT----------- //--------BEGIN-CORE-BPARAMETERGROUP-STRUCT-----------
?? (0x03040507 OR 0x03040509 depending if the flags field is included or not???): 4 bytes ?? (0x03040507 OR 0x03040509 depending if the flags field is included or not???): 4 bytes
(possible) Flags: 4 bytes (possible) Flags: 4 bytes
@@ -78,9 +80,9 @@
Flattened Group Size: 4 bytes Flattened Group Size: 4 bytes
Flattened Group: 'Flattened Group Size' bytes Flattened Group: 'Flattened Group Size' bytes
//for each SubGroup END //for each SubGroup END
//---------END-CORE-BPARAMETERGROUP-STRUCT-------------- //---------END-CORE-BPARAMETERGROUP-STRUCT--------------
//--------BEGIN-CORE-BPARAMETERWEB-STRUCT----------- //--------BEGIN-CORE-BPARAMETERWEB-STRUCT-----------
?? 0x01030506: 4 bytes ?? 0x01030506: 4 bytes
??: 4 bytes (is always 1) ??: 4 bytes (is always 1)
@@ -94,7 +96,7 @@
??: 4 bytes (never get written to (holds uninitialized value)) ??: 4 bytes (never get written to (holds uninitialized value))
//for each Group END //for each Group END
//---------END-CORE-BPARAMETERWEB-STRUCT-------------- //---------END-CORE-BPARAMETERWEB-STRUCT--------------
*/ */
@@ -178,7 +180,7 @@ read_string_from_buffer(const void **_buffer, char **_string, ssize_t size)
{ {
if (size < 1) if (size < 1)
return B_BAD_VALUE; return B_BAD_VALUE;
const uint8 *buffer = static_cast<const uint8 *>(*_buffer); const uint8 *buffer = static_cast<const uint8 *>(*_buffer);
uint8 length = *buffer++; uint8 length = *buffer++;
if (length > size - 1) if (length > size - 1)
@@ -403,7 +405,7 @@ BParameterWeb::ParameterAt(int32 index)
{ {
CALLED(); CALLED();
ASSERT(mGroups != NULL); ASSERT(mGroups != NULL);
// Iterates over all groups (and sub-groups) in the web. // Iterates over all groups (and sub-groups) in the web.
// The "groups" list is used as iteration stack (breadth search style) // The "groups" list is used as iteration stack (breadth search style)
// Maintains the same order as the Be implementation // Maintains the same order as the Be implementation
@@ -571,14 +573,14 @@ BParameterWeb::Unflatten(type_code code, const void *buffer, ssize_t size)
return B_BAD_DATA; return B_BAD_DATA;
// Note, it's not completely sure that this field is the version // Note, it's not completely sure that this field is the version
// information - but it doesn't seem to have another purpose // information - but it doesn't seem to have another purpose
int32 version = read_from_buffer_swap32<int32>(&buffer, isSwapped); int32 version = read_from_buffer_swap32<int32>(&buffer, isSwapped);
if (version != kCurrentParameterWebVersion) { if (version != kCurrentParameterWebVersion) {
ERROR("BParameterWeb::Unflatten(): wrong version %ld (%lx)?!\n", version, version); ERROR("BParameterWeb::Unflatten(): wrong version %ld (%lx)?!\n", version, version);
return B_ERROR; return B_ERROR;
} }
#if 0 #if 0
if (mGroups != NULL) { if (mGroups != NULL) {
for (int32 i = 0; i < mGroups->CountItems(); i++) { for (int32 i = 0; i < mGroups->CountItems(); i++) {
BParameterGroup *CurrentItem = static_cast<BParameterGroup *>(mGroups->ItemAt(i)); BParameterGroup *CurrentItem = static_cast<BParameterGroup *>(mGroups->ItemAt(i));
@@ -622,16 +624,16 @@ BParameterWeb::Unflatten(type_code code, const void *buffer, ssize_t size)
if ((mOldRefs != NULL) && (mNewRefs != NULL)) { if ((mOldRefs != NULL) && (mNewRefs != NULL)) {
BList groups(*mGroups); BList groups(*mGroups);
for (int32 i = 0; i < groups.CountItems(); i++) { for (int32 i = 0; i < groups.CountItems(); i++) {
BParameterGroup *group = static_cast<BParameterGroup *>(groups.ItemAt(i)); BParameterGroup *group = static_cast<BParameterGroup *>(groups.ItemAt(i));
for (int32 index = group->CountParameters(); index-- > 0;) { for (int32 index = group->CountParameters(); index-- > 0;) {
BParameter *parameter = static_cast<BParameter *>(group->ParameterAt(index)); BParameter *parameter = static_cast<BParameter *>(group->ParameterAt(index));
parameter->FixRefs(*mOldRefs, *mNewRefs); parameter->FixRefs(*mOldRefs, *mNewRefs);
} }
if (group->mGroups != NULL) if (group->mGroups != NULL)
groups.AddList(group->mGroups); groups.AddList(group->mGroups);
} }
@@ -679,7 +681,7 @@ BParameterGroup::BParameterGroup(BParameterWeb *web, const char *name)
CALLED(); CALLED();
TRACE("BParameterGroup: web = %p, name = \"%s\"\n", web, name); TRACE("BParameterGroup: web = %p, name = \"%s\"\n", web, name);
mName = strndup(name, 256); mName = strndup(name, 255);
mControls = new BList(); mControls = new BList();
mGroups = new BList(); mGroups = new BList();
@@ -898,7 +900,7 @@ BParameterGroup::FlattenedSize() const
Flattened Group Size: 4 bytes Flattened Group Size: 4 bytes
Flattened Group: 'Flattened Group Size' bytes Flattened Group: 'Flattened Group Size' bytes
//for each SubGroup END //for each SubGroup END
//---------END-CORE-BPARAMETERGROUP-STRUCT-------------- //---------END-CORE-BPARAMETERGROUP-STRUCT--------------
*/ */
//13 guaranteed bytes, variable after that. //13 guaranteed bytes, variable after that.
@@ -907,14 +909,14 @@ BParameterGroup::FlattenedSize() const
if (mFlags != 0) { if (mFlags != 0) {
size += 4; size += 4;
} }
if (mName != NULL) { if (mName != NULL) {
size += min_c(strlen(mName),255); size += min_c(strlen(mName),255);
} }
int i; int i;
int limit; int limit;
limit = mControls->CountItems(); limit = mControls->CountItems();
for (i = 0; i < limit; i++) { for (i = 0; i < limit; i++) {
BParameter *CurrentParameter = static_cast<BParameter *>(mControls->ItemAt(i)); BParameter *CurrentParameter = static_cast<BParameter *>(mControls->ItemAt(i));
@@ -1086,7 +1088,7 @@ BParameterGroup::Unflatten(type_code code, const void *buffer, ssize_t size)
} else { } else {
mControls = new BList(); mControls = new BList();
} }
if (mGroups != NULL) { if (mGroups != NULL) {
for (i = 0; i < mGroups->CountItems(); i++) { for (i = 0; i < mGroups->CountItems(); i++) {
BParameterGroup *CurrentItem = static_cast<BParameterGroup *>(mGroups->ItemAt(i)); BParameterGroup *CurrentItem = static_cast<BParameterGroup *>(mGroups->ItemAt(i));
@@ -1388,18 +1390,18 @@ BParameter::SetValue(const void *buffer, size_t size, bigtime_t when)
return B_BAD_VALUE; return B_BAD_VALUE;
if (size <= 0) if (size <= 0)
return B_NO_MEMORY; return B_NO_MEMORY;
if (mWeb == 0) { if (mWeb == 0) {
ERROR("BParameter::SetValue: no parent BParameterWeb\n"); ERROR("BParameter::SetValue: no parent BParameterWeb\n");
return B_NO_INIT; return B_NO_INIT;
} }
node = mWeb->Node(); node = mWeb->Node();
if (IS_INVALID_NODE(node)) { if (IS_INVALID_NODE(node)) {
ERROR("BParameter::SetValue: the parent BParameterWeb is not assigned to a BMediaNode\n"); ERROR("BParameter::SetValue: the parent BParameterWeb is not assigned to a BMediaNode\n");
return B_NO_INIT; return B_NO_INIT;
} }
if (size > MAX_PARAMETER_DATA) { if (size > MAX_PARAMETER_DATA) {
// create an area if large data needs to be transfered // create an area if large data needs to be transfered
area = create_area("set parameter data", &data, B_ANY_ADDRESS, ROUND_UP_TO_PAGE(size), B_NO_LOCK, B_READ_AREA | B_WRITE_AREA); area = create_area("set parameter data", &data, B_ANY_ADDRESS, ROUND_UP_TO_PAGE(size), B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
@@ -1424,7 +1426,7 @@ BParameter::SetValue(const void *buffer, size_t size, bigtime_t when)
if (area != -1) if (area != -1)
delete_area(area); delete_area(area);
return rv; return rv;
} }
@@ -1470,7 +1472,7 @@ BParameter *
BParameter::InputAt(int32 index) BParameter::InputAt(int32 index)
{ {
ASSERT(mInputs != NULL); ASSERT(mInputs != NULL);
return static_cast<BParameter *>(mInputs->ItemAt(index)); return static_cast<BParameter *>(mInputs->ItemAt(index));
} }
@@ -1696,7 +1698,7 @@ BParameter::Unflatten(type_code code, const void *buffer, ssize_t size)
//if the struct doesn't meet the minimum size for //if the struct doesn't meet the minimum size for
//a flattened BParameter, then return an error. //a flattened BParameter, then return an error.
//MinFlattenedParamSize = //MinFlattenedParamSize =
//ID (4 bytes) //ID (4 bytes)
//Name String Length (1 byte) //Name String Length (1 byte)
//Kind String Length (1 byte) //Kind String Length (1 byte)
@@ -1716,8 +1718,8 @@ BParameter::Unflatten(type_code code, const void *buffer, ssize_t size)
mID = read_from_buffer_swap32<int32>(&buffer, mSwapDetected); mID = read_from_buffer_swap32<int32>(&buffer, mSwapDetected);
if (read_string_from_buffer(&buffer, &mName, size_left(size, bufferStart, buffer)) < B_OK if (read_string_from_buffer(&buffer, &mName, size_left(size, bufferStart, buffer)) < B_OK
|| read_string_from_buffer(&buffer, &mKind, size_left(size, bufferStart, buffer)) < B_OK || read_string_from_buffer(&buffer, &mKind, size_left(size, bufferStart, buffer)) < B_OK
|| read_string_from_buffer(&buffer, &mUnit, size_left(size, bufferStart, buffer)) < B_OK) || read_string_from_buffer(&buffer, &mUnit, size_left(size, bufferStart, buffer)) < B_OK)
return B_NO_MEMORY; return B_NO_MEMORY;
// read the list of inputs // read the list of inputs
@@ -1725,7 +1727,7 @@ BParameter::Unflatten(type_code code, const void *buffer, ssize_t size)
// it will directly add the pointers in the flattened message to the list; // it will directly add the pointers in the flattened message to the list;
// these will be fixed to point to the real inputs/outputs later in FixRefs() // these will be fixed to point to the real inputs/outputs later in FixRefs()
int32 count = read_from_buffer_swap32<int32>(&buffer, mSwapDetected); int32 count = read_from_buffer_swap32<int32>(&buffer, mSwapDetected);
if (mInputs == NULL) if (mInputs == NULL)
mInputs = new BList(); mInputs = new BList();
@@ -1776,9 +1778,9 @@ BParameter::BParameter(int32 id, media_type mediaType, media_parameter_type type
{ {
CALLED(); CALLED();
mName = strndup(name, 256); mName = strndup(name, 255);
mKind = strndup(kind, 256); mKind = strndup(kind, 255);
mUnit = strndup(unit, 256); mUnit = strndup(unit, 255);
// create empty input/output lists // create empty input/output lists
mInputs = new BList(); mInputs = new BList();
@@ -1800,7 +1802,7 @@ BParameter::~BParameter()
delete mInputs; delete mInputs;
delete mOutputs; delete mOutputs;
mName = NULL; mKind = NULL; mUnit = NULL; mInputs = NULL; mOutputs = NULL; mName = NULL; mKind = NULL; mUnit = NULL; mInputs = NULL; mOutputs = NULL;
} }
@@ -1856,7 +1858,7 @@ BParameter::FixRefs(BList &old, BList &updated)
} }
// remove all NULL outputs (those which couldn't be mapped) // remove all NULL outputs (those which couldn't be mapped)
for (int32 i = count; i-- > 0;) { for (int32 i = count; i-- > 0;) {
if (items[i] == NULL) if (items[i] == NULL)
mOutputs->RemoveItem(i); mOutputs->RemoveItem(i);
@@ -2093,7 +2095,7 @@ BDiscreteParameter::AddItem(int32 value, const char *name)
ASSERT(mSelections != NULL); ASSERT(mSelections != NULL);
int32 *valueCopy = new int32(value); int32 *valueCopy = new int32(value);
char *nameCopy = strndup(name, 256); char *nameCopy = strndup(name, 255);
if (name != NULL && nameCopy == NULL) if (name != NULL && nameCopy == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;