- Added parametersSize param to all functions taking a parameter string.
- For functions where name strings are both input and output parameters that may be truncated if too long, updated copy-in procedure to allow truncation without returning an error. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5155 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -26,13 +26,17 @@ using namespace BPrivate::DiskDevice;
|
|||||||
// ddm_strlcpy
|
// ddm_strlcpy
|
||||||
/*! \brief Wrapper around user_strlcpy() that returns a status_t
|
/*! \brief Wrapper around user_strlcpy() that returns a status_t
|
||||||
indicating appropriate success or failure.
|
indicating appropriate success or failure.
|
||||||
|
|
||||||
|
\param allowTruncation If \c true, does not return an error if
|
||||||
|
\a from is longer than \to. If \c false, returns \c B_NAME_TOO_LONG
|
||||||
|
if \a from is longer than \to.
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
status_t
|
status_t
|
||||||
ddm_strlcpy(char *to, const char *from, size_t size) {
|
ddm_strlcpy(char *to, const char *from, size_t size, bool allowTruncation = false) {
|
||||||
int error = user_strlcpy(to, from, size);
|
int error = user_strlcpy(to, from, size);
|
||||||
error = (0 <= error && size_t(error) < size) ? B_OK
|
error = (0 <= error && size_t(error) < size) ? B_OK
|
||||||
: (error < B_OK ? error : B_NAME_TOO_LONG);
|
: (error < B_OK ? error : (allowTruncation ? B_OK : B_NAME_TOO_LONG));
|
||||||
return status_t(error);
|
return status_t(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,7 +850,7 @@ _kern_validate_set_partition_name(partition_id partitionID,
|
|||||||
if (!_name)
|
if (!_name)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
char name[B_OS_NAME_LENGTH];
|
char name[B_OS_NAME_LENGTH];
|
||||||
status_t error = ddm_strlcpy(name, _name, B_OS_NAME_LENGTH);
|
status_t error = ddm_strlcpy(name, _name, B_OS_NAME_LENGTH, true);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
|
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
|
||||||
@@ -868,7 +872,7 @@ _kern_validate_set_partition_content_name(partition_id partitionID,
|
|||||||
if (!_name)
|
if (!_name)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
char name[B_OS_NAME_LENGTH];
|
char name[B_OS_NAME_LENGTH];
|
||||||
status_t error = ddm_strlcpy(name, _name, B_OS_NAME_LENGTH);
|
status_t error = ddm_strlcpy(name, _name, B_OS_NAME_LENGTH, true);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
|
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
|
||||||
@@ -909,7 +913,8 @@ status_t
|
|||||||
_kern_validate_initialize_partition(partition_id partitionID,
|
_kern_validate_initialize_partition(partition_id partitionID,
|
||||||
int32 changeCounter,
|
int32 changeCounter,
|
||||||
const char *_diskSystemName, char *_name,
|
const char *_diskSystemName, char *_name,
|
||||||
const char *_parameters)
|
const char *_parameters,
|
||||||
|
size_t parametersSize)
|
||||||
{
|
{
|
||||||
if (!_diskSystemName || !_name)
|
if (!_diskSystemName || !_name)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -917,14 +922,14 @@ _kern_validate_initialize_partition(partition_id partitionID,
|
|||||||
char name[B_OS_NAME_LENGTH];
|
char name[B_OS_NAME_LENGTH];
|
||||||
char *parameters = NULL;
|
char *parameters = NULL;
|
||||||
status_t error = ddm_strlcpy(diskSystemName, _diskSystemName, B_OS_NAME_LENGTH);
|
status_t error = ddm_strlcpy(diskSystemName, _diskSystemName, B_OS_NAME_LENGTH);
|
||||||
if (!error)
|
if (!error)
|
||||||
error = ddm_strlcpy(name, _name, B_OS_NAME_LENGTH);
|
error = ddm_strlcpy(name, _name, B_OS_NAME_LENGTH, true);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
if (_parameters) {
|
if (_parameters) {
|
||||||
parameters = static_cast<char*>(malloc(strlen(_parameters)+1));
|
parameters = static_cast<char*>(malloc(parametersSize));
|
||||||
if (parameters)
|
if (parameters)
|
||||||
user_strcpy(parameters, _parameters);
|
user_memcpy(parameters, _parameters, parametersSize);
|
||||||
else
|
else
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
@@ -948,7 +953,8 @@ status_t
|
|||||||
_kern_validate_create_child_partition(partition_id partitionID,
|
_kern_validate_create_child_partition(partition_id partitionID,
|
||||||
int32 changeCounter, off_t *_offset,
|
int32 changeCounter, off_t *_offset,
|
||||||
off_t *_size, const char *_type,
|
off_t *_size, const char *_type,
|
||||||
const char *_parameters)
|
const char *_parameters,
|
||||||
|
size_t parametersSize)
|
||||||
{
|
{
|
||||||
if (!_offset || !_size || !_type)
|
if (!_offset || !_size || !_type)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -962,9 +968,9 @@ _kern_validate_create_child_partition(partition_id partitionID,
|
|||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
if (_parameters) {
|
if (_parameters) {
|
||||||
parameters = static_cast<char*>(malloc(strlen(_parameters)+1));
|
parameters = static_cast<char*>(malloc(parametersSize));
|
||||||
if (parameters)
|
if (parameters)
|
||||||
user_strcpy(parameters, _parameters);
|
user_memcpy(parameters, _parameters, parametersSize);
|
||||||
else
|
else
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
@@ -1373,15 +1379,15 @@ _kern_set_partition_type(partition_id partitionID, int32 changeCounter,
|
|||||||
// _kern_set_partition_parameters
|
// _kern_set_partition_parameters
|
||||||
status_t
|
status_t
|
||||||
_kern_set_partition_parameters(partition_id partitionID, int32 changeCounter,
|
_kern_set_partition_parameters(partition_id partitionID, int32 changeCounter,
|
||||||
const char *_parameters)
|
const char *_parameters, size_t parametersSize)
|
||||||
{
|
{
|
||||||
if (!_parameters)
|
if (!_parameters)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
char *parameters = NULL;
|
char *parameters = NULL;
|
||||||
if (_parameters) {
|
if (_parameters) {
|
||||||
parameters = static_cast<char*>(malloc(strlen(_parameters)+1));
|
parameters = static_cast<char*>(malloc(parametersSize));
|
||||||
if (parameters)
|
if (parameters)
|
||||||
user_strcpy(parameters, _parameters);
|
user_memcpy(parameters, _parameters, parametersSize);
|
||||||
else
|
else
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
@@ -1415,15 +1421,16 @@ _kern_set_partition_parameters(partition_id partitionID, int32 changeCounter,
|
|||||||
status_t
|
status_t
|
||||||
_kern_set_partition_content_parameters(partition_id partitionID,
|
_kern_set_partition_content_parameters(partition_id partitionID,
|
||||||
int32 changeCounter,
|
int32 changeCounter,
|
||||||
const char *_parameters)
|
const char *_parameters,
|
||||||
|
size_t parametersSize)
|
||||||
{
|
{
|
||||||
if (!_parameters)
|
if (!_parameters)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
char *parameters = NULL;
|
char *parameters = NULL;
|
||||||
if (_parameters) {
|
if (_parameters) {
|
||||||
parameters = static_cast<char*>(malloc(strlen(_parameters)+1));
|
parameters = static_cast<char*>(malloc(parametersSize));
|
||||||
if (parameters)
|
if (parameters)
|
||||||
user_strcpy(parameters, _parameters);
|
user_memcpy(parameters, _parameters, parametersSize);
|
||||||
else
|
else
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
@@ -1457,7 +1464,7 @@ _kern_set_partition_content_parameters(partition_id partitionID,
|
|||||||
status_t
|
status_t
|
||||||
_kern_initialize_partition(partition_id partitionID, int32 changeCounter,
|
_kern_initialize_partition(partition_id partitionID, int32 changeCounter,
|
||||||
const char *_diskSystemName, const char *_name,
|
const char *_diskSystemName, const char *_name,
|
||||||
const char *_parameters)
|
const char *_parameters, size_t parametersSize)
|
||||||
{
|
{
|
||||||
if (!_diskSystemName || !_name)
|
if (!_diskSystemName || !_name)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -1470,9 +1477,9 @@ _kern_initialize_partition(partition_id partitionID, int32 changeCounter,
|
|||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
if (_parameters) {
|
if (_parameters) {
|
||||||
parameters = static_cast<char*>(malloc(strlen(_parameters)+1));
|
parameters = static_cast<char*>(malloc(parametersSize));
|
||||||
if (parameters)
|
if (parameters)
|
||||||
user_strcpy(parameters, _parameters);
|
user_memcpy(parameters, _parameters, parametersSize);
|
||||||
else
|
else
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
@@ -1541,7 +1548,8 @@ _kern_uninitialize_partition(partition_id partitionID, int32 changeCounter)
|
|||||||
status_t
|
status_t
|
||||||
_kern_create_child_partition(partition_id partitionID, int32 changeCounter,
|
_kern_create_child_partition(partition_id partitionID, int32 changeCounter,
|
||||||
off_t offset, off_t size, const char *_type,
|
off_t offset, off_t size, const char *_type,
|
||||||
const char *_parameters, partition_id *_childID)
|
const char *_parameters, size_t parametersSize,
|
||||||
|
partition_id *_childID)
|
||||||
{
|
{
|
||||||
if (!_type)
|
if (!_type)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -1551,9 +1559,9 @@ _kern_create_child_partition(partition_id partitionID, int32 changeCounter,
|
|||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
if (_parameters) {
|
if (_parameters) {
|
||||||
parameters = static_cast<char*>(malloc(strlen(_parameters)+1));
|
parameters = static_cast<char*>(malloc(parametersSize));
|
||||||
if (parameters)
|
if (parameters)
|
||||||
user_strcpy(parameters, _parameters);
|
user_memcpy(parameters, _parameters, parametersSize);
|
||||||
else
|
else
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user