1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

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
(This used to be commit 9d75ea577b407ccab59196760d376831062a3ab5)
This commit is contained in:
Derrell Lipman 2008-01-16 14:41:11 +00:00
parent 735e98759c
commit 3e494442de

View File

@ -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);
for (;;)
{
fprintf(stdout, "Path: ");
*path = '\0';
fgets(path, sizeof(path) - 1, stdin);
if (strlen(path) == 0)
{
return 0;
}
p = path + strlen(path) - 1;
if (*p == '\n')
{
*p = '\0';
}
t0 = time(NULL);
if ((fd = smbc_open(path, O_RDONLY, 0)) < 0)
{
perror("smbc_open");
continue;
}
if ((fd = smbc_open(pSmbPath, O_RDONLY, 0)) < 0)
{
perror("smbc_open");
return 1;
do
{
ret = smbc_read(fd, buffer, sizeof(buffer));
savedErrno = errno;
if (ret > 0) fwrite(buffer, 1, ret, stdout);
} while (ret > 0);
smbc_close(fd);
if (ret < 0)
{
errno = savedErrno;
perror("read");
}
}
printf("Beginning read loop.\n");
do
{
ret = smbc_read(fd, buffer, sizeof(buffer));
savedErrno = errno;
if (ret > 0) fwrite(buffer, 1, ret, stdout);
} while (ret > 0);
smbc_close(fd);
if (ret < 0)
{
errno = savedErrno;
perror("read");
return 1;
}
t1 = time(NULL);
printf("Elapsed time: %d seconds\n", t1 - t0);
return 0;
}