<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Nov 10, 2023, 15:37 Rob Landley <<a href="mailto:rob@landley.net">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 11/10/23 15:02, Ed Maste wrote:<br>
> On Fri, 10 Nov 2023 at 12:09, Rob Landley <<a href="mailto:rob@landley.net" target="_blank" rel="noreferrer">rob@landley.net</a>> wrote:<br>
>><br>
>> Which means that lib/portability.c hasn't got an implementation for BSD:<br>
>> ...<br>
>> Shouldn't be hard to add?<br>
> <br>
> Yes, it should be quite straightforward. I'll find a few minutes to<br>
> put a patch together.<br>
> <br>
>> > Similar issue, xattr_lget and xattr_get. And error: use of undeclared<br>
>> > identifier 'ENODATA'<br>
>> ...<br>
>>       if (errno==ENODATA || errno==ENOTSUP) len = 0;<br>
>><br>
>> It's trying to gracefully fail if we fetched xattr info on a system that hasn't<br>
>> got xattr support. You can probably #define it to ENOTSUP. Linux uses it quite a<br>
>> bit:<br>
> <br>
> I think I've encountered a compiler error or warning from this sort of<br>
> error, although that might have involved a switch statement (and<br>
> duplicate cases from the #define). Can take a look after dealing with<br>
> xattr.<br>
> <br>
>> The hard one is ps and friends. Last I checked there was a magic shared library<br>
>> to query proc info, and when I dug under the covers it was several different<br>
>> syscall/fcntl/ioctl variants actually querying the data.<br>
> <br>
> Yes, top will also be in that group. These ones may be good candidates<br>
> for GSoC or intern projects.<br>
<br>
A trick I've been pondering using is declaring __attribute__((__weak__)) on some<br>
functions in toys/*/*.c or lib/*.c that lib/portability.c can have optional<br>
alternate implementations of, assuming the --gc-sections trick can make the weak<br>
one drop out if a non-weak one gets linked in. (It _should_ do?)<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">you don't even need --gc-sections. that's just how weak symbols work.</div><div dir="auto"><br></div><div dir="auto">maskray (the person i mean any time i say "the linker guy") agrees: <a href="https://maskray.me/blog/2021-04-25-weak-symbol">https://maskray.me/blog/2021-04-25-weak-symbol</a></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That way I don't have to move the default Linux implementation into<br>
portability.c but can just have overrides there. For ps.c I'd have to move the<br>
struct procpid {} definition into lib/lib.h... and maybe the big enum with all<br>
the SLOT_blah definitions. (Which is _already_ ugly but I have yet to think of a<br>
better organization...) And maybe I should break down and make some #defines for<br>
the string offsets too...<br>
<br>
But the rest of it should _probably_ "just work"?<br>
<br>
The other TODO item I have here (apart from the possibly stale list at the top<br>
of ps.c) is that top's performance is terrible and I'd like to figure out why.<br>
(It east WAY too much CPU when monitoring a slow system. Need to profile where<br>
that gets eaten...)<br>
<br>
Well, and of course the "bsd style" options, ala "ps ax" which behaves slightly<br>
differently than "ps -ax". But I've got the plumbing for it (lib/args.c sets<br>
FLAGS_NODASH when you do tar xvzf instead of tar -xvzf so you ps can give them<br>
different behavior), just a question of doing it. Which is mostly a question of<br>
going through the dashless ps options and seeing what they DO. (I learned ps ax<br>
on sunos and kept using it via muscle memory. It looks like current versions of<br>
ps treat -ax like ax, which they didn't used to...)<br>
<br>
Rob<br>
_______________________________________________<br>
Toybox mailing list<br>
<a href="mailto:Toybox@lists.landley.net" target="_blank" rel="noreferrer">Toybox@lists.landley.net</a><br>
<a href="http://lists.landley.net/listinfo.cgi/toybox-landley.net" rel="noreferrer noreferrer" target="_blank">http://lists.landley.net/listinfo.cgi/toybox-landley.net</a><br>
</blockquote></div></div></div>