Here I have a patch for the clamav CVS that allows compiliation of
libclamav and clamscan on DJGPP.  Note that in addition to the patch,
the ./configure script needs to also #define lstat stat and #define
d_ino d_namlen for DJGPP.


diff -ur clamav-devel.orig/clamscan/treewalk.c clamav/clamscan/treewalk.c
--- clamav-devel.orig/clamscan/treewalk.c       2005-08-03
07:31:22.000000000 +0000
+++ clamav/clamscan/treewalk.c  2005-08-31 12:27:34.000000000 +0000
@@ -106,7 +106,11 @@

                    /* stat the file */
                    if(lstat(fname, &statbuf) != -1) {
+                        #if defined(__DJGPP__)
+                        if(S_ISDIR(statbuf.st_mode) && recursion) {
+                        #else
                        if(S_ISDIR(statbuf.st_mode) &&
(S_ISLNK(statbuf.st_mode) && recursion) {
+                        #endif
                            if(treewalk(fname, root, user, opt,
limits, options, depth) == 1)
                                scanret++;
                        } else {
@@ -161,7 +165,11 @@

                        /* stat the file */
                        if(lstat(fname, &statbuf) != -1) {
+                            #if defined(__DJGPP__)
+                            if(S_ISDIR(statbuf.st_mode)) {
+                            #else
                            if(S_ISDIR(statbuf.st_mode) &&
!S_ISLNK(statbuf.st_mode)) {
+                            #endif
                                if(rmdir(fname) == -1) { /* can't be deleted */
                                    if(errno == EACCES) {
                                        logg("^Can't remove some
temporary directories due to access problem.\n");
@@ -263,7 +271,11 @@

                    /* stat the file */
                    if(lstat(fname, &statbuf) != -1) {
+                        #if defined(__DJGPP__)
+                        if(S_ISDIR(statbuf.st_mode)) {
+                        #else
                        if(S_ISDIR(statbuf.st_mode) &&
!S_ISLNK(statbuf.st_mode)) {
+                        #endif
                            chmod(fname, 0700);
                            fixperms(fname);
                        } else if(S_ISREG(statbuf.st_mode))
@@ -311,7 +323,11 @@

                    /* stat the file */
                    if(lstat(fname, &statbuf) != -1) {
+                        #if defined(__DJGPP__)
+                        if(S_ISDIR(statbuf.st_mode)) {
+                        #else
                        if(S_ISDIR(statbuf.st_mode) &&
!S_ISLNK(statbuf.st_mode)) {
+                        #endif
                            du(fname, n);
                        } else {
                            n->space += statbuf.st_size / 1024;
diff -ur clamav-devel.orig/libclamav/mbox.c clamav/libclamav/mbox.c
--- clamav-devel.orig/libclamav/mbox.c  2005-08-12 05:00:06.000000000 +0000
+++ clamav/libclamav/mbox.c     2005-08-31 12:35:04.000000000 +0000
@@ -116,6 +116,8 @@
  */
 #if    C_SOLARIS && __GNUC__
 #undef WITH_CURL
+#elif defined(__DJGPP__)
+#undef  WITH_CURL
 #endif

 #ifdef WITH_CURL
diff -ur clamav-devel.orig/libclamav/others.c clamav/libclamav/others.c
--- clamav-devel.orig/libclamav/others.c        2005-08-03
07:31:22.000000000 +0000
+++ clamav/libclamav/others.c   2005-09-01 08:38:22.000000000 +0000
@@ -399,16 +399,30 @@
        struct stat foo;

     if(!dir) {
+#if defined(__DJGPP__)
+        if((mdir = getenv("TEMP")) == NULL)
+            if((mdir = getenv("TMP")) == NULL)
+                if((mdir = getenv("TMPDIR")) == NULL)
+#ifdef P_tmpdir
+                    mdir = P_tmpdir;
+#else
+                    mdir = "c:/tmp";
+#endif
+#else
        if((mdir = getenv("TMPDIR")) == NULL)
 #ifdef P_tmpdir
            mdir = P_tmpdir;
 #else
            mdir = "/tmp";
 #endif
+#endif
     } else
        mdir = dir;
-
+#if defined(__DJGPP__)
+    name = (char *) cli_calloc(strlen(mdir) + 1 + 6 + 1 + 3, sizeof(char));
+#else
     name = (char *) cli_calloc(strlen(mdir) + 1 + 32 + 1 + 7, sizeof(char));
+#endif
     if(!name) {
        cli_dbgmsg("cli_gentempname('%s'): out of memory\n", mdir);
        return NULL;
@@ -435,8 +449,15 @@
        return NULL;
     }

+#if defined(__DJGPP__)
+    sprintf(name, "%s/av", mdir);
+    strncat(name, tmp, 6);
+    strcat(name, ".");
+    strncat(name, tmp, 3);
+#else
     sprintf(name, "%s/clamav-", mdir);
     strncat(name, tmp, 32);
+#endif
     free(tmp);

     return(name);
@@ -538,7 +559,11 @@

                        /* stat the file */
                        if(lstat(fname, &statbuf) != -1) {
+                            #if defined(__DJGPP__)
+                            if(S_ISDIR(statbuf.st_mode)) {
+                            #else
                            if(S_ISDIR(statbuf.st_mode) &&
!S_ISLNK(statbuf.st_mode)) {
+                            #endif
                                if(rmdir(fname) == -1) { /* can't be deleted */
                                    if(errno == EACCES) {
                                        cli_errmsg("Can't remove some
temporary directories due to
access problem.\n");
diff -ur clamav-devel.orig/libclamav/scanners.c clamav/libclamav/scanners.c
--- clamav-devel.orig/libclamav/scanners.c      2005-08-29
08:02:38.000000000 +0000
+++ clamav/libclamav/scanners.c 2005-08-31 12:35:56.000000000 +0000
@@ -873,7 +873,11 @@

                    /* stat the file */
                    if(lstat(fname, &statbuf) != -1) {
+                        #if defined(__DJGPP__)
+                        if(S_ISDIR(statbuf.st_mode)) {
+                        #else
                        if(S_ISDIR(statbuf.st_mode) &&
!S_ISLNK(statbuf.st_mode)) {
+                        #endif
                            if (cli_scandir(fname, virname, scanned,
root, limits,
options, arec, mrec) == CL_VIRUS) {
                                free(fname);
                                closedir(dd);
@@ -1042,7 +1046,11 @@

                    /* stat the file */
                    if(lstat(fname, &statbuf) != -1) {
+                        #if defined(__DJGPP__)
+                        if(S_ISDIR(statbuf.st_mode))
+                        #else
                        if(S_ISDIR(statbuf.st_mode) &&
!S_ISLNK(statbuf.st_mode))
+                        #endif
                            if (cli_vba_scandir(fname, virname,
scanned, root, limits,
options, arec, mrec) == CL_VIRUS) {
                                ret = CL_VIRUS;
                                free(fname);
diff -ur clamav-devel.orig/libclamav/unrar/unrar.c
clamav/libclamav/unrar/unrar.c
--- clamav-devel.orig/libclamav/unrar/unrar.c   2005-04-19
04:32:42.000000000 +0000
+++ clamav/libclamav/unrar/unrar.c      2005-08-31 12:36:20.000000000 +0000
@@ -39,7 +39,11 @@
 #include "clamav.h"
 #include "others.h"

+#if defined(__DJGPP__)
+#define int64to32(x) ((unsigned int)(x))
+#else
 #define int64to32(x) ((uint)(x))
+#endif

 #ifdef RAR_HIGH_DEBUG
 #define rar_dbgmsg printf
diff -ur clamav-devel.orig/libclamav/unrar/unrarvm.c
clamav/libclamav/unrar/unrarvm.c
--- clamav-devel.orig/libclamav/unrar/unrarvm.c 2005-04-19
04:32:42.000000000 +0000
+++ clamav/libclamav/unrar/unrarvm.c    2005-08-31 04:36:36.000000000 +0000
@@ -314,7 +314,11 @@
 {
        int in_addr=bit_pos/8;
        int in_bit=bit_pos&7;
-       unsigned int bit_field=(uint)data[in_addr++];
+        #if defined(__DJGPP__)
+        unsigned int bit_field=(unsigned int)data[in_addr++];
+        #else
+        unsigned int bit_field=(uint)data[in_addr++];
+        #endif
        bit_field|=(unsigned int)data[in_addr++] << 8;
        bit_field|=(unsigned int)data[in_addr++] << 16;
        bit_field|=(unsigned int)data[in_addr] << 24;
Only in clamav: libclamav.pc
diff -ur clamav-devel.orig/shared/output.c clamav/shared/output.c
--- clamav-devel.orig/shared/output.c   2005-07-19 12:04:38.000000000 +0000
+++ clamav/shared/output.c      2005-09-01 09:45:52.000000000 +0000
@@ -35,12 +35,14 @@
 #include <sys/stat.h>
 #include <errno.h>
 #include <sys/time.h>
+#if !defined(__DJGPP__)
 #include <sys/socket.h>
+#endif
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif

-#if defined(USE_SYSLOG) && !defined(C_AIX)
+#if defined(USE_SYSLOG) && !defined(C_AIX) && !defined(__DJGPP__)
 #include <syslog.h>
 #endif

@@ -73,7 +75,7 @@
 short int logg_verbose = 0, logg_lock = 0, logg_time = 0;
 int logg_size = 0;
 const char *logg_file = NULL;
-#if defined(USE_SYSLOG) && !defined(C_AIX)
+#if defined(USE_SYSLOG) && !defined(C_AIX) && !defined(__DJGPP__)
 short logg_syslog;
 #endif

@@ -91,7 +93,9 @@
     va_start(args, str);
     bytes = vsnprintf(buff, 512, str, args);
     va_end(args);
+#if !defined(__DJGPP__)
     return send(desc, buff, bytes, 0);
+#endif
 }

 void logg_close(void) {
@@ -107,7 +111,7 @@
     pthread_mutex_unlock(&logg_mutex);
 #endif

-#if defined(USE_SYSLOG) && !defined(C_AIX)
+#if defined(USE_SYSLOG) && !defined(C_AIX) &&  defined(__DJGPP__)
     if(logg_syslog) {
        closelog();
     }
@@ -200,7 +204,7 @@
        }
     }

-#if defined(USE_SYSLOG) && !defined(C_AIX)
+#if defined(USE_SYSLOG) && !defined(C_AIX) && !defined(__DJGPP__)
     if(logg_syslog) {

        /* due to a problem with superfluous control characters (which
@@ -312,7 +316,7 @@
     int code;
 };

-#if defined(USE_SYSLOG) && !defined(C_AIX)
+#if defined(USE_SYSLOG) && !defined(C_AIX) && !defined(__DJGPP__)
 static const struct facstruct facilitymap[] = {
 #ifdef LOG_AUTH
     { "LOG_AUTH",      LOG_AUTH },
_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html

Reply via email to