On Wed, Aug 26, 2026 at 07:00:59AM +0200, Rafael Sadowski wrote:
> On Tue Aug 25, 2026 at 10:24:53PM +0200, Theo Buehler wrote:
> > On Tue, Aug 25, 2026 at 09:55:53PM +0200, Rafael Sadowski wrote:
> > > On Fri Aug 21, 2026 at 02:15:34PM +0200, Theo Buehler wrote:
> > > > Here is the directly libcxx22-related breakage of my first bulk.
> > > > 
> > > > There may be a few more because mono got stuck with a weird error.  And
> > > > I did not try to build the V8 monsters: codex, deno, chromiums and a few
> > > > others because my machine isn't beefy enough. I don't think anything
> > > > super important is directly affected or hiding behind those. So as far
> > > > as ports are concerned, I think we can land libcxx22 whenever we want:
> > > > 
> > > > audio/ncmpcpp
> > > > audio/rubberband
> > > > cad/freecad
> > > > databases/mongodb/44
> > > > games/cataclysm-dda
> > > > games/dxx-rebirth
> > > > games/flightgear/base
> > > > games/keeperrl
> > > > mail/kopano/core
> > > > misc/subsurface
> > > > shells/fish/v3
> > > > textproc/lttoolbox
> > > > 
> > > > 
> > > > misc/subsurface
> > > > /usr/ports/pobj/subsurface-6.0.5459/subsurface-e0fbda77ef203a5a2539465e9fa44df56e2f5a9e/core/uemis-downloader.cpp:434:9:
> > > >  error: null passed to a callee that requires a non-null argument 
> > > > [-Werror,
> > > > -Wnonnull]
> > > >   434 |         return NULL;
> > > >       |                ^~~~
> > > 
> > > OK?
> > > 
> > > diff --git a/misc/subsurface/patches/patch-core_uemis-downloader_cpp 
> > > b/misc/subsurface/patches/patch-core_uemis-downloader_cpp
> > > new file mode 100644
> > > index 00000000000..85c640885f3
> > > --- /dev/null
> > > +++ b/misc/subsurface/patches/patch-core_uemis-downloader_cpp
> > > @@ -0,0 +1,21 @@
> > > +Index: core/uemis-downloader.cpp
> > > +--- core/uemis-downloader.cpp.orig
> > > ++++ core/uemis-downloader.cpp
> > > +@@ -194,7 +194,7 @@ static struct dive 
> > > *get_dive_by_uemis_diveid(device_da
> > > +                 if (object_id == d->dcs[0].diveid)
> > > +                         return d.get();
> > > +         }
> > > +-        return NULL;
> > > ++        return {};
> > 
> > Maybe there is some C++ magic that fixes this, but I don't think this is
> > right. The return value is assigned to a non_owned_dive (since the
> > divelist is an owning_table containing unique_ptrs). Doesn't this leak?
> 
> Yes and no, with "std::unique_ptr::get", you access the raw pointer and
> then leave the protection provided by "std::unique_ptr" (which is the
> owner of this pointer). It's all a bit messy.

That's a bit of an understatement :)

> 
> I think the "return null" case is one that never happens, but the
> function has to return something.
> 
> But one thing is wrong: when we trigger "return null", we're dereferencing
> the pointer. I've fixed that below and instead of "{}" we can retrun
> nullptr which is the same but more explicit.

yeah, that looks better. ok

> 
> > 
> > > + }
> > > + 
> > > + /* send text to the importer progress bar */
> > > +@@ -431,7 +431,7 @@ static std::string 
> > > first_object_id_val(std::string_vie
> > > +                         return res;
> > > +                 }
> > > +         }
> > > +-        return NULL;
> > > ++        return {};
> > 
> > this seems fine.
> 
> Yes this returns a copy of an empty std::string.
> 
> > 
> > > + }
> > > + 
> > > + /* ultra-simplistic; it doesn't deal with the case when the object_id is
> > 
> 
> 
> diff --git a/misc/subsurface/patches/patch-core_uemis-downloader_cpp 
> b/misc/subsurface/patches/patch-core_uemis-downloader_cpp
> new file mode 100644
> index 00000000000..de09a8338da
> --- /dev/null
> +++ b/misc/subsurface/patches/patch-core_uemis-downloader_cpp
> @@ -0,0 +1,30 @@
> +Index: core/uemis-downloader.cpp
> +--- core/uemis-downloader.cpp.orig
> ++++ core/uemis-downloader.cpp
> +@@ -194,7 +194,7 @@ static struct dive *get_dive_by_uemis_diveid(device_da
> +             if (object_id == d->dcs[0].diveid)
> +                     return d.get();
> +     }
> +-    return NULL;
> ++    return nullptr;
> + }
> + 
> + /* send text to the importer progress bar */
> +@@ -431,7 +431,7 @@ static std::string first_object_id_val(std::string_vie
> +                     return res;
> +             }
> +     }
> +-    return NULL;
> ++    return {};
> + }
> + 
> + /* ultra-simplistic; it doesn't deal with the case when the object_id is
> +@@ -914,7 +914,7 @@ static bool process_raw_buffer(device_data_t *devdata,
> +                             int diveid = 0;
> +                             from_chars(val, diveid);
> +                             non_owned_dive = 
> get_dive_by_uemis_diveid(devdata, diveid);
> +-                            if (dive_no != 0)
> ++                            if (non_owned_dive && dive_no != 0)
> +                                     non_owned_dive->number = dive_no;
> +                             if (for_dive)
> +                                     *for_dive = diveid;

Reply via email to