pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pkg/43013: Clarification of URL handling for pkg_add/pkgin
The following reply was made to PR pkg/43013; it has been noted by GNATS.
From: brook%biology.nmsu.edu@localhost (Brook Milligan)
To: gnats-bugs%NetBSD.org@localhost
Cc: joerg%NetBSD.org@localhost, gnats-admin%netbsd.org@localhost,
pkgsrc-bugs%netbsd.org@localhost,
brook%nmsu.edu@localhost
Subject: Re: pkg/43013: Clarification of URL handling for pkg_add/pkgin
Date: Fri, 19 Mar 2010 22:14:30 -0600
Joerg,
I applied your patch, but the same problem remains. As a result, I've
been looking over the code some more and have a few points to note.
I think I have narrowed down the problem that I am seeing. Here is
one section of the calling sequence as indicated by some printf()
statements I added (note that the URL I gave to pkg_add was
ftp://localhost/All/emacs and that the file All/emacs-23.1nb2.tgz
exists in the ftp login directory):
fetchList(): pattern=emacs*, flags=c
fetchListFTP(): NLST
ftp_request(): op=NLST, op_arg=emacs*, flags=c
ftp_request(): path=/All
ftp_cwd(): path=/All, subdir=1
ftp_cwd(): path=All
ftp_cwd(): conn->ftp_home=(null)
ftp_cwd(): strchr(path, '/')=(null)
I think the key point here is the subdir argument to ftp_cwd, which is
initialized by the expression 'op_arg != NULL' in ftp_request().
Since I am requesting /All/emacs* that value seems correct to indicate
that the path requested for cwd (i.e., /All) is a subdirectory not a
file. However, here is the code that is executed within ftp_cwd
immediately after the printf() above:
/* Simple case: still in the home directory and no directory change. */
if (conn->ftp_home == NULL && strchr(path, '/') == NULL)
return 0;
Clearly, this condition holds and ftp_cwd immediately exits.
My analysis of this suggests, however, that only if subdir=0 should
this exit immediately. When there is not a '/' in the path, there are
two cases: (i) the path points to a file (i.e., subdir=0) or (ii) the
path points to the directory in which the file resides (i.e.,
subdir=1). In the example I have above, the second case holds and one
CWD command, not zero, should be emitted.
If all this logic is correct, I would expect something like the
following instead:
--- ftp.c
+++ ftp.c.orig
@@ -304,7 +304,7 @@
++path;
/* Simple case: still in the home directory and no directory change. */
- if (conn->ftp_home == NULL && strchr(path, '/') == NULL)
+ if (conn->ftp_home == NULL && strchr(path, '/') == NULL && !subdir)
return 0;
if ((e = ftp_cmd(conn, "PWD\r\n")) != FTP_WORKING_DIRECTORY ||
Indeed, that change makes this example complete correctly.
Since you are much more familiar with all of this code than I, please
verify that my logic is correct and that there are not other
implications of the change I suggest.
Thanks alot for taking a look at this.
Cheers,
Brook
Home |
Main Index |
Thread Index |
Old Index