diff options
author | Tao Bao <tbao@google.com> | 2018-07-18 00:05:29 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-07-18 00:05:29 +0200 |
commit | af80f51151a7ec9402e4818219a74bf9ddfc9076 (patch) | |
tree | 5bf35c6deefe6bcaeca33b371719f570a0b1147d /recovery.cpp | |
parent | Merge "applypatch: Consolidate CacheSizeCheck() and MakeFreeSpaceOnCache()." am: 624b6b6cd5 (diff) | |
parent | Merge "Fix the arguments passed to getopt_long(3)." (diff) | |
download | android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.tar android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.tar.gz android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.tar.bz2 android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.tar.lz android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.tar.xz android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.tar.zst android_bootable_recovery-af80f51151a7ec9402e4818219a74bf9ddfc9076.zip |
Diffstat (limited to 'recovery.cpp')
-rw-r--r-- | recovery.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/recovery.cpp b/recovery.cpp index f6d4212ee..9588cc130 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -983,10 +983,6 @@ static void log_failure_code(ErrorCode code, const std::string& update_package) } Device::BuiltinAction start_recovery(Device* device, const std::vector<std::string>& args) { - std::vector<char*> args_to_parse(args.size()); - std::transform(args.cbegin(), args.cend(), args_to_parse.begin(), - [](const std::string& arg) { return const_cast<char*>(arg.c_str()); }); - static constexpr struct option OPTIONS[] = { { "fsck_unshare_blocks", no_argument, nullptr, 0 }, { "just_exit", no_argument, nullptr, 'x' }, @@ -1022,9 +1018,14 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri bool security_update = false; std::string locale; + auto args_to_parse = StringVectorToNullTerminatedArray(args); + int arg; int option_index; - while ((arg = getopt_long(args_to_parse.size(), args_to_parse.data(), "", OPTIONS, + // Parse everything before the last element (which must be a nullptr). getopt_long(3) expects a + // null-terminated char* array, but without counting null as an arg (i.e. argv[argc] should be + // nullptr). + while ((arg = getopt_long(args_to_parse.size() - 1, args_to_parse.data(), "", OPTIONS, &option_index)) != -1) { switch (arg) { case 't': |