1
0
mirror of https://github.com/topjohnwu/Magisk.git synced 2025-04-02 08:42:15 +00:00
topjohnwu a73e7e9f99 Introduce new module mount implementation
Rewrite the whole module mounting logic from scratch.
Even the algorithm is different compared to the old one.

This new design focuses on a few key points:
- Modular: Custom nodes can be injected into the mount tree.
  It's the main reason for starting the rewrite (needed for Android 11)
- Efficient: Compared to the existing implementation, this is the most
  efficient (both in terms of computation and memory usage) design I
  currently can come up with.
- Accurate: The old mounting logic relies on handling specifically every
  edge case I can think of. During this rewrite I actually found some
  cases that the old design does not handle properly. This new design is
  architected in a way (node types and its rankings) that it should
  handle edge cases all by itself when constructing mount trees.
2020-04-18 02:00:48 -07:00

75 lines
1.3 KiB
C++

#pragma once
#include <pthread.h>
#include <string>
#include <vector>
#include <socket.hpp>
// Commands require connecting to daemon
enum {
DO_NOTHING = 0,
SUPERUSER,
CHECK_VERSION,
CHECK_VERSION_CODE,
POST_FS_DATA,
LATE_START,
BOOT_COMPLETE,
MAGISKHIDE,
SQLITE_CMD,
REMOVE_MODULES,
GET_PATH,
};
// Return codes for daemon
enum {
DAEMON_ERROR = -1,
DAEMON_SUCCESS = 0,
ROOT_REQUIRED,
DAEMON_LAST
};
// daemon.cpp
int connect_daemon(bool create = false);
/***************
* Boot Stages *
***************/
void unlock_blocks();
void post_fs_data(int client);
void late_start(int client);
void boot_complete(int client);
void handle_modules();
void remove_modules();
/*************
* Scripting *
*************/
void exec_script(const char *script);
void exec_common_script(const char *stage);
void exec_module_script(const char *stage, const std::vector<std::string> &module_list);
void install_apk(const char *apk);
/**************
* MagiskHide *
**************/
void magiskhide_handler(int client);
/*************
* Superuser *
*************/
void su_daemon_handler(int client, struct ucred *credential);
/*********************
* Daemon Global Vars
*********************/
extern int SDK_INT;
extern bool RECOVERY_MODE;
#define APP_DATA_DIR (SDK_INT >= 24 ? "/data/user_de" : "/data/user")