[SCM] Samba Shared Repository - branch v3-5-test updated

Karolin Seeger kseeger at samba.org
Wed Jan 4 13:21:19 MST 2012


The branch, v3-5-test has been updated
       via  b217fc3 s3-cli: fix bug 563, >8GB tar on BE machines
      from  76137cb s3-winbind: Move finding the domain to it's own function.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit b217fc3ac18c04011861217eb5e0b596554ab88a
Author: Masafumi Nakayama <MASA23 at jp.ibm.com>
Date:   Tue Jan 3 17:24:58 2012 -0800

    s3-cli: fix bug 563, >8GB tar on BE machines
    
    Borrows on existing patches proposed by Craig Barratt and Brad Ellis.
    
    Signed-off-by: David Disseldorp <ddiss at suse.de>
    
    Back-ported to 3.5.x by Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/client/clitar.c |   22 +++++++++++++++++-----
 1 files changed, 17 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/client/clitar.c b/source3/client/clitar.c
index fc98fa8..8440a46 100644
--- a/source3/client/clitar.c
+++ b/source3/client/clitar.c
@@ -204,8 +204,10 @@ static void writetarheader(int f, const char *aname, uint64_t size, time_t mtime
 
 		memset(hb.dbuf.size, 0, 4);
 		hb.dbuf.size[0]=128;
-		for (i = 8, jp=(char*)&size; i; i--)
-			hb.dbuf.size[i+3] = *(jp++);
+		for (i = 8; i; i--) {
+			hb.dbuf.size[i+3] = size & 0xff;
+			size >>= 8;
+		}
 	}
 	oct_it((uint64_t) mtime, 13, hb.dbuf.mtime);
 	memcpy(hb.dbuf.chksum, "        ", sizeof(hb.dbuf.chksum));
@@ -307,7 +309,17 @@ of link other than a GNUtar Longlink - ignoring\n"));
 	finfo->mtime_ts = finfo->ctime_ts =
 		convert_time_t_to_timespec((time_t)strtol(hb->dbuf.mtime, NULL, 8));
 	finfo->atime_ts = convert_time_t_to_timespec(time(NULL));
-	finfo->size = unoct(hb->dbuf.size, sizeof(hb->dbuf.size));
+	if ((hb->dbuf.size[0] & 0xff) == 0x80) {
+		/* This is a non-POSIX compatible extention to extract files
+			greater than 8GB. */
+		finfo->size = 0;
+		for (i = 0; i < 8; i++) {
+			finfo->size <<= 8;
+			finfo->size |= hb->dbuf.size[i+4] & 0xff;
+		}
+	} else {
+		finfo->size = unoct(hb->dbuf.size, sizeof(hb->dbuf.size));
+	}
 
 	return True;
 }
@@ -999,8 +1011,8 @@ static int skip_file(int skipsize)
 static int get_file(file_info2 finfo)
 {
 	uint16_t fnum;
-	int pos = 0, dsize = 0, bpos = 0;
-	uint64_t rsize = 0;
+	int dsize = 0, bpos = 0;
+	uint64_t rsize = 0, pos = 0;
 
 	DEBUG(5, ("get_file: file: %s, size %.0f\n", finfo.name, (double)finfo.size));
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list