X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=miscutil.c;h=488a774bb965ef0fd591dfe73ed432977d72d471;hp=ea2c3aae18a9e3d9fef7f98200bdb1c2ed4f8876;hb=2b20e4dfd8c1fa382ce680bcffb37e0a7af34634;hpb=2f180f0a2a126bd3da1b5bf3466ee1ed247cf91e diff --git a/miscutil.c b/miscutil.c index ea2c3aae..488a774b 100644 --- a/miscutil.c +++ b/miscutil.c @@ -1,4 +1,3 @@ -const char miscutil_rcs[] = "$Id: miscutil.c,v 1.83 2017/05/04 14:34:18 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/miscutil.c,v $ @@ -8,8 +7,8 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.83 2017/05/04 14:34:18 fabianke * to deserve their own file but don't really fit in * any other file. * - * Copyright : Written by and Copyright (C) 2001-2016 the - * Privoxy team. http://www.privoxy.org/ + * Copyright : Written by and Copyright (C) 2001-2020 the + * Privoxy team. https://www.privoxy.org/ * * Based on the Internet Junkbuster originally written * by and Copyright (C) 1997 Anonymous Coders and @@ -62,10 +61,8 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.83 2017/05/04 14:34:18 fabianke #include "project.h" #include "miscutil.h" -#include "errlog.h" #include "jcc.h" - -const char miscutil_h_rcs[] = MISCUTIL_H_VERSION; +#include "errlog.h" /********************************************************************* * @@ -87,6 +84,7 @@ void *zalloc(size_t size) #ifdef HAVE_CALLOC ret = calloc(1, size); #else +#warning calloc appears to be unavailable. Your platform will become unsupported in the future if ((ret = (void *)malloc(size)) != NULL) { memset(ret, 0, size); @@ -217,26 +215,22 @@ void *malloc_or_die(size_t buffer_size) * * Function : write_pid_file * - * Description : Writes a pid file with the pid of the main process + * Description : Writes a pid file with the pid of the main process. + * Exits if the file can't be opened * - * Parameters : None + * Parameters : + * 1 : pid_file = Path of the pid file that gets created. * * Returns : N/A * *********************************************************************/ -void write_pid_file(void) +void write_pid_file(const char *pid_file) { FILE *fp; - /* - * If no --pidfile option was given, - * we can live without one. - */ - if (pidfile == NULL) return; - - if ((fp = fopen(pidfile, "w")) == NULL) + if ((fp = fopen(pid_file, "w")) == NULL) { - log_error(LOG_LEVEL_INFO, "can't open pidfile '%s': %E", pidfile); + log_error(LOG_LEVEL_FATAL, "can't open pid file '%s': %E", pid_file); } else { @@ -647,42 +641,6 @@ char *bindup(const char *string, size_t len) *********************************************************************/ char * make_path(const char * dir, const char * file) { -#ifdef AMIGA - char path[512]; - - if (dir) - { - if (dir[0] == '.') - { - if (dir[1] == '/') - { - strncpy(path,dir+2,512); - } - else - { - strncpy(path,dir+1,512); - } - } - else - { - strncpy(path,dir,512); - } - path[511]=0; - } - else - { - path[0]=0; - } - if (AddPart(path,file,512)) - { - return strdup(path); - } - else - { - return NULL; - } -#else /* ndef AMIGA */ - if ((file == NULL) || (*file == '\0')) { return NULL; /* Error */ @@ -740,7 +698,6 @@ char * make_path(const char * dir, const char * file) return path; } -#endif /* ndef AMIGA */ } @@ -859,6 +816,92 @@ size_t privoxy_strlcat(char *destination, const char *source, const size_t size) #endif /* ndef HAVE_STRLCAT */ +/********************************************************************* + * + * Function : privoxy_millisleep + * + * Description : Sleep a number of milliseconds + * + * Parameters : + * 1 : delay: Number of milliseconds to sleep + * + * Returns : -1 on error, 0 otherwise + * + *********************************************************************/ +int privoxy_millisleep(unsigned milliseconds) +{ +#ifdef HAVE_NANOSLEEP + struct timespec rqtp = {0}; + struct timespec rmtp = {0}; + + rqtp.tv_sec = milliseconds / 1000; + rqtp.tv_nsec = (milliseconds % 1000) * 1000 * 1000; + + return nanosleep(&rqtp, &rmtp); +#elif defined (_WIN32) + Sleep(milliseconds); + + return 0; +#elif defined(__OS2__) + DosSleep(milliseconds * 10); + + return 0; +#else +#warning Missing privoxy_milisleep() implementation. delay-response{} will not work. + + return -1; +#endif /* def HAVE_NANOSLEEP */ + +} + + +/********************************************************************* + * + * Function : privoxy_gmtime_r + * + * Description : Behave like gmtime_r() and convert a + * time_t to a struct tm. + * + * Parameters : + * 1 : time_spec: The time to convert + * 2 : result: The struct tm to use as storage + * + * Returns : Pointer to the result or NULL on error. + * + *********************************************************************/ +struct tm *privoxy_gmtime_r(const time_t *time_spec, struct tm *result) +{ + struct tm *timeptr; + +#ifdef HAVE_GMTIME_R + timeptr = gmtime_r(time_spec, result); +#elif defined(MUTEX_LOCKS_AVAILABLE) + privoxy_mutex_lock(&gmtime_mutex); + timeptr = gmtime(time_spec); +#else +#warning Using unlocked gmtime() + timeptr = gmtime(time_spec); +#endif + + if (timeptr == NULL) + { +#if !defined(HAVE_GMTIME_R) && defined(MUTEX_LOCKS_AVAILABLE) + privoxy_mutex_unlock(&gmtime_mutex); +#endif + return NULL; + } + +#if !defined(HAVE_GMTIME_R) + *result = *timeptr; + timeptr = result; +#ifdef MUTEX_LOCKS_AVAILABLE + privoxy_mutex_unlock(&gmtime_mutex); +#endif +#endif + + return timeptr; +} + #if !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV) /********************************************************************* *