Enclose usage of st_blksize and st_blocks struct stat members in
authorTim Potter <tpot@samba.org>
Tue, 14 Oct 2003 03:56:42 +0000 (03:56 +0000)
committerTim Potter <tpot@samba.org>
Tue, 14 Oct 2003 03:56:42 +0000 (03:56 +0000)
#ifdef HAVE_STAT_ST_BLKSIZE and #ifdef HAVE_STAT_ST_BLOCKS,
respectively.

Fixes bug 550 reported by Joachim Schmitz <schmitz@hp.com>.
(This used to be commit 18adfdbe0c6ed79ba8ac07956b1e7abc226556c3)

source3/libsmb/libsmbclient.c
source3/smbd/dosmode.c
source3/smbwrapper/smbw.c
source3/torture/cmd_vfs.c

index 69c4d8f7a77cd1ab5f075e48e06763fbb7369d67..4eb7f49760fdc4c2be9d603232bd428842c7dde1 100644 (file)
@@ -1139,8 +1139,12 @@ int smbc_setup_stat(SMBCCTX *context, struct stat *st, char *fname, size_t size,
        if (!IS_DOS_READONLY(mode)) st->st_mode |= S_IWUSR;
 
        st->st_size = size;
+#ifdef HAVE_STAT_ST_BLKSIZE
        st->st_blksize = 512;
+#endif
+#ifdef HAVE_STAT_ST_BLOCKS
        st->st_blocks = (size+511)/512;
+#endif
        st->st_uid = getuid();
        st->st_gid = getgid();
 
index aaee41b546a965d75e15b25bda8d0d534f5d3458..f88964123e1cf4b1b0c3f94a14b69f28aac76e8d 100644 (file)
@@ -136,9 +136,11 @@ uint32 dos_mode(connection_struct *conn,char *path,SMB_STRUCT_STAT *sbuf)
        if (S_ISDIR(sbuf->st_mode))
                result = aDIR | (result & aRONLY);
 
+#if defined (HAVE_STAT_ST_BLOCKS) && defined (HAVE_STAT_ST_BLKSIZE)
        if (sbuf->st_size > sbuf->st_blocks * (SMB_OFF_T)sbuf->st_blksize) {
                result |= FILE_ATTRIBUTE_SPARSE;
        }
+#endif
  
 #ifdef S_ISLNK
 #if LINKS_READ_ONLY
index 7eb01c7da337267543be2f7a1da7550fb9787ae5..0ddacdf8ba5eb940d3f498c7d8cd25fc576a7161 100644 (file)
@@ -1480,8 +1480,12 @@ say no to acls
        st64->st_atime = st->st_atime;
        st64->st_mtime = st->st_mtime;
        st64->st_ctime = st->st_ctime;
+#ifdef HAVE_STAT_ST_BLKSIZE
        st64->st_blksize = st->st_blksize;
+#endif
+#ifdef HAVE_STAT_ST_BLOCKS
        st64->st_blocks = st->st_blocks;
+#endif
 }
 #endif
 
@@ -1545,8 +1549,12 @@ struct kernel_stat {
        st->st_gid = kbuf->st_gid;
        st->st_rdev = kbuf->st_rdev;
        st->st_size = kbuf->st_size;
+#ifdef HAVE_STAT_ST_BLKSIZE
        st->st_blksize = kbuf->st_blksize;
+#endif
+#ifdef HAVE_STAT_ST_BLOCKS
        st->st_blocks = kbuf->st_blocks;
+#endif
        st->st_atime = kbuf->st_atime_;
        st->st_mtime = kbuf->st_mtime_;
        st->st_ctime = kbuf->st_ctime_;
index 8317a57a20dbecb7df42cc502537e225d32c10d0..bfce4b88b41c9d405c950d91231b53f058bb1846 100644 (file)
@@ -522,8 +522,12 @@ static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c
        else if (S_ISLNK(st.st_mode)) printf("  Symbolic Link\n");
        else if (S_ISSOCK(st.st_mode)) printf("  Socket\n");
        printf("  Size: %10u", (unsigned int)st.st_size);
+#ifdef HAVE_STAT_ST_BLOCKS
        printf(" Blocks: %9u", (unsigned int)st.st_blocks);
+#endif
+#ifdef HAVE_STAT_ST_BLKSIZE
        printf(" IO Block: %u\n", (unsigned int)st.st_blksize);
+#endif
        printf("  Device: 0x%10x", (unsigned int)st.st_dev);
        printf(" Inode: %10u", (unsigned int)st.st_ino);
        printf(" Links: %10u\n", (unsigned int)st.st_nlink);
@@ -586,8 +590,12 @@ static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc,
        else if (S_ISLNK(st.st_mode)) printf("  Symbolic Link\n");
        else if (S_ISSOCK(st.st_mode)) printf("  Socket\n");
        printf("  Size: %10u", (unsigned int)st.st_size);
+#ifdef HAVE_STAT_ST_BLOCKS
        printf(" Blocks: %9u", (unsigned int)st.st_blocks);
+#endif
+#ifdef HAVE_STAT_ST_BLKSIZE
        printf(" IO Block: %u\n", (unsigned int)st.st_blksize);
+#endif
        printf("  Device: 0x%10x", (unsigned int)st.st_dev);
        printf(" Inode: %10u", (unsigned int)st.st_ino);
        printf(" Links: %10u\n", (unsigned int)st.st_nlink);
@@ -638,8 +646,12 @@ static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc,
        else if (S_ISLNK(st.st_mode)) printf("  Symbolic Link\n");
        else if (S_ISSOCK(st.st_mode)) printf("  Socket\n");
        printf("  Size: %10u", (unsigned int)st.st_size);
+#ifdef HAVE_STAT_ST_BLOCKS
        printf(" Blocks: %9u", (unsigned int)st.st_blocks);
+#endif
+#ifdef HAVE_STAT_ST_BLKSIZE
        printf(" IO Block: %u\n", (unsigned int)st.st_blksize);
+#endif
        printf("  Device: 0x%10x", (unsigned int)st.st_dev);
        printf(" Inode: %10u", (unsigned int)st.st_ino);
        printf(" Links: %10u\n", (unsigned int)st.st_nlink);