diff options
| author | 2023-12-25 06:05:40 -0600 | |
|---|---|---|
| committer | 2023-12-25 06:05:40 -0600 | |
| commit | 6d1d4d0a5506dce90c833ef8dd141058fea3c33a (patch) | |
| tree | 12a95579dbf04c4310e5b42ad8cae399d81f1189 /src/l2su.c | |
| parent | initial commit (diff) | |
[WIP] Add instances
still need to do the following:
- check if the folder exists
- try and find some way to canonicalize the path name
Diffstat (limited to 'src/l2su.c')
| -rw-r--r-- | src/l2su.c | 131 |
1 files changed, 32 insertions, 99 deletions
@@ -1,135 +1,68 @@ #include "l2su.h" +#include "command.h" #include "macros.h" #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> -char *l2_launcher__strdup(const char *); -char *l2_launcher__strapp(char *, const char *); - -char *l2_launcher__find_config_path(void) -{ - /* check for $L2SU_CONFIG */ - char *config = getenv(PROJECT_NAME_UPPER "_CONFIG"); - if (config) { - return l2_launcher__strdup(config); - } - - /* check for $XDG_CONFIG_HOME */ - config = getenv("XDG_CONFIG_HOME"); - if (config) { - /* want to append '"/" PROJECT_NAME' to our string */ - char *ret = l2_launcher__strdup(config); - if (!ret) return NULL; - - return l2_launcher__strapp(ret, "/" PROJECT_NAME); - } - - /* check for $HOME/.config */ - config = getenv("HOME"); - if (config) { - char *ret = l2_launcher__strdup(config); - if (!ret) return NULL; - - return l2_launcher__strapp(ret, "/.config/" PROJECT_NAME); - } - - /* fail (do NOT attempt to find home directory from passwd */ - return NULL; -} - -char *l2_launcher__find_data_path(void) -{ - /* check for $L2SU_DATA */ - char *config = getenv(PROJECT_NAME_UPPER "_DATA"); - if (config) { - return l2_launcher__strdup(config); - } - - /* check for $XDG_DATA_HOME */ - config = getenv("XDG_DATA_HOME"); - if (config) { - char *ret = l2_launcher__strdup(config); - if (!ret) return NULL; - - return l2_launcher__strapp(ret, "/" PROJECT_NAME); - } - - /* check for $HOME/.local/share */ - config = getenv("HOME"); - if (config) { - char *ret = l2_launcher__strdup(config); - if (!ret) return NULL; - - return l2_launcher__strapp(ret, "/.local/share/" PROJECT_NAME); - } - - return NULL; -} +struct tag_l2_state_t l2_state = { 0 }; int l2_launcher_init(void) { /* find paths (set up l2_state.paths) */ /* create folders if they don't exist */ - printf("project is " PROJECT_NAME "...\n"); - /* look for config path */ - if (!(l2_state.paths.config = l2_launcher__find_config_path())) { + if (!(l2_state.paths.config = l2_launcher_find_config_path())) { fputs("fatal: Could not decide on a configuration directory! Please define " PROJECT_NAME_UPPER "_CONFIG to a sensible value.\n", stderr); return 1; } - if (!(l2_state.paths.data = l2_launcher__find_data_path())) { + if (!(l2_state.paths.data = l2_launcher_find_data_path())) { fputs("fatal: Could not decide on a data directory! Please define " PROJECT_NAME_UPPER "_DATA to a sensible value.\n", stderr); return 1; } - printf("config path: %s\n", l2_state.paths.config); - printf("data path: %s\n", l2_state.paths.data); + printf("Using configuration path: %s\n", l2_state.paths.config); + printf("Using data path: %s\n", l2_state.paths.data); - return 0; -} + if (l2_launcher_mkdir_parents(l2_state.paths.config) < 0) { + fprintf(stderr, "fatal: Could not create config directory: %s\n", strerror(errno)); + return 1; + } -int main(void) -{ - int status = l2_launcher_init(); - if (status != 0) return status; + if (l2_launcher_mkdir_parents(l2_state.paths.data) < 0) { + fprintf(stderr, "fatal: Could not create data directory: %s\n", strerror(errno)); + return 1; + } return 0; } -/* handcoded string functions - * - * NOTE: I am aware that this is inefficient but since these are used only a handful of times - * during initialization, I don't think performance is really a huge deal here. - * - * remember that this is a Minecraft launcher, so the PC has to meet the minimum specs of that, - * which are well above the minimum specs of this launcher */ - -char *l2_launcher__strdup(const char *in) +int main(int argc, char **argv) { - if (!in) return NULL; + int status = l2_launcher_init(); + if (status != 0) return EXIT_FAILURE; - size_t inlen = strlen(in); - char *ret = calloc(1, inlen + 1); + if (argc == 0 || !argv || !*argv) { + fputs("weird: no program name!\n", stderr); + return EXIT_FAILURE; + } - if (ret) memcpy(ret, in, inlen); + struct l2_parseinfo parseinfo; + unsigned parseres = l2_cmd_parse_command(argv + 1, &parseinfo); + if (parseres != CMD_PARSE_SUCCESS) { + fputs("failed to parse command\n", stderr); + return EXIT_FAILURE; + } - return ret; -} + unsigned res = (*parseinfo.proc)(parseinfo.ctx, parseinfo.argv); -char *l2_launcher__strapp(char *buf, const char *src) -{ - size_t buflen = strlen(buf); - size_t srclen = strlen(src); + l2_cmd_free_ctx(parseinfo.ctx); - char *ret = realloc(buf, buflen + srclen + 1); - if (!ret) return NULL; + return res == CMD_RESULT_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE; +} - memcpy(ret + buflen, src, srclen); - ret[buflen + srclen] = '\0'; - return ret; -} |
