aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordacctal <donotcontactmevia@email.invalid>2026-07-02 07:29:38 +0000
committerdacctal <donotcontactmevia@email.invalid>2026-07-02 07:29:38 +0000
commit96463c0d8952bae8d62adec02ce9e6b79d558938 (patch)
treed16f5bd78ea5b39b31ab88f1be071d80a1fd751e /src
parent2c99a3d8d74f58e4cc7974c4092c82cd6095ff48 (diff)
pkg_create checkpoint!
Diffstat (limited to 'src')
-rw-r--r--src/main.c9
-rw-r--r--src/pkg_create.c59
-rw-r--r--src/str.c4
3 files changed, 61 insertions, 11 deletions
diff --git a/src/main.c b/src/main.c
index f67ef9d..1133b22 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
diff --git a/src/str.c b/src/str.c
index 67fd709..e12719c 100644
--- a/src/str.c
+++ b/src/str.c
@@ -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);
}