summaryrefslogtreecommitdiff
path: root/source4/torture/raw/search.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2006-09-10 07:24:41 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:18:08 -0500
commit89efea81d9d67ebed159321e8ea496eee54c2deb (patch)
tree9ffc195a05eab698b1697015410f15546e48e266 /source4/torture/raw/search.c
parentc74d5b9204c004f30494645f04d34306667990c8 (diff)
downloadsamba-89efea81d9d67ebed159321e8ea496eee54c2deb.tar.gz
samba-89efea81d9d67ebed159321e8ea496eee54c2deb.tar.bz2
samba-89efea81d9d67ebed159321e8ea496eee54c2deb.zip
r18319: fixed the directory search resume code on IRIX
The problem was twofold: 1) irix returns 64 bit numbers in telldir(). The protocol uses a 32 bit resume key. We now cope with this properly using the code in pvfs_list_seek_ofs(). 2) irix returns 0xFFFFFFFF from telldir() for the last entry in the directory. When added to DIR_OFFSET_BASE this became DIR_OFFSET_DOTDOT which meant an infinite loop! (This used to be commit 8cce9740ed0da9f08d6821beb4acaa9d28d149c2)
Diffstat (limited to 'source4/torture/raw/search.c')
-rw-r--r--source4/torture/raw/search.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/source4/torture/raw/search.c b/source4/torture/raw/search.c
index 6ee21d630a..d10bdf662b 100644
--- a/source4/torture/raw/search.c
+++ b/source4/torture/raw/search.c
@@ -203,17 +203,17 @@ static const char *extract_name(void *data, enum smb_search_level level,
/*
extract the name from a smb_data structure and level
*/
-static int extract_resume_key(void *data, enum smb_search_level level,
- enum smb_search_data_level data_level)
+static uint32_t extract_resume_key(void *data, enum smb_search_level level,
+ enum smb_search_data_level data_level)
{
int i;
for (i=0;i<ARRAY_SIZE(levels);i++) {
if (level == levels[i].level &&
data_level == levels[i].data_level) {
- return (int)*(uint32_t *)(levels[i].resume_key_offset + (char *)data);
+ return *(uint32_t *)(levels[i].resume_key_offset + (char *)data);
}
}
- return -1;
+ return 0;
}
/* find a level in the table by name */
@@ -604,7 +604,7 @@ static NTSTATUS multiple_search(struct smbcli_state *cli,
case CONT_RESUME_KEY:
io2.t2fnext.in.resume_key = extract_resume_key(&result->list[result->count-1],
io2.t2fnext.level, io2.t2fnext.data_level);
- if (io2.t2fnext.in.resume_key <= 0) {
+ if (io2.t2fnext.in.resume_key == 0) {
printf("Server does not support resume by key for level %s\n",
level_name(io2.t2fnext.level, io2.t2fnext.data_level));
return NT_STATUS_NOT_SUPPORTED;