]> andersk Git - moira.git/blobdiff - afssync/ubik.c
Changes from dtanner.
[moira.git] / afssync / ubik.c
index 149a9bbe3308fbf0ea4c32bb8a718653cf90162f..6c5622d515727d4f2147f5b13d5a9aac0c5e29fe 100644 (file)
@@ -1,14 +1,17 @@
-/* $Header$ */
+/* $Id$ */
 
 #include <sys/types.h>
+#include <netinet/in.h>
+
 #include <lock.h>
 #define UBIK_INTERNALS
+#include <stds.h>
 #include <ubik.h>
 #include <rx/xdr.h>
 #include "print.h"
 #include "prserver.h"
 
-
+extern int dbase_fd;
 struct ubik_dbase *dbase;
 
 int ubik_ServerInit()
@@ -18,6 +21,19 @@ int ubik_ServerInit()
 
 int ubik_BeginTrans()
 {
+    static int init=0;
+    struct ubik_hdr thdr;
+
+    if (!init) {
+       thdr.version.epoch = htonl(0);
+       thdr.version.counter = htonl(0);
+       thdr.magic = htonl(UBIK_MAGIC);
+       thdr.size = htonl(HDRSIZE);
+       lseek(dbase_fd, 0, 0);
+       write(dbase_fd, &thdr, sizeof(thdr));
+       fsync(dbase_fd);
+       init = 1;
+    }
     return(0);
 }
 
@@ -74,13 +90,11 @@ int ubik_GetVersion(dummy, ver)
 int dummy;
 struct ubik_version *ver;
 {
-    bzero(ver, sizeof(struct ubik_version));
+    memset(ver, 0, sizeof(struct ubik_version));
     return(0);
 }
 
 
-extern int dbase_fd;
-
 int ubik_Seek(tt, afd, pos)
 struct ubik_trans *tt;
 long afd;
@@ -121,7 +135,7 @@ long len;
        return(1);
     }
     if (status < len)
-      bzero(&buf[status], len - status);
+      memset(&buf[status], 0, len - status);
     return(0);
 }
 
This page took 0.05752 seconds and 4 git commands to generate.