platform_bootable_recovery/recovery-refresh.cpp
xunchang 316e971746 Move wipe cache|data to libinstall
Therefore, libinstall becomes the sole owner to handle the request
from minadbd service.

The change also includes
1. move logging.cpp out of librecovery
2. drop the dependency on common.h
3. now it's more sensible to move the wipe_cache as part of
install_package. move the wipe_cache to the end of the function.

Bug: 130166585
Test: wipe data and cache from menu
Change-Id: I6f356dccdb38015c50acf756bac246f87c30fc1f
2019-04-15 12:22:11 -07:00

71 lines
2.6 KiB
C++

/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//
// Strictly to deal with reboot into system after OTA, then
// reboot while in system before boot complete landing us back
// into recovery to continue with any mitigations with retained
// log history. This simply refreshes the pmsg files from
// the last pmsg file contents.
//
// Usage:
// recovery-refresh [--force-rotate|--rotate]
//
// All file content representing in the recovery/ directory stored in
// /sys/fs/pstore/pmsg-ramoops-0 in logger format that reside in the
// LOG_ID_SYSTEM buffer at ANDROID_LOG_INFO priority or higher is
// refreshed into /dev/pmsg0. This ensures that an unexpected reboot
// before recovery-persist is run will still contain the associated
// pmsg Android Logger content.
//
// --force-rotate recovery/last_kmsg and recovery.last_log files are
// rotated with .<number> suffixes upwards.
// --rotate rotated only if rocovery/last_msg or recovery/last_log
// exist, otherwise perform 1:1 refresh.
//
#include <string.h>
#include <string>
#include <private/android_logger.h> /* private pmsg functions */
#include "otautil/logging.h"
int main(int argc, char **argv) {
static const char filter[] = "recovery/";
static const char force_rotate_flag[] = "--force-rotate";
static const char rotate_flag[] = "--rotate";
ssize_t ret;
bool doRotate = false;
// Take last pmsg contents and rewrite it to the current pmsg session.
if ((argc <= 1) || !argv[1] ||
(((doRotate = strcmp(argv[1], rotate_flag))) &&
strcmp(argv[1], force_rotate_flag))) {
doRotate = false;
} else if (!doRotate) {
// Do we need to rotate?
__android_log_pmsg_file_read(
LOG_ID_SYSTEM, ANDROID_LOG_INFO, filter,
logbasename, &doRotate);
}
// Take action to refresh pmsg contents
ret = __android_log_pmsg_file_read(
LOG_ID_SYSTEM, ANDROID_LOG_INFO, filter,
logrotate, &doRotate);
return (ret < 0) ? ret : 0;
}