pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Curious shells/nushell issue



On Thu, 28 Dec 2023 at 14:50, RVP <rvp%sdf.org@localhost> wrote:
>
> > On -current, both amd64 and aarch64, using nushell 87.1 and 88.1, I get:
> > ---
> > # RUST_BACKTRACE=full /usr/pkg/bin/nu -c "cd /; ls -l "
> > thread 'main' panicked at library/std/src/sys/unix/time.rs:77:9:
> > assertion failed: tv_nsec >= 0 && tv_nsec < NSEC_PER_SEC as i64
>
> On NetBSD vnode times (esp. birthtimes) are initialized to tv_sec = -1,
> tv_nsec = -1. FreeBSD does tv_sec = -1, tv_nsec = 0 instead. That's why
> this assertion's tripping on NetBSD (does rust/nushell read birthtime???).
>
> Try patching Rust like this (warning: monkey see, monkey do Rust):
>
> In rust/library/std/src/sys/unix/time.rs:
> const fn new(tv_sec: i64, tv_nsec: i64) -> Timespec {
>         ...stuff...
>
>         #[cfg(target_os = "netbsd")]
>         let tv_nsec = if (tv_nsec < 0) { 0 } else { tv_nsec };
>
>         ...more stuff...
> }

--- ./work/rustc-1.73.0-src/library/std/src/sys/unix/time.rs.ORIG
 2023-12-28 17:38:55.059412516 +0000
+++ ./work/rustc-1.73.0-src/library/std/src/sys/unix/time.rs
2023-12-28 17:40:34.908068763 +0000
@@ -74,6 +74,8 @@
     }

     const fn new(tv_sec: i64, tv_nsec: i64) -> Timespec {
+       #[cfg(target_os = "netbsd")]
+        let tv_nsec = if tv_nsec < 0 { 0 } else { tv_nsec };
         assert!(tv_nsec >= 0 && tv_nsec < NSEC_PER_SEC as i64);
         // SAFETY: The assert above checks tv_nsec is within the valid range
         Timespec { tv_sec, tv_nsec: unsafe { Nanoseconds(tv_nsec as u32) } }

did the job indeed (apparently rust is not happy with parentheses
around the if-condition, though...;)

$ /root/nu.old -c "cd /; ls -l "
thread 'main' panicked at library/std/src/sys/unix/time.rs:77:9:
assertion failed: tv_nsec >= 0 && tv_nsec < NSEC_PER_SEC as i64
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
$ /usr/pkg/bin/nu -c "cd /; ls -l"
╭────┬─────────────┬──────┬────────┬──────────┬───────────┬───────────┬──────────┬──────┬───────┬──────────┬──────────────┬────────────────┬───────────────╮
│  # │    name     │ type │ target │ readonly │   mode    │ num_links
│  inode   │ user │ group │   size   │   created    │    accessed    │
  modified    │
├────┼─────────────┼──────┼────────┼──────────┼───────────┼───────────┼──────────┼──────┼───────┼──────────┼──────────────┼────────────────┼───────────────┤
│  0 │ altroot     │ dir  │        │ false    │ rwxr-xr-x │         2
│  1915520 │ root │ wheel │    512 B │ a year ago   │ 17 hours ago   │
8 months ago  │
│  1 │ bin         │ dir  │        │ false    │ rwxr-xr-x │         2
│  8269440 │ root │ wheel │  1,024 B │ a year ago   │ 10 hours ago   │
2 days ago    │
...

Chavdar
(I'll try next the patch kernfs_vnops.c; I guess it might be more generic)

>
> -RVP
>


-- 
----


Home | Main Index | Thread Index | Old Index