1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#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 <fcntl.h>
#include <time.h>
#include <curl/curl.h>
#include <stdio.h>
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 */
|