Modify testread example to loop using same context.
authorDerrell Lipman <derrell.lipman@unwireduniverse.com>
Wed, 16 Jan 2008 14:41:11 +0000 (14:41 +0000)
committerDerrell Lipman <derrell.lipman@unwireduniverse.com>
Wed, 16 Jan 2008 14:41:11 +0000 (14:41 +0000)
There's been a problem seen where open/read/close a number of times causes
open failures eventually.  This program has been modified to create the
context once and then loop requesting file names to open/read/close.

This program also demonstrates the current error in cli_read() where it
returns an error instead of length 0 upon end of file.

Derrell
(This used to be commit 9d75ea577b407ccab59196760d376831062a3ab5)

examples/libsmbclient/testread.c

index d59fc70..3f94884 100644 (file)
 
 int main(int argc, char * argv[]) 
 { 
+    int             i;
     int             fd;
     int             ret;
     int             debug = 0;
     int             mode = 0666;
     int             savedErrno;
     char            buffer[2048]; 
-    char *          pSmbPath = NULL;
+    char            path[2048];
+    char *          p;
     time_t          t0;
     time_t          t1;
     struct stat     st; 
     
-    if (argc == 1)
-    {
-        pSmbPath = "smb://RANDOM/Public/bigfile";
-    }
-    else if (argc == 2)
-    {
-        pSmbPath = argv[1];
-    }
-    else
-    {
-        printf("usage: "
-               "%s [ smb://path/to/file ]\n",
-               argv[0]);
-        return 1;
-    }
-
     smbc_init(get_auth_data_fn, debug); 
     
-    printf("Open file %s\n", pSmbPath);
-    
-    t0 = time(NULL);
-
-    if ((fd = smbc_open(pSmbPath, O_RDONLY, 0)) < 0)
+    for (;;)
     {
-        perror("smbc_open");
-        return 1;
-    }
+        fprintf(stdout, "Path: ");
+        *path = '\0';
+        fgets(path, sizeof(path) - 1, stdin);
+        if (strlen(path) == 0)
+        {
+            return 0;
+        }
 
-    printf("Beginning read loop.\n");
+        p = path + strlen(path) - 1;
+        if (*p == '\n')
+        {
+            *p = '\0';
+        }
+    
+        if ((fd = smbc_open(path, O_RDONLY, 0)) < 0)
+        {
+            perror("smbc_open");
+            continue;
+        }
 
-    do
-    {
-        ret = smbc_read(fd, buffer, sizeof(buffer));
-        savedErrno = errno;
-        if (ret > 0) fwrite(buffer, 1, ret, stdout);
-    } while (ret > 0);
+        do
+        {
+            ret = smbc_read(fd, buffer, sizeof(buffer));
+            savedErrno = errno;
+            if (ret > 0) fwrite(buffer, 1, ret, stdout);
+        } while (ret > 0);
 
-    smbc_close(fd);
+        smbc_close(fd);
 
-    if (ret < 0)
-    {
-        errno = savedErrno;
-        perror("read");
-        return 1;
+        if (ret < 0)
+        {
+            errno = savedErrno;
+            perror("read");
+        }
     }
 
-    t1 = time(NULL);
-
-    printf("Elapsed time: %d seconds\n", t1 - t0);
-
     return 0; 
 }