URI: 
       Now scripts are run in their directory. - geomyidae - A small C-based gopherd.
  HTML git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit 8df91710dfdf1f9091be9ed40a259933c7b62951
   DIR parent bb858e05c4c1e15bd54b5bcb37ebac0f9356af47
  HTML Author: Christoph Lohmann <20h@r-36.net>
       Date:   Wed, 16 Mar 2011 06:37:10 +0100
       
       Now scripts are run in their directory.
       
       Diffstat:
         M handlr.c                            |      15 ++++++++++++++-
       
       1 file changed, 14 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/handlr.c b/handlr.c
       @@ -194,7 +194,7 @@ void
        handledcgi(int sock, char *file, char *port, char *base, char *args,
                        char *sear)
        {
       -        char *p, *ln, addr[512];
       +        char *p, *path, *ln, addr[512];
                int outpipe[2];
                Elems *el;
        
       @@ -203,6 +203,15 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,
                if(pipe(outpipe) < 0)
                        return;
        
       +        path = gstrdup(file);
       +        p = strrchr(path, '/');
       +        if (p != nil)
       +                p[1] = '\0';
       +        else {
       +                free(path);
       +                path = nil;
       +        }
       +
                p = strrchr(file, '/');
                if(p == nil)
                        p = file;
       @@ -224,6 +233,8 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,
                case 0:
                        dup2(outpipe[1], 1);
                        close(outpipe[0]);
       +                if (path != nil)
       +                        chdir(path);
                        execl(file, p, sear, args, (char *)nil);
                case -1:
                        break;
       @@ -242,6 +253,8 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,
                        tprintf(sock, "\r\n.\r\n\r\n");
        
                        wait(NULL);
       +                if (path != nil)
       +                        free(path);
                        shutdown(sock, SHUT_RDWR);
                        close(sock);
                        break;