Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b9c4ce5 authored by Michael Runge's avatar Michael Runge Committed by Android Git Automerger
Browse files

am b278c252: Add support for tune2fs file operations

* commit 'b278c252':
  Add support for tune2fs file operations
parents de27d4cb b278c252
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -34,6 +34,16 @@ LOCAL_STATIC_LIBRARIES += libapplypatch libedify libmtdutils libminzip libz
LOCAL_STATIC_LIBRARIES += libmincrypt libbz
LOCAL_STATIC_LIBRARIES += libcutils liblog libstdc++ libc
LOCAL_STATIC_LIBRARIES += libselinux
tune2fs_static_libraries := \
 libext2_com_err \
 libext2_blkid \
 libext2_quota \
 libext2_uuid_static \
 libext2_e2p \
 libext2fs
LOCAL_STATIC_LIBRARIES += libtune2fs $(tune2fs_static_libraries)

LOCAL_C_INCLUDES += external/e2fsprogs/misc
LOCAL_C_INCLUDES += $(LOCAL_PATH)/..

# Each library in TARGET_RECOVERY_UPDATER_LIBS should have a function
+33 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@
#include "mtdutils/mtdutils.h"
#include "updater.h"
#include "install.h"
#include "tune2fs.h"

#ifdef USE_EXT4
#include "make_ext4fs.h"
@@ -1539,6 +1540,37 @@ Value* EnableRebootFn(const char* name, State* state, int argc, Expr* argv[]) {
    return StringValue(strdup("t"));
}

Value* Tune2FsFn(const char* name, State* state, int argc, Expr* argv[]) {
    if (argc == 0) {
        return ErrorAbort(state, "%s() expects args, got %d", name, argc);
    }

    char** args = ReadVarArgs(state, argc, argv);
    if (args == NULL) {
        return ErrorAbort(state, "%s() could not read args", name);
    }

    int i;
    char** args2 = malloc(sizeof(char*) * (argc+1));
    // Tune2fs expects the program name as its args[0]
    args2[0] = strdup(name);
    for (i = 0; i < argc; ++i) {
       args2[i + 1] = args[i];
    }
    int result = tune2fs_main(argc + 1, args2);
    for (i = 0; i < argc; ++i) {
        free(args[i]);
    }
    free(args);

    free(args2[0]);
    free(args2);
    if (result != 0) {
        return ErrorAbort(state, "%s() returned error code %d", name, result);
    }
    return StringValue(strdup("t"));
}

void RegisterInstallFunctions() {
    RegisterFunction("mount", MountFn);
    RegisterFunction("is_mounted", IsMountedFn);
@@ -1589,4 +1621,5 @@ void RegisterInstallFunctions() {
    RegisterFunction("set_stage", SetStageFn);

    RegisterFunction("enable_reboot", EnableRebootFn);
    RegisterFunction("tune2fs", Tune2FsFn);
}