diff options
Diffstat (limited to 'snag/src/package_db.c')
| -rw-r--r-- | snag/src/package_db.c | 116 |
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; } |
