new: cleaning up functions, base implementation of install function
This commit is contained in:
@ -3,7 +3,16 @@
|
||||
#include "types.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef struct lm_ctx {
|
||||
lm_pool_t *pools; // pool list
|
||||
char *root; // root path for package installtion
|
||||
char *temp; // temp path
|
||||
char *data; // package database path
|
||||
const char *version; // libmp version (read-only)
|
||||
} lm_ctx_t;
|
||||
|
||||
typedef bool (*lm_ctx_pool_callback_t)(lm_ctx_t *ctx, lm_pool_t *pool, bool status, void *data);
|
||||
typedef bool (*lm_ctx_database_callback_t)(lm_ctx_t *ctx, lm_pkg_t *pkg, void *data);
|
||||
|
||||
void lm_ctx_init(lm_ctx_t *ctx);
|
||||
bool lm_ctx_set_data(lm_ctx_t *ctx, char *dir);
|
||||
@ -11,6 +20,12 @@ bool lm_ctx_set_root(lm_ctx_t *ctx, char *dir);
|
||||
bool lm_ctx_set_temp(lm_ctx_t *ctx, char *dir);
|
||||
void lm_ctx_free(lm_ctx_t *ctx);
|
||||
|
||||
lm_pkg_t *lm_ctx_find(lm_ctx_t *ctx, char *name, char *version);
|
||||
bool lm_ctx_install(lm_ctx_t *ctx, char *package);
|
||||
bool lm_ctx_remove(lm_ctx_t *ctx, char *package);
|
||||
bool lm_ctx_verify(lm_ctx_t *ctx, char *package);
|
||||
bool lm_ctx_update(lm_ctx_t *ctx);
|
||||
|
||||
lm_pool_t *lm_ctx_pool_add(lm_ctx_t *ctx, char *name, char *url);
|
||||
bool lm_ctx_pool_del(lm_ctx_t *ctx, char *name);
|
||||
void lm_ctx_pool_clear(lm_ctx_t *ctx);
|
||||
@ -21,8 +36,11 @@ void lm_ctx_pool_get_info(
|
||||
void lm_ctx_pool_get_list(
|
||||
lm_ctx_t *ctx, bool allow_update, bool force_update, lm_ctx_pool_callback_t callback, void *data);
|
||||
|
||||
lm_pkg_t *lm_ctx_package_install(lm_ctx_t *ctx, char *name, char *version);
|
||||
lm_pkg_t *lm_ctx_package_get(lm_ctx_t *ctx, char *name, char *version);
|
||||
bool lm_ctx_package_verify(lm_ctx_t *ctx, char *name, char *version);
|
||||
bool lm_ctx_package_install(lm_ctx_t *ctx, lm_pkg_t *pkg);
|
||||
bool lm_ctx_package_remove(lm_ctx_t *ctx, lm_pkg_t *pkg);
|
||||
bool lm_ctx_package_verify(lm_ctx_t *ctx, lm_pkg_t *pkg);
|
||||
|
||||
lm_database_t *lm_ctx_database_new(lm_ctx_t *ctx);
|
||||
bool lm_ctx_database_is_installed(lm_ctx_t *ctx, lm_pkg_t *pkg, bool check_version);
|
||||
bool lm_ctx_database_find(lm_ctx_t *ctx, lm_pkg_t *pkg, char *name);
|
||||
bool lm_ctx_database_foreach(lm_ctx_t *ctx, lm_ctx_database_callback_t callback, void *data);
|
||||
|
@ -9,14 +9,16 @@ typedef enum lm_query_index {
|
||||
QUERY_INSERT_PACKAGE = 1,
|
||||
QUERY_SELECT_PACKAGE = 2,
|
||||
QUERY_DELETE_PACKAGE = 3,
|
||||
QUERY_ALL_PACKAGE = 4,
|
||||
} lm_query_index_t;
|
||||
|
||||
extern char *queries[];
|
||||
|
||||
typedef struct lm_database {
|
||||
char *dir;
|
||||
lm_pkg_t *pkg;
|
||||
sqlite3 *sql;
|
||||
sqlite3_stmt *st;
|
||||
sqlite3 *sql;
|
||||
char *dir;
|
||||
lm_pkg_t *pkg;
|
||||
} lm_database_t;
|
||||
|
||||
typedef bool (*lm_database_files_eachfunc_t)(lm_pkg_t *pkg, char *path, char *hash, void *data);
|
||||
@ -26,6 +28,7 @@ lm_database_t *lm_database_new(char *path);
|
||||
void lm_database_free(lm_database_t *db);
|
||||
|
||||
bool lm_database_find(lm_database_t *db, lm_pkg_t *pkg, char *name);
|
||||
bool lm_database_next(lm_database_t *db, lm_pkg_t *pkg);
|
||||
bool lm_database_add(lm_database_t *db, lm_pkg_t *pkg);
|
||||
bool lm_database_del(lm_database_t *db, lm_pkg_t *pkg);
|
||||
|
||||
|
@ -91,6 +91,10 @@ typedef enum lm_error {
|
||||
LM_ERR_DbKeepsDirFail = 86,
|
||||
LM_ERR_DbKeepsUnlinkFail = 87,
|
||||
LM_ERR_DbSqlNotFound = 88,
|
||||
LM_ERR_DependNotFound = 89,
|
||||
LM_ERR_InstallDownloadFail = 90,
|
||||
LM_ERR_PkgNotDownloaded = 91,
|
||||
LM_ERR_PkgRemoveDownloadFail = 92,
|
||||
} lm_error_t;
|
||||
|
||||
typedef struct lm_error_desc {
|
||||
@ -98,6 +102,7 @@ typedef struct lm_error_desc {
|
||||
char *desc;
|
||||
} lm_error_desc_t;
|
||||
|
||||
void lm_error_set(lm_error_t code);
|
||||
void lm_error_set(lm_error_t code, ...);
|
||||
void lm_error_clear();
|
||||
lm_error_t lm_error();
|
||||
char *lm_strerror();
|
||||
|
@ -16,6 +16,7 @@ void lm_package_init(lm_pkg_t *pkg);
|
||||
bool lm_package_data_load(lm_pkg_t *pkg, char *file);
|
||||
void lm_package_data_free(lm_pkg_t *pkg);
|
||||
|
||||
bool lm_package_downloaded(lm_pkg_t *pkg);
|
||||
bool lm_package_depend_add(lm_pkg_t *pkg, char *depend);
|
||||
size_t lm_package_depend_count(lm_pkg_t *pkg);
|
||||
size_t lm_package_depend_strlen(lm_pkg_t *pkg);
|
||||
|
@ -21,19 +21,19 @@ void lm_pool_test(lm_pool_t *pool);
|
||||
void lm_pool_free(lm_pool_t *pool);
|
||||
|
||||
lm_pkg_t *lm_pool_package_find(lm_pool_t *pool, char *name, char *version);
|
||||
bool lm_pool_package_download(lm_pool_t *pool, lm_pkg_t *pkg);
|
||||
bool lm_pool_package_add(lm_pool_t *pool, lm_pkg_t *pkg);
|
||||
bool lm_pool_package_get(lm_pool_t *pool, lm_pkg_t *pkg);
|
||||
|
||||
bool lm_pool_path_set_dir(lm_pool_t *pool, char *dir);
|
||||
bool lm_pool_path_is_empty(lm_pool_t *pool);
|
||||
void lm_pool_path_free(lm_pool_t *pool);
|
||||
|
||||
bool lm_pool_info_load(lm_pool_t *pool);
|
||||
bool lm_pool_info_get(lm_pool_t *pool);
|
||||
bool lm_pool_info_download(lm_pool_t *pool);
|
||||
void lm_pool_info_free(lm_pool_t *pool);
|
||||
|
||||
bool lm_pool_list_load(lm_pool_t *pool);
|
||||
bool lm_pool_list_get(lm_pool_t *pool);
|
||||
bool lm_pool_list_download(lm_pool_t *pool);
|
||||
void lm_pool_list_free(lm_pool_t *pool);
|
||||
|
||||
void lm_pool_serve(lm_pool_t *pool, lm_mptp_t *packet, int sock, struct sockaddr *addr);
|
||||
|
@ -16,14 +16,15 @@ typedef struct lm_pkg_path {
|
||||
} lm_pkg_path_t;
|
||||
|
||||
typedef struct lm_pkg {
|
||||
struct lm_pkg *next;
|
||||
lm_pkg_path_t paths;
|
||||
char *name;
|
||||
char *desc;
|
||||
char **depends;
|
||||
char **keeps;
|
||||
char *version;
|
||||
size_t size;
|
||||
struct lm_pool *pool;
|
||||
struct lm_pkg *next;
|
||||
lm_pkg_path_t paths;
|
||||
char *name;
|
||||
char *desc;
|
||||
char **depends;
|
||||
char **keeps;
|
||||
char *version;
|
||||
size_t size;
|
||||
} lm_pkg_t;
|
||||
|
||||
typedef struct lm_pool_info {
|
||||
@ -48,11 +49,3 @@ typedef struct lm_pool {
|
||||
bool available;
|
||||
char *name;
|
||||
} lm_pool_t;
|
||||
|
||||
typedef struct lm_ctx {
|
||||
lm_pool_t *pools; // pool list
|
||||
char *root; // root path for package installtion
|
||||
char *temp; // temp path
|
||||
char *data; // package database path
|
||||
const char *version; // libmp version (read-only)
|
||||
} lm_ctx_t;
|
||||
|
@ -34,3 +34,8 @@ void sockaddr_to_str(struct sockaddr *addr, char *str);
|
||||
int join_multiple(char *res, const char *base, const char *pth, const char *pth2);
|
||||
int join(char *res, const char *base, const char *pth);
|
||||
char *join_alloc(const char *base, const char *pth);
|
||||
|
||||
bool pkglist_contains(lm_pkg_t *list, lm_pkg_t *pkg);
|
||||
lm_pkg_t *pkglist_del(lm_pkg_t *list, lm_pkg_t *pkg);
|
||||
lm_pkg_t *pkglist_add(lm_pkg_t *list, lm_pkg_t *pkg);
|
||||
void pkglist_free(lm_pkg_t *list);
|
||||
|
Reference in New Issue
Block a user