diff options
author | Derrell Lipman <derrell.lipman@unwireduniverse.com> | 2008-01-16 14:41:11 +0000 |
---|---|---|
committer | Derrell Lipman <derrell.lipman@unwireduniverse.com> | 2008-01-16 14:41:11 +0000 |
commit | 9d75ea577b407ccab59196760d376831062a3ab5 (patch) | |
tree | efd1d8dfe1aed1221dac36c4d15c9178873f13d8 /examples | |
parent | 296a6783fbc03460e87ac4136a0a9e6d2743b2ff (diff) | |
download | samba-9d75ea577b407ccab59196760d376831062a3ab5.tar.gz samba-9d75ea577b407ccab59196760d376831062a3ab5.tar.xz samba-9d75ea577b407ccab59196760d376831062a3ab5.zip |
Modify testread example to loop using same context.
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
Diffstat (limited to 'examples')
-rw-r--r-- | examples/libsmbclient/testread.c | 76 |
1 files changed, 34 insertions, 42 deletions
diff --git a/examples/libsmbclient/testread.c b/examples/libsmbclient/testread.c index d59fc70ec11..3f948848957 100644 --- a/examples/libsmbclient/testread.c +++ b/examples/libsmbclient/testread.c @@ -10,66 +10,58 @@ 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; } |