The Samba-Bugzilla – Attachment 1330 Details for
Bug 2889
dir command in OS/2 dos box shows ".." entry infinitely
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
look (text/plain), 4.19 KB, created by
Jeremy Allison
on 2005-07-21 13:18:09 UTC
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2005-07-21 13:18:09 UTC
Size:
4.19 KB
patch
obsolete
>Index: smbd/dir.c >=================================================================== >--- smbd/dir.c (revision 8687) >+++ smbd/dir.c (working copy) >@@ -26,6 +26,11 @@ > > extern struct current_user current_user; > >+/* "Special" directory offsets. */ >+#define END_OF_DIRECTORY_OFFSET ((long)-1) >+#define START_OF_DIRECTORY_OFFSET ((long)0) >+#define DOT_DOT_DIRECTORY_OFFSET ((long)0x80000000) >+ > /* Make directory handle internals available. */ > > #define NAME_CACHE_SIZE 100 >@@ -560,7 +565,7 @@ > > /* If poffset is -1 then we know we returned this name before and we have > no wildcards. We're at the end of the directory. */ >- if (*poffset == -1) { >+ if (*poffset == END_OF_DIRECTORY_OFFSET) { > return NULL; > } > >@@ -577,7 +582,7 @@ > if (VALID_STAT(*pst)) { > /* We need to set the underlying dir_hdn offset to -1 also as > this function is usually called with the output from TellDir. */ >- dptr->dir_hnd->offset = *poffset = -1; >+ dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET; > return dptr->wcard; > } > >@@ -588,7 +593,7 @@ > if (SMB_VFS_STAT(dptr->conn,pathreal,pst) == 0) { > /* We need to set the underlying dir_hdn offset to -1 also as > this function is usually called with the output from TellDir. */ >- dptr->dir_hnd->offset = *poffset = -1; >+ dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET; > return dptr->wcard; > } else { > /* If we get any other error than ENOENT or ENOTDIR >@@ -596,7 +601,7 @@ > if (errno != ENOENT && errno != ENOTDIR) { > /* We need to set the underlying dir_hdn offset to -1 also as > this function is usually called with the output from TellDir. */ >- dptr->dir_hnd->offset = *poffset = -1; >+ dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET; > return dptr->wcard; > } > } >@@ -607,7 +612,7 @@ > if (dptr->conn->case_sensitive) { > /* We need to set the underlying dir_hdn offset to -1 also as > this function is usually called with the output from TellDir. */ >- dptr->dir_hnd->offset = *poffset = -1; >+ dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET; > return NULL; > } else { > dptr->has_wild = True; >@@ -623,9 +628,9 @@ > { > SET_STAT_INVALID(*pst); > >- if (!dptr->has_wild && (dptr->dir_hnd->offset == -1)) { >+ if (!dptr->has_wild && (dptr->dir_hnd->offset == END_OF_DIRECTORY_OFFSET)) { > /* This is a singleton directory and we're already at the end. */ >- *poffset = -1; >+ *poffset = END_OF_DIRECTORY_OFFSET; > return False; > } > >@@ -676,7 +681,7 @@ > *num = key; > offset = IVAL(buf,1); > if (offset == (uint32)-1) { >- seekoff = -1; >+ seekoff = END_OF_DIRECTORY_OFFSET; > } else { > seekoff = (long)offset; > } >@@ -1083,10 +1088,12 @@ > connection_struct *conn = dirp->conn; > > /* Cheat to allow . and .. to be the first entries returned. */ >- if ((*poffset == 0) && (dirp->file_number < 2)) { >+ if (((*poffset == START_OF_DIRECTORY_OFFSET) || (*poffset == DOT_DOT_DIRECTORY_OFFSET)) && (dirp->file_number < 2)) { > if (dirp->file_number == 0) { > n = "."; >+ *poffset = dirp->offset = START_OF_DIRECTORY_OFFSET; > } else { >+ *poffset = dirp->offset = DOT_DOT_DIRECTORY_OFFSET; > n = ".."; > } > dirp->file_number++; >@@ -1113,7 +1120,7 @@ > dirp->file_number++; > return e->name; > } >- dirp->offset = -1; >+ dirp->offset = END_OF_DIRECTORY_OFFSET; > return NULL; > } > >@@ -1125,8 +1132,8 @@ > { > SMB_VFS_REWINDDIR(dirp->conn, dirp->dir); > dirp->file_number = 0; >- dirp->offset = 0; >- *poffset = 0; >+ dirp->offset = START_OF_DIRECTORY_OFFSET; >+ *poffset = START_OF_DIRECTORY_OFFSET; > } > > /******************************************************************* >@@ -1136,7 +1143,7 @@ > void SeekDir(struct smb_Dir *dirp, long offset) > { > if (offset != dirp->offset) { >- if (offset == 0) { >+ if (offset == START_OF_DIRECTORY_OFFSET || offset == DOT_DOT_DIRECTORY_OFFSET) { > RewindDir(dirp, &offset); > } else { > SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset); >@@ -1186,7 +1193,7 @@ > /* Not found in the name cache. Rewind directory and start from scratch. */ > SMB_VFS_REWINDDIR(conn, dirp->dir); > dirp->file_number = 0; >- *poffset = 0; >+ *poffset = START_OF_DIRECTORY_OFFSET; > while ((entry = ReadDirName(dirp, poffset))) { > if (conn->case_sensitive ? (strcmp(entry, name) == 0) : strequal(entry, name)) { > return True;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 2889
:
1317
|
1318
|
1319
|
1320
|
1321
|
1325
| 1330