#ifndef L2SU_MAIN_H_INCLUDED #define L2SU_MAIN_H_INCLUDED #include "command.h" #include "digest/digest.h" #include "instance.h" #include "version.h" #include "macros.h" #include #include #include #include struct l2_user_paths { const char *config; const char *data; }; struct tag_l2_state_t { struct l2_user_paths paths; /* eventually instances and other stuff will be stored in a hash table or something, * but for now a doubly-linked list accomplishes our goals */ struct l2_instance *instance_head; struct l2_instance *instance_tail; struct l2_version_remote *ver_remote_head; struct l2_version_remote *ver_remote_tail; }; extern struct tag_l2_state_t l2_state; /* homecooked string methods */ char *l2_launcher_strapp(char *target, const char *src); char *l2_launcher_sprintf_alloc(const char *fmt, ...) L2_FORMAT(printf, 1, 2); /* launcher utilities */ char *l2_launcher_find_config_path(void); char *l2_launcher_find_data_path(void); int l2_launcher_open_config(const char *path, int flags, mode_t mode); int l2_launcher_mkdir_parents(const char *path); int l2_launcher_mkdir_parents_ex(const char *path, unsigned ignore); char *l2_launcher_parse_iso_time(const char *str, struct tm *ts); struct l2_dlbuf { void *data; size_t size; size_t capacity; }; void l2_launcher_download_init(struct l2_dlbuf *buf); void *l2_launcher_download_finalize(struct l2_dlbuf *buf, size_t *psz); void l2_launcher_download_cleanup(struct l2_dlbuf *buf); //extern size_t (*const l2_dlcb)(char *, size_t, size_t, void *); extern const curl_write_callback l2_dlcb; CURLcode l2_launcher_download(CURL *cd, const char *url, void **odata, size_t *osize); int l2_json_merge_objects(json_t *j1, json_t *j2); /* string substitute utility */ typedef struct l2_subst l2_subst_t; int l2_subst_init(l2_subst_t **sp); int l2_subst_add(l2_subst_t *sp, const char *name, const char *value); int l2_subst_apply(l2_subst_t *sp, const char *in, char **out); void l2_subst_free(l2_subst_t *sp); #endif /* include guard */