annotate main.cpp @ 2:00b62a080354

fix numerous bugs
author Yasuri <yasuri@charliesmp.net>
date Sun, 13 Sep 2026 19:40:11 +0000
parents 21b543c7aa14
children ae3a6d7bcca6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
1 #include <iostream>
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
2 #include <sstream>
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
3 #include "process.h"
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
4 std::string extract_pkgname(const std::string& fzf_line) {
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
5 std::istringstream iss(fzf_line);
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
6 std::string marker, pkgver;
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
7 iss >> marker >> pkgver;
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
8 return pkgver;
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
9 }
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
10 int main() {
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
11 char* const query_argv[] = { const_cast<char*>("xbps-query"), const_cast<char*>("-Rs"), const_cast<char*>(""), nullptr };
2
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
12 std::string package_list = run_piped(query_argv, "");
0
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
13 char* const fzf_argv[] = { const_cast<char*>("fzf"), nullptr };
2
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
14 std::string result = run_piped(fzf_argv, package_list);
0
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
15
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
16 // strip trailing newline fzf adds
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
17 if (!result.empty() && result.back() == '\n') {
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
18 result.pop_back();
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
19 }
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
20 std::string pkgname = extract_pkgname(result);
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
21 char* const install_argv[] = {
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
22 const_cast<char*>("doas"),
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
23 const_cast<char*>("xbps-install"),
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
24 const_cast<char*>("-Sy"),
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
25 pkgname.data(),
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
26 nullptr
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
27 };
2
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
28 std::string status = spawn(install_argv);
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
29 if (status == "error") {
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
30 std::cerr << "failed to launch doas/xbps-install\n";
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
31 return 1;
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
32 }
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
33 if (status.rfind("sig:", 0) == 0) {
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
34 std::cerr << "xbps-install was killed by signal " << status.substr(4) << "\n";
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
35 return 1;
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
36 }
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
37 if (status != "0") {
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
38 std::cerr << "xbps-install exited with code " << status << "\n";
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
39 return 1;
00b62a080354 fix numerous bugs
Yasuri <yasuri@charliesmp.net>
parents: 0
diff changeset
40 }
0
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
41 return 0;
21b543c7aa14 Initial commit
Yasuri <yasuri@charliesmp.net>
parents:
diff changeset
42 }