ClamAV is an open source (GPLv2) anti-virus toolkit.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
clamav/contrib/DJGPP/djgpp_0.95.diff

827 lines
26 KiB

diff -ur clamav-orig/clamdtop/clamdtop.c clamav-new/clamdtop/clamdtop.c
--- clamav-orig/clamdtop/clamdtop.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/clamdtop/clamdtop.c 2009-03-16 16:30:26.000000000 +1100
@@ -47,8 +47,10 @@
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
+#ifndef __DJGPP__
#include <sys/un.h>
#endif
+#endif
#include <sys/time.h>
#include <assert.h>
#include <errno.h>
@@ -503,7 +505,7 @@
int s;
struct timeval tv;
conn->tcp = 0;
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__DJGPP__)
{
#else
if(soname[0] == '/' || (access(soname, F_OK) == 0)) {
diff -ur clamav-orig/clamscan/clamscan.c clamav-new/clamscan/clamscan.c
--- clamav-orig/clamscan/clamscan.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/clamscan/clamscan.c 2009-03-16 16:30:26.000000000 +1100
@@ -80,7 +80,7 @@
}
#endif
-#if !defined(C_WINDOWS) && !defined(C_BEOS)
+#if !defined(C_WINDOWS) && !defined(C_BEOS) && !defined(__DJGPP__)
sigemptyset(&sigset);
sigaddset(&sigset, SIGXFSZ);
sigprocmask(SIG_SETMASK, &sigset, NULL);
diff -ur clamav-orig/clamscan/manager.c clamav-new/clamscan/manager.c
--- clamav-orig/clamscan/manager.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/clamscan/manager.c 2009-03-16 17:15:46.000000000 +1100
@@ -73,6 +73,11 @@
#define P_tmpdir "C:\\WINDOWS\\TEMP"
#endif
+#ifdef __DJGPP__
+#undef P_tmpdir
+#define P_tmpdir "/dev/env/TEMP"
+#endif
+
#ifndef O_BINARY
#define O_BINARY 0
#endif
@@ -129,7 +134,7 @@
return 0;
}
info.rblocks += fsize / CL_COUNT_PRECISION;
-#ifndef C_WINDOWS
+#if !defined(C_WINDOWS) && !defined(__DJGPP__)
if(geteuid())
if(checkaccess(filename, NULL, R_OK) != 1) {
if(!printinfected)
@@ -214,7 +219,7 @@
if((dd = opendir(dirname)) != NULL) {
while((dent = readdir(dd))) {
-#if !defined(C_INTERIX) && !defined(C_WINDOWS)
+#if !defined(C_INTERIX) && !defined(C_WINDOWS) && !defined(__DJGPP__)
if(dent->d_ino)
#endif
{
@@ -334,7 +339,7 @@
struct stat sb;
char *file, cwd[1024], *pua_cats = NULL;
const struct optstruct *opt;
-#ifndef C_WINDOWS
+#if !defined(C_WINDOWS) && !defined(__DJGPP__)
struct rlimit rlim;
#endif
@@ -468,7 +473,7 @@
}
}
-#ifndef C_WINDOWS
+#if !defined(C_WINDOWS) && !defined(__DJGPP__)
if(getrlimit(RLIMIT_FSIZE, &rlim) == 0) {
if(rlim.rlim_max < (rlim_t) cl_engine_get_num(engine, CL_ENGINE_MAX_FILESIZE, NULL))
logg("^System limit for file size is lower than engine->maxfilesize\n");
diff -ur clamav-orig/freshclam/freshclam.c clamav-new/freshclam/freshclam.c
--- clamav-orig/freshclam/freshclam.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/freshclam/freshclam.c 2009-03-16 16:30:26.000000000 +1100
@@ -438,7 +438,7 @@
logg("#freshclam daemon %s (OS: "TARGET_OS_TYPE", ARCH: "TARGET_ARCH_TYPE", CPU: "TARGET_CPU_TYPE")\n", get_version());
-#ifdef C_WINDOWS
+#if defined(C_WINDOWS) || defined(__DJGPP__)
signal(SIGINT, daemon_sighandler);
terminate = 0;
#else
diff -ur clamav-orig/freshclam/manager.c clamav-new/freshclam/manager.c
--- clamav-orig/freshclam/manager.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/freshclam/manager.c 2009-03-16 16:30:26.000000000 +1100
@@ -1412,7 +1412,7 @@
}
while((dent = readdir(dir))) {
-#if !defined(C_INTERIX) && !defined(C_WINDOWS)
+#if !defined(C_INTERIX) && !defined(C_WINDOWS) && !defined(__DJGPP__)
if(dent->d_ino)
#endif
{
diff -ur clamav-orig/libclamav/binhex.c clamav-new/libclamav/binhex.c
--- clamav-orig/libclamav/binhex.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/binhex.c 2009-03-16 16:31:12.000000000 +1100
@@ -119,10 +119,6 @@
int
cli_binhex(const char *dir, int desc)
{
-#ifndef HAVE_MMAP
- cli_warnmsg("File not decoded - binhex decoding needs mmap() (for now)\n");
- return CL_CLEAN;
-#else
struct stat statb;
char *buf, *start, *line;
size_t size;
@@ -142,7 +138,11 @@
if(m == NULL)
return CL_EMEM;
+#ifndef HAVE_MMAP
+ start = buf = cli_copy_file_to_mem(desc, size, 0);
+#else
start = buf = mmap(NULL, size, PROT_READ, MAP_PRIVATE, desc, 0);
+#endif
if(buf == MAP_FAILED) {
messageDestroy(m);
return CL_EMAP;
@@ -187,7 +187,11 @@
buf = ++ptr;
bytesleft--;
}
+#ifndef HAVE_MMAP
+ free(start);
+#else
munmap(start, size);
+#endif
if(line)
free(line);
@@ -213,5 +217,4 @@
return CL_CLEAN; /* a lie - but it gets things going */
/* return CL_EIO; */ /* probably CL_EMEM, but we can't tell at this layer */
return CL_EMEM;
-#endif
}
diff -ur clamav-orig/libclamav/mbox.c clamav-new/libclamav/mbox.c
--- clamav-orig/libclamav/mbox.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/mbox.c 2009-03-16 16:30:26.000000000 +1100
@@ -3857,7 +3857,7 @@
int nblanks;
struct stat statb;
const char *dentry_idpart;
-#ifndef C_WINDOWS
+#if (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino == 0)
continue;
#endif
diff -ur clamav-orig/libclamav/others.c clamav-new/libclamav/others.c
--- clamav-orig/libclamav/others.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/others.c 2009-03-16 16:37:12.000000000 +1100
@@ -81,6 +81,47 @@
#define P_tmpdir "C:\\WINDOWS\\TEMP"
#endif
+#ifdef __DJGPP__
+#undef P_tmpdir
+#define P_tmpdir "/dev/env/TEMP"
+
+/* DJGPP is missing pread/pwrite */
+ssize_t pread(int fd, void *data, size_t length, off_t offset )
+{
+ ssize_t result;
+ off_t save_offset;
+ int save_errno;
+
+ save_offset = lseek(fd,offset,SEEK_SET);
+ if(save_offset==-1) return -1;
+
+ result = read(fd,data,length);
+
+ save_errno = errno;
+ lseek(fd, save_offset, SEEK_SET);
+ errno = save_errno;
+
+ return result;
+}
+
+#endif
+
+#ifndef HAVE_MMAP
+/* A partial mmap replacement for binhex and pdf scanning */
+void *cli_copy_file_to_mem( int fildes, size_t size, off_t offset )
+{
+ char *buf = malloc( size );
+
+ if( buf == NULL ) return( NULL );
+ if( pread( fildes, buf, size, offset ) == -1 ) {
+ free( buf );
+ return( NULL );
+ };
+
+ return( buf );
+}
+#endif
+
int (*cli_unrar_open)(int fd, const char *dirname, unrar_state_t *state);
int (*cli_unrar_extract_next_prepare)(unrar_state_t *state, const char *dirname);
int (*cli_unrar_extract_next)(unrar_state_t *state, const char *dirname);
@@ -99,11 +140,19 @@
}
rhandle = lt_dlopenext("libclamunrar_iface");
if (!rhandle) {
+#ifdef __DJGPP__
+ cli_unrar_open = unrar_open;
+ cli_unrar_extract_next_prepare = unrar_extract_next_prepare;
+ cli_unrar_extract_next = unrar_extract_next;
+ cli_unrar_close = unrar_close;
+ have_rar = 1;
+#else
#ifdef WARN_DLOPEN_FAIL
cli_warnmsg("Cannot dlopen: %s - unrar support unavailable\n", lt_dlerror());
#else
cli_dbgmsg("Cannot dlopen: %s - unrar support unavailable\n", lt_dlerror());
#endif
+#endif
return;
}
if (!(cli_unrar_open = (int(*)(int, const char *, unrar_state_t *))lt_dlsym(rhandle, "unrar_open")) ||
@@ -597,7 +646,7 @@
return 0;
}
-#ifdef C_WINDOWS
+#if defined(C_WINDOWS) || defined(__DJGPP__)
/*
* Windows doesn't allow you to delete a directory while it is still open
*/
@@ -702,7 +751,7 @@
#else
while((dent = readdir(dd))) {
#endif
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
diff -ur clamav-orig/libclamav/others.h clamav-new/libclamav/others.h
--- clamav-orig/libclamav/others.h 2009-03-16 11:03:10.000000000 +1100
+++ clamav-new/libclamav/others.h 2009-03-16 16:31:12.000000000 +1100
@@ -358,6 +358,11 @@
void cli_dbgmsg_internal(const char *str, ...);
#endif
+#ifndef HAVE_MMAP
+void *cli_copy_file_to_mem(int fildes, size_t size, off_t offset);
+#define MAP_FAILED NULL
+#endif
+
void *cli_malloc(size_t nmemb);
void *cli_calloc(size_t nmemb, size_t size);
void *cli_realloc(void *ptr, size_t size);
diff -ur clamav-orig/libclamav/others_common.c clamav-new/libclamav/others_common.c
--- clamav-orig/libclamav/others_common.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/others_common.c 2009-03-16 16:44:08.000000000 +1100
@@ -100,6 +100,221 @@
fputs(buff, stderr); \
va_end(args)
+#ifdef __DJGPP__
+/*
+ * DJGPP is missing strptime (needed by freshclam)
+ * This is my own implementation
+ */
+
+
+static char *__day[] = {
+ "Sunday", "Monday", "Tuesday", "Wednesday",
+ "Thursday", "Friday", "Saturday"
+};
+
+static char *__month[] = {
+ "January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"
+};
+
+static char *__ampm[] = {
+ "AM", "PM"
+};
+
+static int _strton( const char *nptr, const char * restrict *endptr, int max )
+{
+ int x = 0;
+
+ for( ;; ) {
+ if( !max ) break;
+ if( *nptr == '0' && !x ) {
+ nptr++;
+ continue;
+ }
+ if( isdigit( *nptr ) ) {
+ x = x * 10 + ( *nptr - '0' );
+ nptr++;
+ max--;
+ } else {
+ break;
+ }
+ }
+ *endptr = ( char * )nptr;
+
+ return( x );
+}
+
+char *strptime( const char * restrict buf, const char * restrict format,
+ struct tm * restrict tm )
+{
+ int w;
+ char *p;
+ int stri, len;
+
+ while( *format ) {
+ if( *format == '%' ) {
+ format++;
+ if( *format == 'E' || *format == 'O' ) format++;
+ switch( *format ) {
+ case '%':
+ buf++;
+ break;
+ case 'a':
+ case 'A': /* Day of week full or abbreviated */
+ for( w = 0; w < 7; w++ ) {
+ p = __day[ w ];
+ stri = 0;
+ len = strlen( p );
+ if( strnicmp( buf, p, len ) == 0 ) stri = len;
+ else if( strnicmp( buf, p, 3 ) == 0 ) stri = 3;
+ if( stri != 0 ) {
+ tm->tm_wday = w;
+ buf += stri;
+ break;
+ }
+ }
+ if( w == 7 ) return( NULL );
+ break;
+ case 'b':
+ case 'B':
+ case 'h':
+ for( w = 0; w < 12; w++ ) {
+ p = __month[ w ];
+ stri = 0;
+ len = strlen( p );
+ if( strnicmp( buf, p, len ) == 0 ) stri = len;
+ else if( strnicmp( buf, p, 3 ) == 0 ) stri = 3;
+ if( stri != 0 ) {
+ tm->tm_mon = w;
+ buf += stri;
+ break;
+ }
+ }
+ if( w == 12 ) return( NULL );
+ break;
+ case 'c':
+ buf = strptime( buf, "%a %b %d %R:%S %Y", tm );
+ if( buf == NULL ) return( NULL );
+ break;
+ case 'd':
+ case 'e':
+ stri = _strton( buf, &buf, 2 );
+ if( stri == 0 || stri > 31 ) return( NULL );
+ tm->tm_mday = stri;
+ break;
+ case 'D':
+ if( ( buf = strptime( buf, "%m/%d/%y", tm ) ) == NULL )
+ return( NULL );
+ break;
+ case 'H':
+ if( !isdigit( *buf ) ||
+ ( stri = _strton( buf, &buf, 2 ) ) > 23 )
+ return( NULL );
+ tm->tm_hour = stri;
+ break;
+ case 'I':
+ stri = _strton( buf, &buf, 2 );
+ if( stri < 1 || stri > 12 ) return( NULL );
+ tm->tm_hour = stri - 1;
+ break;
+ case 'j':
+ stri = _strton( buf, &buf, 3 );
+ if( stri < 1 || stri > 366 ) return( NULL );
+ tm->tm_yday = stri;
+ break;
+ case 'm':
+ stri = _strton( buf, &buf, 2 );
+ if( stri < 1 || stri > 12 ) return( NULL );
+ tm->tm_mon = stri - 1;
+ break;
+ case 'M':
+ if( !isdigit( *buf ) ||
+ ( stri = _strton( buf, &buf, 2 ) ) > 59 ) {
+ return( NULL );
+ }
+ tm->tm_min = stri;
+ break;
+ case 'n':
+ case 't':
+ if( !isspace( *buf ) ) return( NULL );
+ buf++;
+ break;
+ case 'p':
+ for( w = 0; w < 2; w++ ) {
+ if( strnicmp( buf, __ampm[ w ], 2 ) == 0 ) break;
+ }
+ if( w == 2 ) return( NULL );
+ if( w == 0 && tm->tm_hour > 11 ) tm->tm_hour -= 12;
+ if( w == 1 && tm->tm_hour < 12 ) tm->tm_hour += 12;
+ buf += 2;
+ break;
+ case 'r':
+ if( ( buf = strptime( buf, "%I:%M:%S%p", tm ) ) == NULL )
+ return( NULL );
+ break;
+ case 'R':
+ if( ( buf = strptime( buf, "%H:%M", tm ) ) == NULL )
+ return( NULL );
+ break;
+ case 'S':
+ if( !isdigit( *buf ) ||
+ ( stri = _strton( buf, &buf, 2 ) ) > 60 )
+ return( NULL );
+ tm->tm_sec = stri;
+ break;
+ case 'U':
+ if( !isdigit( *buf ) ||
+ ( stri = _strton( buf, &buf, 2 ) ) > 53 )
+ return( NULL );
+ w = stri * 7;
+ if( stri % 7 > tm->tm_wday ) w++;
+ tm->tm_yday = w;
+ break;
+ case 'w':
+ if( !isdigit( *buf ) ||
+ ( stri = _strton( buf, &buf, 2 ) ) > 6 ) return( NULL );
+ tm->tm_wday = stri;
+ break;
+ case 'W':
+ if( !isdigit( *buf ) ||
+ ( stri = _strton( buf, &buf, 2 ) ) > 53 )
+ return( NULL );
+ w = stri * 7;
+ if( stri % 7 > ( tm->tm_wday + 6 ) % 7 ) w++;
+ tm->tm_yday = w;
+ break;
+ case 'x':
+ if( ( buf = strptime( buf, "%a %b %d %Y", tm ) ) == NULL )
+ return( NULL );
+ break;
+ case 'X':
+ if( ( buf = strptime( buf, "%H:%M:%S", tm ) ) == NULL )
+ return( NULL );
+ break;
+ case 'y':
+ stri = _strton( buf, &buf, 2 );
+ if( stri > 99 ) return( NULL );
+ tm->tm_year = ( stri < 69 ) ? 100 + stri : stri;
+ break;
+ case 'Y':
+ stri = _strton( buf, &buf, 4 );
+ if( stri < 1969 || stri > 2068 ) return( NULL );
+ tm->tm_year = stri - 1900;
+ break;
+ default:
+ buf++;
+ }
+ } else {
+ if( isspace( *format ) ) while( isspace( *buf ) ) buf++;
+ else if( *buf++ != *format ) return( NULL );
+ }
+ format++;
+ }
+
+ return( ( char * )buf );
+}
+#endif
+
void cli_warnmsg(const char *str, ...)
{
MSGCODE("LibClamAV Warning: ");
@@ -753,7 +968,12 @@
int i;
if(!dir) {
- if((mdir = getenv("TMPDIR")) == NULL)
+ mdir = getenv("TMPDIR");
+#ifdef __DJGPP__
+ if( mdir == NULL ) mdir = getenv("TEMP");
+ if( mdir == NULL ) mdir = getenv("TMP");
+#endif
+ if(mdir == NULL)
#ifdef P_tmpdir
mdir = P_tmpdir;
#else
@@ -789,12 +1009,17 @@
return NULL;
}
+#ifdef __DJGPP__ /* Support systems that don't have an lfn driver/interface */
+ sprintf(name, "%s/c", mdir);
+ strncat(name, tmp, 7);
+#else
#ifdef C_WINDOWS
sprintf(name, "%s\\clamav-", mdir);
#else
sprintf(name, "%s/clamav-", mdir);
#endif
strncat(name, tmp, 32);
+#endif
free(tmp);
return(name);
diff -ur clamav-orig/libclamav/pdf.c clamav-new/libclamav/pdf.c
--- clamav-orig/libclamav/pdf.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/pdf.c 2009-03-16 16:31:12.000000000 +1100
@@ -26,7 +26,6 @@
#include "clamav-config.h"
#endif
-#ifdef HAVE_MMAP
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -105,7 +104,11 @@
if(size <= 7) /* doesn't even include the file header */
return CL_CLEAN;
+#ifndef HAVE_MMAP
+ p = buf = cli_copy_file_to_mem(desc, size, offset);
+#else
p = buf = mmap(NULL, size, PROT_READ, MAP_PRIVATE, desc, offset);
+#endif
if(buf == MAP_FAILED) {
cli_errmsg("cli_pdf: mmap() failed\n");
return CL_EMAP;
@@ -126,7 +129,11 @@
}
if(!bytesleft) {
+#ifndef HAVE_MMAP
+ free(buf);
+#else
munmap(buf, size);
+#endif
cli_dbgmsg("cli_pdf: file header not found\n");
return CL_CLEAN;
}
@@ -137,7 +144,11 @@
break;
if(q <= p) {
+#ifndef HAVE_MMAP
+ free(buf);
+#else
munmap(buf, size);
+#endif
cli_dbgmsg("cli_pdf: trailer not found\n");
return CL_CLEAN;
}
@@ -156,7 +167,11 @@
* http://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt
* http://www.adobe.com/devnet/pdf/
*/
+#ifndef HAVE_MMAP
+ free(buf);
+#else
munmap(buf, size);
+#endif
cli_dbgmsg("cli_pdf: Encrypted PDF files not yet supported\n");
return CL_CLEAN;
}
@@ -179,7 +194,11 @@
break;
if(xrefstart == p) {
+#ifndef HAVE_MMAP
+ free(buf);
+#else
munmap(buf, size);
+#endif
cli_dbgmsg("cli_pdf: xref not found\n");
return CL_CLEAN;
}
@@ -550,7 +569,11 @@
if(rc != CL_CLEAN) break;
}
+#ifndef HAVE_MMAP
+ free(buf);
+#else
munmap(buf, size);
+#endif
tableDestroy(md5table);
@@ -886,16 +909,4 @@
return NULL;
}
-#else /*!HAVE_MMAP*/
-
-#include "clamav.h"
-#include "others.h"
-#include "pdf.h"
-int
-cli_pdf(const char *dir, int desc, cli_ctx *ctx, off_t offset)
-{
- cli_dbgmsg("File not decoded - PDF decoding needs mmap() (for now)\n");
- return CL_CLEAN;
-}
-#endif
diff -ur clamav-orig/libclamav/readdb.c clamav-new/libclamav/readdb.c
--- clamav-orig/libclamav/readdb.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/readdb.c 2009-03-16 16:30:26.000000000 +1100
@@ -1605,7 +1605,7 @@
#else
while((dent = readdir(dd))) {
#endif
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
@@ -1719,7 +1719,7 @@
#else
while((dent = readdir(dd))) {
#endif
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
@@ -1802,7 +1802,7 @@
#else
while((dent = readdir(dd))) {
#endif
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
@@ -1909,6 +1909,16 @@
#ifdef CL_THREAD_SAFE
pthread_mutex_unlock(&cli_ref_mutex);
#endif
+/*
+ * I know that disabling this for DJGPP causes a GIANT memory leak if an app
+ * were to free the database and load it again, but if we let if free each
+ * tiny memory block, it literally takes at least 5-10min if not more to
+ * finish. And in DOS all of the memory will automatically be freed when
+ * the app terminates, so the leak isn't permanent. If mempool were to be
+ * available for systems without mmap, this would likely be a much better
+ * solution
+ */
+#ifndef __DJGPP__
if(engine->root) {
for(i = 0; i < CLI_MTARGETS; i++) {
if((root = engine->root[i])) {
@@ -1981,6 +1991,7 @@
cli_ftfree(engine);
cli_freeign(engine);
+#endif
#ifdef USE_MPOOL
if(engine->mempool) mpool_destroy(engine->mempool);
#endif
diff -ur clamav-orig/libclamav/scanners.c clamav-new/libclamav/scanners.c
--- clamav-orig/libclamav/scanners.c 2009-03-16 11:37:28.000000000 +1100
+++ clamav-new/libclamav/scanners.c 2009-03-16 16:30:26.000000000 +1100
@@ -128,7 +128,7 @@
#else
while((dent = readdir(dd))) {
#endif
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
@@ -885,7 +885,7 @@
#else
while((dent = readdir(dd))) {
#endif
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
diff -ur clamav-orig/shared/actions.c clamav-new/shared/actions.c
--- clamav-orig/shared/actions.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/shared/actions.c 2009-03-16 16:30:26.000000000 +1100
@@ -30,7 +30,9 @@
#include <fcntl.h>
#include <utime.h>
#include <errno.h>
+#ifndef __DJGPP__
#include <libgen.h>
+#endif
#include "shared/optparser.h"
#include "shared/output.h"
diff -ur clamav-orig/shared/misc.h clamav-new/shared/misc.h
--- clamav-orig/shared/misc.h 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/shared/misc.h 2009-03-16 17:13:22.000000000 +1100
@@ -23,6 +23,7 @@
#include <netdb.h>
#include <netinet/in.h>
#include "optparser.h"
+
/* Maximum filenames under various systems - njh */
#ifndef NAME_MAX /* e.g. Linux */
# ifdef MAXNAMELEN /* e.g. Solaris */
diff -ur clamav-orig/shared/optparser.c clamav-new/shared/optparser.c
--- clamav-orig/shared/optparser.c 2009-03-16 11:48:00.000000000 +1100
+++ clamav-new/shared/optparser.c 2009-03-16 17:21:28.000000000 +1100
@@ -56,13 +56,19 @@
#define FLAG_REQUIRED 2 /* arg is required, even if there's a default value */
#define FLAG_HIDDEN 4 /* don't print in clamconf --generate-config */
+#ifdef __DJGPP__
+#define FRESHCLAM_CONF CONFDIR"/clamav.cnf"
+#else
+#define FRESHCLAM_CONF CONFDIR"/freshclam.conf"
+#endif
+
const struct clam_option clam_options[] = {
/* name, longopt, sopt, argtype, regex, num, str, mul, owner, description, suggested */
/* cmdline only */
{ NULL, "help", 'h', TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_FRESHCLAM | OPT_CLAMSCAN | OPT_CLAMDSCAN | OPT_SIGTOOL | OPT_MILTER | OPT_CLAMCONF | OPT_CLAMDTOP, "", "" },
{ NULL, "config-file", 'c', TYPE_STRING, NULL, 0, CONFDIR"/clamd.conf", FLAG_REQUIRED, OPT_CLAMD | OPT_CLAMDSCAN | OPT_CLAMDTOP, "", "" },
- { NULL, "config-file", 0, TYPE_STRING, NULL, 0, CONFDIR"/freshclam.conf", FLAG_REQUIRED, OPT_FRESHCLAM, "", "" },
+ { NULL, "config-file", 0, TYPE_STRING, NULL, 0, FRESHCLAM_CONF, FLAG_REQUIRED, OPT_FRESHCLAM, "", "" },
{ NULL, "config-file", 'c', TYPE_STRING, NULL, 0, CONFDIR"/clamav-milter.conf", FLAG_REQUIRED, OPT_MILTER, "", "" },
{ NULL, "version", 'V', TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_FRESHCLAM | OPT_CLAMSCAN | OPT_CLAMDSCAN | OPT_SIGTOOL | OPT_MILTER | OPT_CLAMCONF | OPT_CLAMDTOP, "", "" },
{ NULL, "debug", 0, TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_FRESHCLAM | OPT_CLAMSCAN | OPT_SIGTOOL, "", "" },
diff -ur clamav-orig/sigtool/sigtool.c clamav-new/sigtool/sigtool.c
--- clamav-orig/sigtool/sigtool.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/sigtool/sigtool.c 2009-03-16 16:30:26.000000000 +1100
@@ -35,7 +35,9 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/socket.h>
+#ifndef __DJGPP__
#include <sys/un.h>
+#endif
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
@@ -987,7 +989,7 @@
}
while((dent = readdir(dd))) {
-#ifndef C_INTERIX
+#if !defined(C_INTERIX) && !defined(__DJGPP__)
if(dent->d_ino)
#endif
{
@@ -1469,7 +1471,7 @@
}
while((dent = readdir(dd))) {
-#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS))
+#if (!defined(C_INTERIX)) && (!defined(C_WINDOWS)) && (!defined(__DJGPP__))
if(dent->d_ino)
#endif
{
@@ -1617,7 +1619,7 @@
}
while((dent = readdir(dd))) {
-#ifndef C_INTERIX
+#if !defined(C_INTERIX) && !defined(__DJGPP__)
if(dent->d_ino)
#endif
{
@@ -1645,7 +1647,7 @@
}
while((dent = readdir(dd))) {
-#ifndef C_INTERIX
+#if !defined(C_INTERIX) && !defined(__DJGPP__)
if(dent->d_ino)
#endif
{
diff -ur clamav-orig/sigtool/vba.c clamav-new/sigtool/vba.c
--- clamav-orig/sigtool/vba.c 2009-03-16 11:37:26.000000000 +1100
+++ clamav-new/sigtool/vba.c 2009-03-16 16:30:26.000000000 +1100
@@ -970,7 +970,10 @@
if ((dd = opendir (dirname)) != NULL) {
while ((dent = readdir (dd))) {
- if (dent->d_ino) {
+#ifndef __DJGPP__
+ if (dent->d_ino)
+#endif
+ {
if (strcmp (dent->d_name, ".") && strcmp (dent->d_name, "..")) {
/* build the full name */
fname = (char *) cli_calloc (strlen (dirname) + strlen (dent->d_name) + 2, sizeof (char));
@@ -1130,7 +1133,10 @@
if ((dd = opendir (dirname)) != NULL) {
while ((dent = readdir (dd))) {
- if (dent->d_ino) {
+#ifndef __DJGPP__
+ if (dent->d_ino)
+#endif
+ {
if (strcmp (dent->d_name, ".") && strcmp (dent->d_name, "..")) {
/* build the full name */
fullname = calloc (strlen (dirname) + strlen (dent->d_name) + 2, sizeof (char));