Cleaned up XamUserReadProfileSettings. Also fixed writing out pointers for
setting data, fixing issues with games trying to read from zero page after reading profile settings.
This commit is contained in:
@@ -50,7 +50,7 @@ class UserProfile {
|
||||
: setting_id(setting_id), type(type), size(size) {}
|
||||
virtual size_t extra_size() const { return 0; }
|
||||
virtual size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) {
|
||||
uint32_t buffer_ptr, size_t buffer_offset) {
|
||||
xe::store_and_swap<uint8_t>(user_data + kTypeOffset,
|
||||
static_cast<uint8_t>(type));
|
||||
return buffer_offset;
|
||||
@@ -67,8 +67,8 @@ class UserProfile {
|
||||
: Setting(setting_id, Type::INT32, 4), value(value) {}
|
||||
int32_t value;
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
xe::store_and_swap<int32_t>(user_data + kValueOffset, value);
|
||||
return buffer_offset;
|
||||
}
|
||||
@@ -78,8 +78,8 @@ class UserProfile {
|
||||
: Setting(setting_id, Type::INT64, 8), value(value) {}
|
||||
int64_t value;
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
xe::store_and_swap<int64_t>(user_data + kValueOffset, value);
|
||||
return buffer_offset;
|
||||
}
|
||||
@@ -89,8 +89,8 @@ class UserProfile {
|
||||
: Setting(setting_id, Type::DOUBLE, 8), value(value) {}
|
||||
double value;
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
xe::store_and_swap<double>(user_data + kValueOffset, value);
|
||||
return buffer_offset;
|
||||
}
|
||||
@@ -103,8 +103,8 @@ class UserProfile {
|
||||
return value.empty() ? 0 : 2 * (static_cast<int32_t>(value.size()) + 1);
|
||||
}
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
int32_t length;
|
||||
if (value.empty()) {
|
||||
length = 0;
|
||||
@@ -114,7 +114,7 @@ class UserProfile {
|
||||
length = 2 * (static_cast<int32_t>(value.size()) + 1);
|
||||
xe::store_and_swap<int32_t>(user_data + kValueOffset, length);
|
||||
xe::store_and_swap<uint32_t>(user_data + kPointerOffset,
|
||||
static_cast<uint32_t>(buffer_offset));
|
||||
buffer_ptr + static_cast<uint32_t>(buffer_offset));
|
||||
memcpy(buffer + buffer_offset, value.data(), length);
|
||||
}
|
||||
return buffer_offset + length;
|
||||
@@ -125,8 +125,8 @@ class UserProfile {
|
||||
: Setting(setting_id, Type::FLOAT, 4), value(value) {}
|
||||
float value;
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
xe::store_and_swap<float>(user_data + kValueOffset, value);
|
||||
return buffer_offset;
|
||||
}
|
||||
@@ -139,8 +139,8 @@ class UserProfile {
|
||||
return static_cast<int32_t>(value.size());
|
||||
}
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
int32_t length;
|
||||
if (value.empty()) {
|
||||
length = 0;
|
||||
@@ -150,7 +150,7 @@ class UserProfile {
|
||||
length = static_cast<int32_t>(value.size());
|
||||
xe::store_and_swap<int32_t>(user_data + kValueOffset, length);
|
||||
xe::store_and_swap<uint32_t>(user_data + kPointerOffset,
|
||||
static_cast<uint32_t>(buffer_offset));
|
||||
buffer_ptr + static_cast<uint32_t>(buffer_offset));
|
||||
memcpy(buffer + buffer_offset, value.data(), length);
|
||||
}
|
||||
return buffer_offset + length;
|
||||
@@ -161,8 +161,8 @@ class UserProfile {
|
||||
: Setting(setting_id, Type::DATETIME, 8), value(value) {}
|
||||
int64_t value;
|
||||
size_t Append(uint8_t* user_data, uint8_t* buffer,
|
||||
size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_offset);
|
||||
uint32_t buffer_ptr, size_t buffer_offset) override {
|
||||
buffer_offset = Setting::Append(user_data, buffer, buffer_ptr, buffer_offset);
|
||||
xe::store_and_swap<int64_t>(user_data + kValueOffset, value);
|
||||
return buffer_offset;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user