Merge branch 'v3-2-test' of ssh://git.samba.org/data/git/samba into v3-2-test
authorDerrell Lipman <derrell.lipman@unwireduniverse.com>
Thu, 17 Jan 2008 14:29:52 +0000 (09:29 -0500)
committerDerrell Lipman <derrell.lipman@unwireduniverse.com>
Thu, 17 Jan 2008 14:29:52 +0000 (09:29 -0500)
examples/libsmbclient/Makefile
examples/libsmbclient/teststat3.c [new file with mode: 0644]
examples/libsmbclient/testwrite.c [new file with mode: 0644]
source/libsmb/libsmbclient.c

index 26b80575fb6c7c3e9382e5e0bdaac4f8140bd5d5..9657957c4e9c0c53efeacca1b66d92fc169b916d 100644 (file)
@@ -22,9 +22,11 @@ TESTS=       testsmbc \
        testbrowse2 \
        teststat \
        teststat2 \
+       teststat3 \
        testchmod \
        testutime \
-       testread
+       testread \
+       testwrite
 
 #      tree \
 
@@ -62,6 +64,10 @@ teststat2: teststat2.o
        @echo Linking teststat2
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
 
+teststat3: teststat3.o
+       @echo Linking teststat3
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
+
 testchmod: testchmod.o
        @echo Linking testchmod
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
@@ -74,6 +80,10 @@ testread: testread.o
        @echo Linking testread
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
 
+testwrite: testwrite.o
+       @echo Linking testwrite
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
+
 smbsh:
        make -C smbwrapper
 
diff --git a/examples/libsmbclient/teststat3.c b/examples/libsmbclient/teststat3.c
new file mode 100644 (file)
index 0000000..26348b3
--- /dev/null
@@ -0,0 +1,78 @@
+#include <libsmbclient.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <stdio.h>
+#include <time.h>
+#include "get_auth_data_fn.h"
+
+/*
+ * This test is intended to ensure that the timestamps returned by
+ * libsmbclient using smbc_stat() are the same as those returned by
+ * smbc_fstat().
+ */
+
+
+int main(int argc, char* argv[])
+{
+        int             fd;
+        struct stat     st1;
+        struct stat     st2;
+        char            mtime[32];
+        char            ctime[32];
+        char            atime[32];
+        char *          pUrl = argv[1];
+
+        if(argc != 2)
+        {
+                printf("usage: %s <file_url>\n", argv[0]);
+                return 1;
+        }
+
+        
+        smbc_init(get_auth_data_fn, 0);
+        
+        if (smbc_stat(pUrl, &st1) < 0)
+        {
+                perror("smbc_stat");
+                return 1;
+        }
+        
+        if ((fd = smbc_open(pUrl, O_RDONLY, 0)) < 0)
+        {
+                perror("smbc_open");
+                return 1;
+        }
+
+        if (smbc_fstat(fd, &st2) < 0)
+        {
+                perror("smbc_fstat");
+                return 1;
+        }
+        
+        smbc_close(fd);
+
+#define COMPARE(name, field)                                            \
+        if (st1.field != st2.field)                                     \
+        {                                                               \
+                printf("Field " name " MISMATCH: st1=%lu, st2=%lu\n",   \
+                       (unsigned long) st1.field,                       \
+                       (unsigned long) st2.field);                      \
+        }
+
+        COMPARE("st_dev", st_dev);
+        COMPARE("st_ino", st_ino);
+        COMPARE("st_mode", st_mode);
+        COMPARE("st_nlink", st_nlink);
+        COMPARE("st_uid", st_uid);
+        COMPARE("st_gid", st_gid);
+        COMPARE("st_rdev", st_rdev);
+        COMPARE("st_size", st_size);
+        COMPARE("st_blksize", st_blksize);
+        COMPARE("st_blocks", st_blocks);
+        COMPARE("st_atime", st_atime);
+        COMPARE("st_mtime", st_mtime);
+        COMPARE("st_ctime", st_ctime);
+
+        return 0;
+}
+
diff --git a/examples/libsmbclient/testwrite.c b/examples/libsmbclient/testwrite.c
new file mode 100644 (file)
index 0000000..780f0e9
--- /dev/null
@@ -0,0 +1,69 @@
+#include <sys/types.h>
+#include <stdio.h> 
+#include <unistd.h>
+#include <string.h> 
+#include <time.h> 
+#include <errno.h>
+#include <libsmbclient.h> 
+#include "get_auth_data_fn.h"
+
+
+int main(int argc, char * argv[]) 
+{ 
+    int             i;
+    int             fd;
+    int             ret;
+    int             debug = 0;
+    int             mode = 0666;
+    int             savedErrno;
+    char            buffer[2048]; 
+    char            path[2048];
+    char *          p;
+    time_t          t0;
+    time_t          t1;
+    struct stat     st; 
+    
+    smbc_init(get_auth_data_fn, debug); 
+    
+    printf("CAUTION: This program will overwrite a file.  "
+           "Press ENTER to continue.");
+    fgets(buffer, sizeof(buffer), stdin);
+           
+
+    for (;;)
+    {
+        fprintf(stdout, "\nPath: ");
+        *path = '\0';
+        fgets(path, sizeof(path) - 1, stdin);
+        if (strlen(path) == 0)
+        {
+            return 0;
+        }
+
+        p = path + strlen(path) - 1;
+        if (*p == '\n')
+        {
+            *p = '\0';
+        }
+    
+        if ((fd = smbc_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0)) < 0)
+        {
+            perror("smbc_open");
+            continue;
+        }
+
+        strcpy(buffer, "Hello world\n");
+
+        ret = smbc_write(fd, buffer, strlen(buffer));
+        savedErrno = errno;
+        smbc_close(fd);
+
+        if (ret < 0)
+        {
+            errno = savedErrno;
+            perror("write");
+        }
+    }
+
+    return 0; 
+}
index fb04d143a588836226f1ad0d0991acc3464dbc28..077970647d993dc5c67a7a899e80e0065e0858ad 100644 (file)
@@ -2263,6 +2263,9 @@ smbc_setup_stat(SMBCCTX *context,
 #endif
 #ifdef HAVE_STAT_ST_BLOCKS
        st->st_blocks = (size+511)/512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+       st->st_rdev = 0;
 #endif
        st->st_uid = getuid();
        st->st_gid = getgid();
@@ -2367,7 +2370,7 @@ smbc_stat_ctx(SMBCCTX *context,
 
        st->st_ino = ino;
 
-       smbc_setup_stat(context, st, path, size, mode);
+       smbc_setup_stat(context, st, (char *) fname, size, mode);
 
        set_atimespec(st, access_time_ts);
        set_ctimespec(st, change_time_ts);