@@ -14096,15 +14096,6 @@ Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
14096
14096
{
14097
14097
DIR *ret;
14098
14098
14099
- #if !defined(HAS_FDOPENDIR) && defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
14100
- DIR *pwd;
14101
- const Direntry_t *dirent;
14102
- char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
14103
- char *name = NULL;
14104
- STRLEN len = 0;
14105
- long pos;
14106
- #endif
14107
-
14108
14099
PERL_UNUSED_CONTEXT;
14109
14100
PERL_ARGS_ASSERT_DIRP_DUP;
14110
14101
@@ -14122,89 +14113,7 @@ Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
14122
14113
14123
14114
ret = fdopendir(dup(my_dirfd(dp)));
14124
14115
14125
- #elif defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
14126
-
14127
- PERL_UNUSED_ARG(param);
14128
-
14129
- /* create anew */
14130
-
14131
- /* open the current directory (so we can switch back) */
14132
- if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
14133
-
14134
- /* chdir to our dir handle and open the present working directory */
14135
- if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
14136
- PerlDir_close(pwd);
14137
- return (DIR *)NULL;
14138
- }
14139
- /* Now we should have two dir handles pointing to the same dir. */
14140
-
14141
- /* Be nice to the calling code and chdir back to where we were. */
14142
- /* XXX If this fails, then what? */
14143
- PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
14144
-
14145
- /* We have no need of the pwd handle any more. */
14146
- PerlDir_close(pwd);
14147
-
14148
- #ifdef DIRNAMLEN
14149
- # define d_namlen(d) (d)->d_namlen
14150
- #else
14151
- # define d_namlen(d) strlen((d)->d_name)
14152
- #endif
14153
- /* Iterate once through dp, to get the file name at the current posi-
14154
- tion. Then step back. */
14155
- pos = PerlDir_tell(dp);
14156
- if ((dirent = PerlDir_read(dp))) {
14157
- len = d_namlen(dirent);
14158
- if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
14159
- /* If the len is somehow magically longer than the
14160
- * maximum length of the directory entry, even though
14161
- * we could fit it in a buffer, we could not copy it
14162
- * from the dirent. Bail out. */
14163
- PerlDir_close(ret);
14164
- return (DIR*)NULL;
14165
- }
14166
- if (len <= sizeof smallbuf) name = smallbuf;
14167
- else Newx(name, len, char);
14168
- Move(dirent->d_name, name, len, char);
14169
- }
14170
- PerlDir_seek(dp, pos);
14171
-
14172
- /* Iterate through the new dir handle, till we find a file with the
14173
- right name. */
14174
- if (!dirent) /* just before the end */
14175
- for(;;) {
14176
- pos = PerlDir_tell(ret);
14177
- if (PerlDir_read(ret)) continue; /* not there yet */
14178
- PerlDir_seek(ret, pos); /* step back */
14179
- break;
14180
- }
14181
- else {
14182
- const long pos0 = PerlDir_tell(ret);
14183
- for(;;) {
14184
- pos = PerlDir_tell(ret);
14185
- if ((dirent = PerlDir_read(ret))) {
14186
- if (len == (STRLEN)d_namlen(dirent)
14187
- && memEQ(name, dirent->d_name, len)) {
14188
- /* found it */
14189
- PerlDir_seek(ret, pos); /* step back */
14190
- break;
14191
- }
14192
- /* else we are not there yet; keep iterating */
14193
- }
14194
- else { /* This is not meant to happen. The best we can do is
14195
- reset the iterator to the beginning. */
14196
- PerlDir_seek(ret, pos0);
14197
- break;
14198
- }
14199
- }
14200
- }
14201
- #undef d_namlen
14202
-
14203
- if (name && name != smallbuf)
14204
- Safefree(name);
14205
- #endif
14206
-
14207
- #ifdef WIN32
14116
+ #elif defined(WIN32)
14208
14117
ret = win32_dirp_dup(dp, param);
14209
14118
#endif
14210
14119
0 commit comments