aboutsummaryrefslogtreecommitdiff
path: root/snag/src/package_db.c
diff options
context:
space:
mode:
Diffstat (limited to 'snag/src/package_db.c')
-rw-r--r--snag/src/package_db.c116
1 files changed, 58 insertions, 58 deletions
diff --git a/snag/src/package_db.c b/snag/src/package_db.c
index f2a105e..74a7937 100644
--- a/snag/src/package_db.c
+++ b/snag/src/package_db.c
@@ -15,76 +15,76 @@ bool load_package_info(char* pkgid, package_info_t* info) {
memset(info, 0, sizeof(*info));
size_t pkgid_len = strlen(pkgid);
- // construct package description directory path and ensure it exists
+ // construct package description directory path and ensure it exists
// desc_dir = "pkg_db/pkgid"
- size_t desc_dir_len = cfg.package_db_len + pkgid_len + 1;
+ size_t desc_dir_len = cfg.package_db_len + pkgid_len + 1;
info->desc_dir = emalloc(desc_dir_len + 1, "desc_dir");
- {
- memcpy(info->desc_dir, cfg.package_db, cfg.package_db_len);
- info->desc_dir[cfg.package_db_len] = '/';
- memcpy(info->desc_dir + cfg.package_db_len + 1, pkgid, pkgid_len);
- info->desc_dir[desc_dir_len] = '\0';
- if (access(info->desc_dir, F_OK) != 0) {
- print("Package '%s' not found\n", pkgid);
- free(info->desc_dir);
- return false;
- }
- }
+ {
+ memcpy(info->desc_dir, cfg.package_db, cfg.package_db_len);
+ info->desc_dir[cfg.package_db_len] = '/';
+ memcpy(info->desc_dir + cfg.package_db_len + 1, pkgid, pkgid_len);
+ info->desc_dir[desc_dir_len] = '\0';
+ if (access(info->desc_dir, F_OK) != 0) {
+ print("Package '%s' not found\n", pkgid);
+ free(info->desc_dir);
+ return false;
+ }
+ }
- // construct package description script path and ensure it exists
- // script_path = "desc_dir/pkgid.sh"
- size_t script_path_len = desc_dir_len + pkgid_len + 4;
- info->script_path = emalloc(script_path_len + 1, "info->script_path");
- {
- memcpy(info->script_path, info->desc_dir, desc_dir_len);
- info->script_path[desc_dir_len] = '/';
- memcpy(&info->script_path[desc_dir_len + 1], pkgid, pkgid_len);
- memcpy(&info->script_path[script_path_len - 3], ".sh", 3);
- info->script_path[script_path_len] = '\0';
- if (access(info->script_path, F_OK) != 0) {
- print("Package '%s' broken, doesn't have description script\n", pkgid);
- free(info->script_path);
- free(info->desc_dir);
- return false;
- }
- }
+ // construct package description script path and ensure it exists
+ // script_path = "desc_dir/pkgid.sh"
+ size_t script_path_len = desc_dir_len + pkgid_len + 4;
+ info->script_path = emalloc(script_path_len + 1, "info->script_path");
+ {
+ memcpy(info->script_path, info->desc_dir, desc_dir_len);
+ info->script_path[desc_dir_len] = '/';
+ memcpy(&info->script_path[desc_dir_len + 1], pkgid, pkgid_len);
+ memcpy(&info->script_path[script_path_len - 3], ".sh", 3);
+ info->script_path[script_path_len] = '\0';
+ if (access(info->script_path, F_OK) != 0) {
+ print("Package '%s' broken, doesn't have description script\n", pkgid);
+ free(info->script_path);
+ free(info->desc_dir);
+ return false;
+ }
+ }
- // PIPE and FORK to run pkg attrs script
+ // PIPE and FORK to run pkg attrs script
int pipefds[2] = {0};
if (pipe(pipefds) < 0) die("failed to pipe: %s", strerror(errno));
pid_t pid = fork();
if (pid < 0) die("failed to fork: %s", strerror(errno));
if (pid == 0) {
- // child proc
- // connect my stdout to the pipe
+ // child proc
+ // connect my stdout to the pipe
close(pipefds[0]);
dup2(pipefds[1], STDOUT_FILENO);
close(pipefds[1]);
- // exec into get attr script
+ // exec into get attr script
char* argv[] = { cfg.get_package_info_script, info->script_path, NULL };
char* envp[] = { NULL };
execve(cfg.get_package_info_script, argv, envp);
- // what are you still doing here?
- die("CHILD - execve to %s failed: %s", cfg.get_package_info_script, strerror(errno));
+ // what are you still doing here?
+ die("CHILD - execve to %s failed: %s", cfg.get_package_info_script, strerror(errno));
} else {
- // parent proc, close write end of pipe
- close(pipefds[1]);
- }
+ // parent proc, close write end of pipe
+ close(pipefds[1]);
+ }
- // wait for child to finish
+ // wait for child to finish
int wstatus;
if (waitpid(pid, &wstatus, 0) < 0) die("waitpid failed: %s", strerror(errno));
- if (WEXITSTATUS(wstatus) != 0) die("the child failed to execute get_pkg_attr script: %d", WEXITSTATUS(wstatus));
+ if (WEXITSTATUS(wstatus) != 0) die("the child failed to execute get_pkg_attr script: %d", WEXITSTATUS(wstatus));
- // read all bytes from pipe into attr buffer
+ // read all bytes from pipe into attr buffer
ssize_t bytes_read = read(pipefds[0], info->attrs.buffer, sizeof(info->attrs.buffer));
if (bytes_read < 0) die("failed to read from pipe: %s", strerror(errno));
- close(pipefds[0]);
+ close(pipefds[0]);
- // read attributes from attr buffer
- // attribute format: type (char), data value (null terminated str)
- // todo(jqj): switch over to dynamically allocated buffer
+ // read attributes from attr buffer
+ // attribute format: type (char), data value (null terminated str)
+ // todo(jqj): switch over to dynamically allocated buffer
for (int i = 0; i < bytes_read;) {
char atype = info->attrs.buffer[i];
i++;
@@ -95,22 +95,22 @@ bool load_package_info(char* pkgid, package_info_t* info) {
info->attrs.name = &info->attrs.buffer[i]; break;
case 'd':
info->attrs.desc = &info->attrs.buffer[i]; break;
- case 'w':
- info->attrs.webpage = &info->attrs.buffer[i]; break;
- case 'l':
- info->attrs.license = &info->attrs.buffer[i]; break;
- case 'v':
- info->attrs.version = &info->attrs.buffer[i]; break;
+ case 'w':
+ info->attrs.webpage = &info->attrs.buffer[i]; break;
+ case 'l':
+ info->attrs.license = &info->attrs.buffer[i]; break;
+ case 'v':
+ info->attrs.version = &info->attrs.buffer[i]; break;
case 's':
- info->attrs.source.name = &info->attrs.buffer[i]; break;
- case 'u':
- info->attrs.source.url = &info->attrs.buffer[i]; break;
- case 'c':
- info->attrs.source.checksum = &info->attrs.buffer[i]; break;
+ info->attrs.source.name = &info->attrs.buffer[i]; break;
+ case 'u':
+ info->attrs.source.url = &info->attrs.buffer[i]; break;
+ case 'c':
+ info->attrs.source.checksum = &info->attrs.buffer[i]; break;
}
while(info->attrs.buffer[i] != '\0' && i < bytes_read) i++;
i++;
}
- return true;
+ return true;
}