nfqws,tpws: set EXEDIR env var to use in @config

This commit is contained in:
bol-van 2024-11-14 10:57:02 +03:00
parent 4d47749e7c
commit ce33a27c57
6 changed files with 23 additions and 3 deletions

View File

@ -367,14 +367,14 @@ void fill_random_az09(uint8_t *p,size_t sz)
} }
} }
bool cd_to_exe_dir(const char *argv0) bool set_env_exedir(const char *argv0)
{ {
char *s,*d; char *s,*d;
bool bOK=false; bool bOK=false;
if ((s = strdup(argv0))) if ((s = strdup(argv0)))
{ {
if ((d = dirname(s))) if ((d = dirname(s)))
bOK = !chdir(d); setenv("EXEDIR",s,1);
free(s); free(s);
} }
return bOK; return bOK;

View File

@ -75,7 +75,7 @@ void fill_random_bytes(uint8_t *p,size_t sz);
void fill_random_az(uint8_t *p,size_t sz); void fill_random_az(uint8_t *p,size_t sz);
void fill_random_az09(uint8_t *p,size_t sz); void fill_random_az09(uint8_t *p,size_t sz);
bool cd_to_exe_dir(const char *argv0); bool set_env_exedir(const char *argv0);
struct cidr4 struct cidr4

View File

@ -1122,6 +1122,8 @@ void config_from_file(const char *filename)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
set_env_exedir(argv[0]);
#ifdef __CYGWIN__ #ifdef __CYGWIN__
if (service_run(argc, argv)) if (service_run(argc, argv))
{ {

View File

@ -10,6 +10,7 @@
#include <ifaddrs.h> #include <ifaddrs.h>
#include <time.h> #include <time.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <libgen.h>
#include "helpers.h" #include "helpers.h"
@ -349,6 +350,20 @@ bool pf_is_empty(const port_filter *pf)
} }
bool set_env_exedir(const char *argv0)
{
char *s,*d;
bool bOK=false;
if ((s = strdup(argv0)))
{
if ((d = dirname(s)))
setenv("EXEDIR",s,1);
free(s);
}
return bOK;
}
static void mask_from_preflen6_make(uint8_t plen, struct in6_addr *a) static void mask_from_preflen6_make(uint8_t plen, struct in6_addr *a)
{ {
if (plen >= 128) if (plen >= 128)

View File

@ -73,6 +73,8 @@ bool pf_in_range(uint16_t port, const port_filter *pf);
bool pf_parse(const char *s, port_filter *pf); bool pf_parse(const char *s, port_filter *pf);
bool pf_is_empty(const port_filter *pf); bool pf_is_empty(const port_filter *pf);
bool set_env_exedir(const char *argv0);
#ifndef IN_LOOPBACK #ifndef IN_LOOPBACK
#define IN_LOOPBACK(a) ((((uint32_t) (a)) & 0xff000000) == 0x7f000000) #define IN_LOOPBACK(a) ((((uint32_t) (a)) & 0xff000000) == 0x7f000000)
#endif #endif

View File

@ -1447,6 +1447,7 @@ int main(int argc, char *argv[])
struct salisten_s list[MAX_BINDS]; struct salisten_s list[MAX_BINDS];
char ip_port[48]; char ip_port[48];
set_env_exedir(argv[0]);
srand(time(NULL)); srand(time(NULL));
mask_from_preflen6_prepare(); mask_from_preflen6_prepare();