On 21 May 2020, at 14:41, John Ralls wrote:
The code that we have is gnomified from the original autopackage.org
version. I agree it's pretty awful; the comparison of sizeof(ptr) to
SSIZE_MAX particularly so; trying to allocate SSIZE_MAX-1 in the
impossible case that sizeof(ptr) > SSIZE_MAX borders on comical. I
suggest that rather than allocating the path buffers you just create
two char[PATH_MAX +1] buffers on the stack.
Yes, I noticed those glaring errors.
There's another problem though, /proc/self/exe is Linux-only so it
still won't work for the BSDs. They don't all have proc (OpenBSD
doesn't, it's optional on FreeBSD; NetBSD has procfs and uses
/proc/curproc/exe; DragonFly BSD uses /proc/curproc/file [1]). The
most general solution is to store argv[0] in inner_main and then look
for that file in $PATH. I dunno if it's that prominent a use case.
There have been only 2 bugs about binreloc ever and neither of them is
that it doesn't work.
If /proc/self/exe doesn't lead anywhere useful it falls back to reading
from /proc/self/maps. Is that any better? Or is it even worth doing?
It sounds like it isn't likely to succeed. Too bad there isn't a
general way to deal with this.
I started down this rabbit hole because running the Mac build of GnuCash
from the build directory fails without this fix. I'll try to make it
work at least in MacOS.
While looking for a general way to do this I found this StackOverflow
thread:
https://stackoverflow.com/questions/1528298/get-path-of-executable/1528493
This is the most complete discussion of this problem that I found. It
contains a link to
https://svn.sullivanandkey.com/SnKOpen/cpp/executable_path/trunk/ which
seems to be a remarkably complete solution to this problem. It is
probably overkill for GnuCash, but it is interesting. I'll probably
just make the existing code work right and leave it at that. Is that ok
with you, or should I try to use this more general solution? Since
GnuCash already uses Boost and CMake it might not be too hard to do.
Mike
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel