]> git.sur5r.net Git - bacula/bacula/commitdiff
Rewrite msvcrt localtime kludge so it doesn't used undocumented functions and compile...
authorRobert Nelson <robertn@the-nelsons.org>
Fri, 14 Jul 2006 18:33:46 +0000 (18:33 +0000)
committerRobert Nelson <robertn@the-nelsons.org>
Fri, 14 Jul 2006 18:33:46 +0000 (18:33 +0000)
Fix an "ifndef" to "if defined" typo in message.c.
Add FsType support to WIN32 - example types are: ntfs, fat, fat32, cdfs.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3139 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/configure
bacula/src/dird/Makefile.in
bacula/src/findlib/fstype.c
bacula/src/lib/message.c
bacula/src/lib/util.c
bacula/src/win32/filed/vss_generic.cpp
bacula/src/win32/libwin32/winbacula.h
bacula/src/wx-console/authenticate.c

index 8f84621d7a670e4438d701bb98c6b47ff2840ca2..b7c8f95bd5f503101162e19e81a86fd8a96ed33f 100755 (executable)
@@ -16921,7 +16921,7 @@ echo "$as_me: error: Invalid MySQL directory $withval - unable to find mysql.h u
                 fi
         fi
     SQL_INCLUDE=-I$MYSQL_INCDIR
-    if test -f "$MYSQL_LIBDIR/libmysqlclient_r.a"; then
+    if test -f $MYSQL_LIBDIR/libmysqlclient_r.a; then
        SQL_LFLAGS="-L$MYSQL_LIBDIR -lmysqlclient_r -lz"
        cat >>confdefs.h <<\_ACEOF
 #define HAVE_THREAD_SAFE_MYSQL 1
index 35d75abe016271affdc913f135c24f21b6551b36..f1218a141417f1f7b9c8b2f5fd9c41f4fe183456 100644 (file)
@@ -82,7 +82,7 @@ bacula-dir:  $(SVROBJS) ../lib/libbac.a ../cats/libsql.a ../findlib/libfind.a
        $(CXX) $(WLDFLAGS) $(LDFLAGS) -L../lib -L../cats -L../findlib -o $@ $(SVROBJS) \
              -lsql -lfind -lbac -lm $(PYTHON_LIBS) $(DLIB) $(DB_LIBS) $(LIBS) \
              $(WRAPLIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS)
-        
+
 
 static-bacula-dir:  $(SVROBJS) ../lib/libbac.a ../cats/libsql.a ../findlib/libfind.a
        $(CXX) $(WLDFLAGS) $(LDFLAGS) -static -L../lib -L../cats -L../findlib -o $@ $(SVROBJS) \
index 6182c6bc96e32126e2ce8cc5bd3eb0da40697168..059ae048b41f931d64b32c1e59de821b3bf9b660 100644 (file)
@@ -44,8 +44,8 @@
    "HAVE_LINUX_OS\n" \
    "HAVE_NETBSD_OS\n" \
    "HAVE_OPENBSD_OS\n" \
-   "HAVE_SUN_OS\n"
-#define bool               int
+   "HAVE_SUN_OS\n" \
+   "HAVE_WIN32\n"
 #define false              0
 #define true               1
 #define bstrncpy           strncpy
@@ -252,6 +252,38 @@ bool fstype(const char *fname, char *fs, int fslen)
 }
 /* Tru64 */
 
+#elif defined (HAVE_WIN32)
+/* Windows */
+
+bool fstype(const char *fname, char *fs, int fslen)
+{
+   DWORD componentlength;
+   DWORD fsflags;
+   CHAR rootpath[4];
+   UINT oldmode;
+   BOOL result;
+
+   /* Copy Drive Letter, colon, and backslash to rootpath */
+   bstrncpy(rootpath, fname, sizeof(rootpath));
+
+   /* We don't want any popups if there isn't any media in the drive */
+   oldmode = SetErrorMode(SEM_FAILCRITICALERRORS);
+
+   result = GetVolumeInformation(rootpath, NULL, 0, NULL, &componentlength, &fsflags, fs, fslen);
+
+   SetErrorMode(oldmode);
+
+   if (result) {
+      /* Windows returns NTFS, FAT, etc.  Make it lowercase to be consistent with other OSes */
+      lcase(fs);
+   } else {
+      Dmsg2(10, "GetVolumeInformation() failed for \"%s\", Error = %d.\n", rootpath, GetLastError());
+   }
+
+   return result != 0;
+}
+/* Windows */
+
 #else    /* No recognised OS */
 
 bool fstype(const char *fname, char *fs, int fslen)
index 93417d3a3f21712b5fb815f168020ce1e58bbf9e..18ae8aab8be8826d86b6221e1146a6d68fc99381 100755 (executable)
@@ -159,7 +159,7 @@ init_msg(JCR *jcr, MSGS *msg)
       init_last_jobs_list();
    }
 
-#if defined(HAVE_WIN32)
+#if !defined(HAVE_WIN32)
    /*
     * Make sure we have fd's 0, 1, 2 open
     *  If we don't do this one of our sockets may open
@@ -185,7 +185,7 @@ init_msg(JCR *jcr, MSGS *msg)
    if (msg == NULL) {
       daemon_msgs = (MSGS *)malloc(sizeof(MSGS));
       memset(daemon_msgs, 0, sizeof(MSGS));
-#if defined(HAVE_WIN32)
+#if !defined(HAVE_WIN32)
       for (i=1; i<=M_MAX; i++) {
          add_msg_dest(daemon_msgs, MD_STDOUT, i, NULL, NULL);
       }
index 6fd842072ccafa1eb8f98ec1d636877cfb66d831..505851583fd4a2f094316627dd2372c211f45fdf 100644 (file)
@@ -120,42 +120,28 @@ unbash_spaces(POOL_MEM &pm)
    }
 }
 
-/* kludge below disabled for MinGW, due to link problems ... */
-#if    HAVE_WIN32 && !HAVE_CONSOLE && !HAVE_WXCONSOLE && !HAVE_MINGW
-extern long _timezone;
-extern int _daylight;
-extern long _dstbias;
-extern "C" void __tzset(void);
-extern "C" int _isindst(struct tm *);
-#endif
-
 char *encode_time(time_t time, char *buf)
 {
    struct tm tm;
    int n = 0;
 
-#if    HAVE_WIN32 && !HAVE_CONSOLE && !HAVE_WXCONSOLE && !HAVE_MINGW
-    /*
-     * Gross kludge to avoid a seg fault in Microsoft's CRT localtime_r(),
-     *  which incorrectly references a NULL returned from gmtime() if
-     *  the time (adjusted for the current timezone) is invalid.
-     *  This could happen if you have a bad date/time, or perhaps if you
-     *  moved a file from one timezone to another?
-     */
-    struct tm *gtm;
-    time_t gtime;
-    __tzset();
-    gtime = time - _timezone;
-    if (!(gtm = gmtime(&gtime))) {
-       return buf;
-    }
-    if (_daylight && _isindst(gtm)) {
-       gtime -= _dstbias;
-       if (!gmtime(&gtime)) {
-          return buf;
-       }
-    }
+#if defined(HAVE_WIN32)
+   /*
+    * Avoid a seg fault in Microsoft's CRT localtime_r(),
+    *  which incorrectly references a NULL returned from gmtime() if
+    *  time is negative before or after the timezone adjustment.
+    */
+   struct tm *gtm;
+
+   if ((gtm = gmtime(&time)) == NULL) {
+      return buf;
+   }
+
+   if (gtm->tm_year == 1970 && gtm->tm_mon == 1 && gtm->tm_mday < 3) {
+      return buf;
+   }
 #endif
+
    if (localtime_r(&time, &tm)) {
       n = sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d",
                    tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
@@ -464,10 +450,10 @@ void make_session_key(char *key, char *seed, int mode)
      (void)getcwd(s + strlen(s), 256);
      sprintf(s + strlen(s), "%lu", (unsigned long)clock());
      sprintf(s + strlen(s), "%lu", (unsigned long)time(NULL));
-#ifdef Solaris
+#if defined(Solaris)
      sysinfo(SI_HW_SERIAL,s + strlen(s), 12);
 #endif
-#ifdef HAVE_GETHOSTID
+#if defined(HAVE_GETHOSTID)
      sprintf(s + strlen(s), "%lu", (unsigned long) gethostid());
 #endif
      gethostname(s + strlen(s), 256);
index a61830ab03acf3c964ee18448fa15b99c181f324..4d60b8bec8f92d925e083e9cb58331e4722696fa 100644 (file)
@@ -23,7 +23,7 @@
 
 #ifdef WIN32_VSS
 
-#include <bacula.h>
+#include "bacula.h"
 
 #undef setlocale
 
index 0bf12438a94b1fcbffbe363f5274fcb6721702f1..088205be332f6589bafb604ba8c69d4ed7464e3c 100644 (file)
@@ -29,8 +29,6 @@
 //
 
 
-// WinUPS header file
-
 // Application specific messages
 
 // Message used for system tray notifications
index 6c26871d8d478a741c4925e67ed2480caa4ec79c..5c85ef7261006f307fc09ebbdbf04d10302a7634 100644 (file)
@@ -100,7 +100,7 @@ int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons)
    if (!cram_md5_respond(dir, password, &tls_remote_need, &compatible) ||
        !cram_md5_challenge(dir, password, tls_local_need, compatible)) {
       goto bail_out;
-   }       
+   }
 
    /* Verify that the remote host is willing to meet our TLS requirements */
    if (tls_remote_need < tls_local_need && tls_local_need != BNET_TLS_OK && tls_remote_need != BNET_TLS_OK) {