summaryrefslogtreecommitdiffstats
path: root/updater/blockimg.cpp
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2015-09-25 20:32:55 +0200
committerAndroid Git Automerger <android-git-automerger@android.com>2015-09-25 20:32:55 +0200
commitf61eec3e2db4e0e9bfa37cff23e5e05c92384e83 (patch)
tree9234cbd9eacad5e194384814ed4ab2e165472e93 /updater/blockimg.cpp
parentam 3317d501: Merge "minadbd: move from D() to VLOG()." (diff)
parentMerge changes Ic769eafc,I63f28b3b (diff)
downloadandroid_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.tar
android_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.tar.gz
android_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.tar.bz2
android_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.tar.lz
android_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.tar.xz
android_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.tar.zst
android_bootable_recovery-f61eec3e2db4e0e9bfa37cff23e5e05c92384e83.zip
Diffstat (limited to 'updater/blockimg.cpp')
-rw-r--r--updater/blockimg.cpp65
1 files changed, 25 insertions, 40 deletions
diff --git a/updater/blockimg.cpp b/updater/blockimg.cpp
index 6111d0d1e..ddb474ffd 100644
--- a/updater/blockimg.cpp
+++ b/updater/blockimg.cpp
@@ -36,6 +36,7 @@
#include <string>
#include <vector>
+#include <base/parseint.h>
#include <base/strings.h>
#include "applypatch/applypatch.h"
@@ -77,40 +78,31 @@ static void parse_range(const char* range_text, RangeSet& rs) {
goto err;
}
- errno = 0;
- val = strtol(pieces[0].c_str(), nullptr, 0);
-
- if (errno != 0 || val < 2 || val > INT_MAX) {
+ size_t num;
+ if (!android::base::ParseUint(pieces[0].c_str(), &num, static_cast<size_t>(INT_MAX))) {
goto err;
- } else if (val % 2) {
+ }
+
+ if (num == 0 || num % 2) {
goto err; // must be even
- } else if (val != static_cast<long int>(pieces.size() - 1)) {
+ } else if (num != pieces.size() - 1) {
goto err;
}
- size_t num;
- num = static_cast<size_t>(val);
-
rs.pos.resize(num);
rs.count = num / 2;
rs.size = 0;
for (size_t i = 0; i < num; i += 2) {
- const char* token = pieces[i+1].c_str();
- errno = 0;
- val = strtol(token, nullptr, 0);
- if (errno != 0 || val < 0 || val > INT_MAX) {
+ if (!android::base::ParseUint(pieces[i+1].c_str(), &rs.pos[i],
+ static_cast<size_t>(INT_MAX))) {
goto err;
}
- rs.pos[i] = static_cast<size_t>(val);
- token = pieces[i+2].c_str();
- errno = 0;
- val = strtol(token, nullptr, 0);
- if (errno != 0 || val < 0 || val > INT_MAX) {
+ if (!android::base::ParseUint(pieces[i+2].c_str(), &rs.pos[i+1],
+ static_cast<size_t>(INT_MAX))) {
goto err;
}
- rs.pos[i+1] = static_cast<size_t>(val);
if (rs.pos[i] >= rs.pos[i+1]) {
goto err; // empty or negative range
@@ -800,7 +792,7 @@ static int LoadSrcTgtVersion2(char** wordsave, RangeSet& tgt, size_t& src_blocks
// <src_block_count>
word = strtok_r(nullptr, " ", wordsave);
- src_blocks = strtol(word, nullptr, 0);
+ android::base::ParseUint(word, &src_blocks);
allocate(src_blocks * BLOCKSIZE, buffer);
@@ -1381,24 +1373,21 @@ static Value* PerformBlockImageUpdate(const char* name, State* state, int /* arg
std::vector<std::string> lines = android::base::Split(transfer_list, "\n");
// First line in transfer list is the version number
- long int val;
- errno = 0;
- val = strtol(lines[0].c_str(), nullptr, 0);
- if (errno != 0 || val < 1 || val > 3) {
+ if (!android::base::ParseInt(lines[0].c_str(), &params.version, 1, 3)) {
fprintf(stderr, "unexpected transfer list version [%s]\n", lines[0].c_str());
return StringValue(strdup(""));
}
- params.version = static_cast<int>(val);
fprintf(stderr, "blockimg version is %d\n", params.version);
// Second line in transfer list is the total number of blocks we expect to write
- int total_blocks = strtol(lines[1].c_str(), nullptr, 0);
-
- if (total_blocks < 0) {
+ int total_blocks;
+ if (!android::base::ParseInt(lines[1].c_str(), &total_blocks, 0)) {
ErrorAbort(state, "unexpected block count [%s]\n", lines[1].c_str());
return StringValue(strdup(""));
- } else if (total_blocks == 0) {
+ }
+
+ if (total_blocks == 0) {
return StringValue(strdup("t"));
}
@@ -1408,24 +1397,20 @@ static Value* PerformBlockImageUpdate(const char* name, State* state, int /* arg
fprintf(stderr, "maximum stash entries %s\n", lines[2].c_str());
// Fourth line is the maximum number of blocks that will be stashed simultaneously
- int stash_max_blocks = strtol(lines[3].c_str(), nullptr, 0);
-
- if (stash_max_blocks < 0) {
+ int stash_max_blocks;
+ if (!android::base::ParseInt(lines[3].c_str(), &stash_max_blocks, 0)) {
ErrorAbort(state, "unexpected maximum stash blocks [%s]\n", lines[3].c_str());
return StringValue(strdup(""));
}
- if (stash_max_blocks >= 0) {
- int res = CreateStash(state, stash_max_blocks, blockdev_filename->data,
- params.stashbase);
-
- if (res == -1) {
- return StringValue(strdup(""));
- }
+ int res = CreateStash(state, stash_max_blocks, blockdev_filename->data, params.stashbase);
- params.createdstash = res;
+ if (res == -1) {
+ return StringValue(strdup(""));
}
+ params.createdstash = res;
+
start += 2;
}