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 :)

Reply via email to