Use unsigned IP addresses in bu*
[openafs.git] / src / butc / dump.c
index 6c37af3..5364949 100644 (file)
@@ -10,9 +10,6 @@
 #include <afsconfig.h>
 #include <afs/param.h>
 
-RCSID
-    ("$Header$");
-
 #include <sys/types.h>
 #ifdef AFS_NT40_ENV
 #include <winsock2.h>
@@ -24,6 +21,10 @@ RCSID
 #include <netdb.h>
 #endif
 #include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
 #include <rx/xdr.h>
 #include <rx/rx.h>
 #include <lwp.h>
@@ -32,18 +33,21 @@ RCSID
 #include <afs/tcdata.h>
 #include <afs/bubasics.h>
 #include <afs/budb_client.h>
+#include <afs/butm_prototypes.h>
 #include <afs/vldbint.h>
 #include <afs/ktime.h>
 #include <afs/vlserver.h>
 #include <afs/volser.h>
+#include <afs/volser_prototypes.h>
 #include <afs/volint.h>
 #include <afs/cellconfig.h>
+#include <afs/bucoord_prototypes.h>
 
+#include "butc_internal.h"
 #include "error_macros.h"
 #include "butc_xbsa.h"
 #include "afs/butx.h"
 
-
 /* GLOBAL CONFIGURATION PARAMETERS */
 extern int dump_namecheck;
 extern int queryoperator;
@@ -54,11 +58,6 @@ extern struct ubik_client *cstruct;
 dlqlinkT savedEntries;
 dlqlinkT entries_to_flush;
 
-afs_int32 flushSavedEntries(), finishDump(), finishTape(), useTape(),
-addVolume();
-
-extern struct rx_connection *UV_Bind();
-
 extern afs_int32 groupId;
 extern afs_int32 BufferSize;
 extern afs_int32 statusSize;
@@ -101,11 +100,12 @@ afs_int32 tapeblocks;             /* Number of 16K tape datablocks in buffer (!CONF_XBSA) *
    else \
      sprintf(dumpname, "%s (DumpId %u)", name, dbDumpId);
 
-#if defined(AFS_NT40_ENV) || (defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN60_ENV)) || defined(AFS_SUN4_ENV)
+#if defined(AFS_NT40_ENV) || defined(AFS_SUN4_ENV)
 int
 localtime_r(time_t * t, struct tm *tm)
 {
     memcpy(tm, localtime(t), sizeof(struct tm));
+    return 0;
 }
 #endif
 
@@ -136,6 +136,15 @@ struct dumpRock {
     struct dumpNode *node;
 };
 
+/* Forward declarations */
+
+int makeVolumeHeader(struct volumeHeader *, struct dumpRock *, int);
+int volumeHeader_hton(struct volumeHeader *, struct volumeHeader *);
+char retryPrompt(char *, afs_int32, afs_uint32);
+int getDumpTape(struct dumpRock *, int, afs_int32);
+int getXBSATape(struct dumpRock *);
+afs_int32 createDump(struct dumpRock *);
+
 /* configuration variables */
 #define HITEOT(code) ((code == BUTM_IO) || (code == BUTM_EOT) || (code == BUTM_IOCTL))
 extern int autoQuery;
@@ -150,7 +159,6 @@ afs_int32
 calcExpirationDate(afs_int32 expType, afs_int32 expDate, afs_int32 createTime)
 {
     struct ktime_date kd;
-    afs_int32 Add_RelDate_to_Time();
 
     switch (expType) {
     case BC_REL_EXPDATE:
@@ -171,11 +179,11 @@ calcExpirationDate(afs_int32 expType, afs_int32 expDate, afs_int32 createTime)
     }
 }
 
-afs_int32 curr_bserver = 0;
+afs_uint32 curr_bserver = 0;
 struct rx_connection *curr_fromconn = (struct rx_connection *)0;
 
 struct rx_connection *
-Bind(afs_int32 server)
+Bind(afs_uint32 server)
 {
     if (curr_fromconn) {
        if (curr_bserver == server)     /* Keep connection if have it */
@@ -291,7 +299,7 @@ dumpVolume(struct tc_dumpDesc * curDump, struct dumpRock * dparamsPtr)
        /* Create and Write the volume header */
        makeVolumeHeader(&hostVolumeHeader, dparamsPtr, fragmentNumber);
        hostVolumeHeader.contd = ((fragmentNumber == 1) ? 0 : TC_VOLCONTD);
-       volumeHeader_hton(&hostVolumeHeader, buffer);
+       volumeHeader_hton(&hostVolumeHeader, (struct volumeHeader *)buffer);
 
        rc = butm_WriteFileData(tapeInfoPtr, buffer, 1,
                                sizeof(hostVolumeHeader));
@@ -356,6 +364,13 @@ dumpVolume(struct tc_dumpDesc * curDump, struct dumpRock * dparamsPtr)
                }
            }
 
+#ifdef xbsa
+           /* Set aside space for the trailing volume header when using large buffers. */
+           if (XBSAMAXBUFFER < toread + sizeof(hostVolumeHeader)) {
+               toread = XBSAMAXBUFFER - sizeof(hostVolumeHeader);
+           }
+#endif
+
            /* Read some volume data. */
            if (fragmentvolume) {
                bytesread = 0;
@@ -378,7 +393,7 @@ dumpVolume(struct tc_dumpDesc * curDump, struct dumpRock * dparamsPtr)
                hostVolumeHeader.contd = (endofvolume ? 0 : TC_VOLCONTD);
                hostVolumeHeader.magic = TC_VOLENDMAGIC;
                hostVolumeHeader.endTime = (endofvolume ? time(0) : 0);
-               volumeHeader_hton(&hostVolumeHeader, &buffer[bytesread]);
+               volumeHeader_hton(&hostVolumeHeader, (struct volumeHeader *)&buffer[bytesread]);
                bytesread += sizeof(hostVolumeHeader);
            }
 
@@ -629,10 +644,10 @@ xbsaDumpVolume(struct tc_dumpDesc * curDump, struct dumpRock * dparamsPtr)
     /* Create and Write the volume header */
     makeVolumeHeader(&hostVolumeHeader, dparamsPtr, 1);
     hostVolumeHeader.contd = 0;
-    volumeHeader_hton(&hostVolumeHeader, buffer);
+    volumeHeader_hton(&hostVolumeHeader, (struct volumeHeader *)buffer);
 
-    rc = xbsa_WriteObjectData(&butxInfo, buffer, sizeof(struct volumeHeader),
-                             &bytesWritten);
+    rc = xbsa_WriteObjectData(&butxInfo, (struct volumeHeader *)buffer,
+                             sizeof(struct volumeHeader), &bytesWritten);
     if (rc != XBSA_SUCCESS) {
        ErrorLog(1, taskId, rc, 0,
                 "Unable to write VolumeHeader data to the server\n");
@@ -821,14 +836,12 @@ xbsaDumpVolume(struct tc_dumpDesc * curDump, struct dumpRock * dparamsPtr)
   abort_exit:
     dparamsPtr->curVolumeStatus = DUMP_FAILED;
     ERROR_EXIT(code);
+#else
+    return 0;
 #endif
 }
 
-#ifdef AFS_DEC_ENV
-#define HOSTADDR(sockaddr) (sockaddr)->sin_addr.S_un.S_addr
-#else
 #define HOSTADDR(sockaddr) (sockaddr)->sin_addr.s_addr
-#endif
 
 /* dumpPass
  *     Go through the list of volumes to dump, dumping each one. The action
@@ -849,7 +862,6 @@ dumpPass(struct dumpRock * dparamsPtr, int passNumber)
     int action, e;
     afs_int32 code = 0, tcode, dvcode;
     char ch;
-    char retryPrompt();
     struct vldbentry vldbEntry;
     struct sockaddr_in server;
     afs_int32 tapepos;
@@ -1117,9 +1129,10 @@ dumpPass(struct dumpRock * dparamsPtr, int passNumber)
     return (code);
 }
 
-int
-Dumper(struct dumpNode *nodePtr)
+void *
+Dumper(void *param)
 {
+    struct dumpNode *nodePtr = (struct dumpNode *)param;
     struct dumpRock dparams;
     struct butm_tapeInfo tapeInfo;
     int pass;
@@ -1142,7 +1155,6 @@ Dumper(struct dumpNode *nodePtr)
 
     extern struct deviceSyncNode *deviceLatch;
     extern struct tapeConfig globalTapeConfig;
-    extern afs_int32 createDump();
 
     taskId = nodePtr->taskID;  /* Get task Id */
     setStatus(taskId, DRIVE_WAIT);
@@ -1267,7 +1279,7 @@ Dumper(struct dumpNode *nodePtr)
     if (!CONF_XBSA) {
        code = butm_WriteEOT(&tapeInfo);
        if (code)
-           TapeLog(taskId, code, tapeInfo.error,
+           TapeLog(0, taskId, code, tapeInfo.error,
                    "Warning: Can't write end-of-dump on tape\n");
     }
 
@@ -1352,14 +1364,14 @@ Dumper(struct dumpNode *nodePtr)
        sprintf(line,
                "%-5d  %02d/%02d/%04d %02d:%02d:%02d  "
                "%02d/%02d/%04d %02d:%02d:%02d  " "%02d:%02d:%02d  "
-               "%s %d of %d volumes dumped (%ld KB)\n", taskId,
+               "%s %d of %d volumes dumped (%lu KB)\n", taskId,
                tmstart.tm_mon + 1, tmstart.tm_mday, tmstart.tm_year + 1900,
                tmstart.tm_hour, tmstart.tm_min, tmstart.tm_sec,
                tmend.tm_mon + 1, tmend.tm_mday, tmend.tm_year + 1900,
                tmend.tm_hour, tmend.tm_min, tmend.tm_sec, hrs, min, sec,
                nodePtr->volumeSetName, dumpedvolumes,
                dumpedvolumes + failedvolumes,
-               dparams.tapeInfoPtr->kBytes + 1);
+               afs_printable_uint32_lu(dparams.tapeInfoPtr->kBytes + 1));
 
        fwrite(line, strlen(line), 1, centralLogIO);
        fflush(centralLogIO);
@@ -1369,7 +1381,7 @@ Dumper(struct dumpNode *nodePtr)
 
     FreeNode(taskId);          /* free the dump node */
     LeaveDeviceQueue(deviceLatch);
-    return (code);
+    return (void *)(intptr_t)(code);
 }
 
 #define BELLTIME 60            /* 60 seconds before a bell rings */
@@ -1404,7 +1416,7 @@ retryPrompt(char *volumeName, afs_int32 volumeId, afs_uint32 taskId)
     printf("a - abort, the entire dump\n");
 
     while (1) {
-       FFlushInput(stdin);
+       FFlushInput();
        putchar(BELLCHAR);
        fflush(stdout);
 
@@ -1459,6 +1471,7 @@ printTapeLabel(struct butm_tapeLabel *tl)
     printf("   pName          = %s\n", tl->pName);
     printf("   size           = %u\n", tl->size);
     printf("   dumpPath       = %s\n", tl->dumpPath);
+    return 0;
 }
 
 /* getXBSATape
@@ -1526,7 +1539,6 @@ getDumpTape(struct dumpRock *dparamsPtr, int interactiveFlag,
     afs_int32 tapepos, lastpos;
 
     extern struct tapeConfig globalTapeConfig;
-    extern struct udbHandleS udbHandle;
 
     askForTape = interactiveFlag;
     dparamsPtr->wroteLabel = 0;
@@ -1900,6 +1912,7 @@ volumeHeader_hton(struct volumeHeader *hostPtr, struct volumeHeader *netPtr)
     volHdr.cloneDate = htonl(hostPtr->cloneDate);
 
     memcpy(netPtr, &volHdr, sizeof(struct volumeHeader));
+    return 0;
 }
 
 /* database related routines */
@@ -2028,9 +2041,11 @@ InitToServer(afs_int32 taskId, struct butx_transactionInfo * butxInfoP,
 /* DeleteDump
  *
  */
-int
-DeleteDump(struct deleteDumpIf *ptr)
+void *
+DeleteDump(void *param)
 {
+    struct deleteDumpIf *ptr = (struct deleteDumpIf *)param;
+
     afs_int32 taskId;
     afs_int32 rc, code = 0;
     afs_uint32 dumpid;
@@ -2210,6 +2225,6 @@ DeleteDump(struct deleteDumpIf *ptr)
        code = BUTX_DELETENOVOL;
        setStatus(taskId, TASK_ERROR);
     }
-    return (code);
+    return (void *)(code);
 }
 #endif