Paul W. Rankin <p...@bydasein.com> writes:
> On 2021-03-28 18:56, Omar Polo wrote:
>>> Thanks Omar, I like this approach! I'm pretty green to C so this is
>>> what I have (which doesn't work):
>>>     #include <unistd.h>
>>>     int main(void) {
>>>             execl("/bin/lowdown", NULL);
>>>     }
>>> There is no HTML render but at least no errors, but cgit expects
>>> the
>>> resulting HTML printed to STDOUT, so I wonder whether this requires a
>>> return?
>> Assuming that the shell script you posted actually works yes, that
>> snippet (with a small tweak[0]) should work.  Make sure it's statically
>> linked.
>> For reference, here's how I would do it
>> $ cat <<EOF > my-cgit-filter.c
>> #include <unistd.h>
>> int
>> main(void)
>> {
>>         execl("/bin/lowdown", "lowdown", NULL);
>>      return 1;
>> }
>> EOF
>> $ cc my-cgit-filter.c -o my-cgit-filter.c -static
>> $ # check that it's actually statically linked
>> $ ldd my-cgit-filter
>> my-cgit-filter:
>>         Start            End              Type  Open Ref GrpRef Name
>>         000005196d856000 000005196d87b000 dlib  1    0   0
>> /tmp/my-cgit-filter
>> [0]: if you compile your snippet, clang should warning about a
>> missing
>>      sentinel, something along the lines of
>>      > warning: not enough variable arguments in 'execl' declaration
>> to fit a
>>      > sentinel [-Wsentinel]
>>      >   execl("/bin/lowdown", NULL);
>>      which should suggest the use of
>>      >   execl("/bin/lowdown", "lowdown", NULL);
>
> Thank you so much Omar! Making the sentinel change solved it :)

Glad it worked, and apologies for not writing the execl call correctly
the first time I mentioned it :)

Reply via email to