From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from atuin.qyliss.net (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id BFF3A10D12 for ; Sun, 25 Aug 2024 11:29:12 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 993) id 9AC3D10D05; Sun, 25 Aug 2024 11:29:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on atuin.qyliss.net X-Spam-Level: * X-Spam-Status: No, score=1.8 required=5.0 tests=DMARC_REJECT,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=4.0.1 Received: from mail.cyberchaos.dev (mail.cyberchaos.dev [IPv6:2a0f:4ac0::3a11]) by atuin.qyliss.net (Postfix) with ESMTPS id EBF3910D04 for ; Sun, 25 Aug 2024 11:29:07 +0000 (UTC) From: Yureka DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yuka.dev; s=mail; t=1724585337; bh=3M7xoSVxL9sWhck6ipQkKG1zUGhDScqcbdqp/aFTA0s=; h=From:To:Cc:Subject:Date; b=pqLUSx/+liQ6azu3houD5ATAzpeHFYUWFxWvYSwXoeeXBN2NTx+0ou4+4UptnAoiC kDOnynyiY8I6nba8JY8dzWFcJwhDzQrhL6xaLt23ecz8eQFdlMpKNe9gy0A16zH0WO fRCIYFieNLecqPG7ZoSJ1nMBPVeWvdYxBExAvnlQ= To: devel@spectrum-os.org Subject: [PATCH] host/start-vmm: replace jq calls with miniserde Date: Sun, 25 Aug 2024 13:28:35 +0200 Message-ID: <20240825112835.207659-1-yuka@yuka.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: BGDFRA6F75AG3TE6O6YYVLYR44YC5VKI X-Message-ID-Hash: BGDFRA6F75AG3TE6O6YYVLYR44YC5VKI X-MailFrom: yuka@yuka.dev X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-devel.spectrum-os.org-0; header-match-devel.spectrum-os.org-1; header-match-devel.spectrum-os.org-2; header-match-devel.spectrum-os.org-3; header-match-devel.spectrum-os.org-4; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Yureka X-Mailman-Version: 3.3.9 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --- host/start-vmm/ch.rs | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/host/start-vmm/ch.rs b/host/start-vmm/ch.rs index cf164c6..abc6a00 100644 --- a/host/start-vmm/ch.rs +++ b/host/start-vmm/ch.rs @@ -9,7 +9,7 @@ use std::os::raw::{c_char, c_int}; use std::os::unix::prelude::*; use std::process::{Command, Stdio}; -use miniserde::{json, Serialize}; +use miniserde::{json, Deserialize, Serialize}; use crate::net::MacAddress; @@ -126,34 +126,26 @@ pub fn create_vm(vm_name: &str, mut config: VmConfig) -> Result<(), String> { } pub fn add_net(vm_name: &str, net: &NetConfig) -> Result { - let mut ch_remote = command(vm_name, "add-net") + let ch_output = command(vm_name, "add-net") .arg(format!("fd={},mac={}", net.fd, net.mac)) - .stdout(Stdio::piped()) .spawn() - .or(Err(EPERM))?; + .or(Err(EPERM))? + .wait_with_output() + .or(Err(EPROTO))?; - let jq_out = match Command::new("jq") - .args(["-j", ".id"]) - .stdin(ch_remote.stdout.take().unwrap()) - .stderr(Stdio::inherit()) - .output() - { - Ok(o) => o, - Err(_) => { - // Try not to leave a zombie. - let _ = ch_remote.kill(); - let _ = ch_remote.wait(); - return Err(EPERM); - } - }; + if !ch_output.status.success() { + return Err(EPROTO); + } - if let Ok(ch_remote_status) = ch_remote.wait() { - if ch_remote_status.success() && jq_out.status.success() { - return Ok(OsString::from_vec(jq_out.stdout)); - } + #[derive(Deserialize)] + struct AddNetOutput { + id: String, } - Err(EPROTO) + let output_str = std::str::from_utf8(&ch_output.stdout).map_err(|_| EPROTO)?; + let output_parsed: AddNetOutput = json::from_str(output_str).map_err(|_| EPROTO)?; + + Ok(OsString::from_vec(output_parsed.id.into())) } pub fn remove_device(vm_name: &str, device_id: &OsStr) -> Result<(), NonZeroI32> { -- 2.45.2