diff options
| author | dacctal <donotcontactmevia@email.invalid> | 2026-07-02 07:29:38 +0000 |
|---|---|---|
| committer | dacctal <donotcontactmevia@email.invalid> | 2026-07-02 07:29:38 +0000 |
| commit | 96463c0d8952bae8d62adec02ce9e6b79d558938 (patch) | |
| tree | d16f5bd78ea5b39b31ab88f1be071d80a1fd751e /src | |
| parent | 2c99a3d8d74f58e4cc7974c4092c82cd6095ff48 (diff) | |
pkg_create checkpoint!
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 9 | ||||
| -rw-r--r-- | src/pkg_create.c | 59 | ||||
| -rw-r--r-- | src/str.c | 4 |
3 files changed, 61 insertions, 11 deletions
@@ -27,7 +27,16 @@ int main(int argc, char **argv) { (void)argc; init_vars(); package_t pkg = pkg_create(mstrslc(argv[1])); + printf("NAME:\t"); str_println(&pkg.name); + printf("URL:\t"); + str_println(&pkg.url); + printf("VER:\t"); + str_println(&pkg.version); + printf("TRG:\t"); + str_println(&pkg.target); + printf("SRC:\t"); + str_println(&pkg.src); pkg_free(&pkg); // cla_parse(argc, argv); free_vars(); diff --git a/src/pkg_create.c b/src/pkg_create.c index ebf0745..29482a9 100644 --- a/src/pkg_create.c +++ b/src/pkg_create.c @@ -44,13 +44,42 @@ static str get_pkgsrc(package_t pkg) { str_fmt(&pkg.name), str_fmt(&pkg.version)); } +static void assign_pkg_version(package_t *pkg, str *new_arg_str) { + if (str_find_char(new_arg_str, '@')) { + str tmp_arg = str_from_after_delim(new_arg_str, '@'); + if (str_find_char(new_arg_str, ',')) { + str tmp_trg = str_from_after_delim(&tmp_arg, ','); + pkg->version = str_from_after_delim(new_arg_str, '@'); + pkg->version.len -= tmp_trg.len; + str_free(&tmp_trg); + } else { + pkg->version = str_from_after_delim(new_arg_str, '@'); + } + if (str_find_char(&pkg->version, ',')) pkg->version.len--; + str_free(&tmp_arg); + pkg->name.len -= pkg->version.len + 1; + } else pkg->version = mstr("HEAD"); +} + +static void assign_pkg_target(package_t *pkg, str *new_arg_str) { + if (str_find_char(new_arg_str, ',')) { + str tmp_arg = str_from_after_delim(new_arg_str, ','); + if (str_find_char(new_arg_str, '@')) { + str tmp_ver = str_from_after_delim(&tmp_arg, '@'); + pkg->target = str_from_after_delim(new_arg_str, ','); + pkg->target.len -= tmp_ver.len; + str_free(&tmp_ver); + } else { + pkg->target = str_from_after_delim(new_arg_str, ','); + } + if (str_find_char(&pkg->target, '@')) pkg->target.len--; + str_free(&tmp_arg); + pkg->name.len -= pkg->target.len + 1; + } else pkg->target = mstr("default"); +} + package_t pkg_create(str_slc arg) { - str ver_buf = mstr("HEAD"); - package_t pkg = { - .version = ver_buf, - .is_local = false, - }; - str_free(&ver_buf); + package_t pkg = { .is_local = false, }; char cwd[MAX_PATH_LEN]; getcwd(cwd, MAX_PATH_LEN); @@ -62,9 +91,6 @@ package_t pkg_create(str_slc arg) { bool is_installed_locally = is_directory(dest_dir.data); - pkg.version = str_from_after_delim(&new_arg_str, '@'); - pkg.target = str_from_after_delim(&new_arg_str, ','); - bool is_in_repos = false; // for (size_t i = 0; i < cached_repos_count; i++) { // if (strcmp(new_arg, cached_repos[i].source_key) == 0) { @@ -73,6 +99,18 @@ package_t pkg_create(str_slc arg) { // } // } + assign_pkg_version(&pkg, &new_arg_str); + assign_pkg_target(&pkg, &new_arg_str); + if (str_find_char(&new_arg_str, '@')) { + str tmp = str_from_after_delim(&new_arg_str, '@'); + new_arg_str.len -= tmp.len + 1; + str_free(&tmp); + } + if (str_find_char(&new_arg_str, ',')) { + str tmp = str_from_after_delim(&new_arg_str, ','); + new_arg_str.len -= tmp.len + 1; + str_free(&tmp); + } if (strncmp(arg.data, "http", 4) == 0 || strncmp(arg.data, "ssh", 3) == 0) { pkg.url = new_arg_str; pkg.name = str_from_after_delim(&new_arg_str, '/'); @@ -96,6 +134,9 @@ package_t pkg_create(str_slc arg) { log_error("'%.*s' is not a valid package", str_fmt(&arg)); exit(EXIT_FAILURE); } + if (str_find_char(&new_arg_str, ',') + && str_find_char(&new_arg_str, '@') + ) pkg.name.len--; pkg.src = get_pkgsrc(pkg); str_free(&cwd_str); str_free(&dest_dir); @@ -432,11 +432,11 @@ char str_last(const str *s) { return s->data[s->len - 1]; } -size_t str_find_char(const str *s, char c) { +ptrdiff_t str_find_char(const str *s, char c) { return str_slc_find_char(_strslc(s), c); } -size_t str_find_char_right(const str *s, char c) { +ptrdiff_t str_find_char_right(const str *s, char c) { return str_slc_find_char_right(_strslc(s), c); } |
