Add (and document) fetchMakeURL()

This commit is contained in:
Dag-Erling Smørgrav 2000-05-25 16:46:09 +00:00
parent 84861c13f9
commit 9a964d6a82
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=60927
3 changed files with 51 additions and 3 deletions

View File

@ -28,6 +28,7 @@
.Dt FETCH 3
.Os
.Sh NAME
.Nm fetchMakeURL ,
.Nm fetchParseURL ,
.Nm fetchFreeURL ,
.Nm fetchGetURL ,
@ -58,6 +59,8 @@
.Fd #include <stdio.h>
.Fd #include <fetch.h>
.Ft struct url *
.Fn fetchMakeURL "char *scheme" "char *host" "int port" "char *doc" "char *user" "char *pwd"
.Ft struct url *
.Fn fetchParseURL "char *URL"
.Ft void
.Fn fetchFreeURL "struct url *URL"
@ -120,8 +123,10 @@ all URL schemes.
For instance, the file scheme only needs the <scheme>
and <document> components.
.Pp
.Fn fetchMakeURL
and
.Fn fetchParseURL
returns a pointer to a
return a pointer to a
.Fa url
structure, which is defined as follows in
.Aq Pa fetch.h :
@ -143,6 +148,8 @@ struct url {
.Ed
.Pp
The pointer returned by
.Fn fetchMakeURL
or
.Fn fetchParseURL
should be freed using
.Fn fetchFreeURL .

View File

@ -236,6 +236,48 @@ fetchListURL(char *URL, char *flags)
return ue;
}
/*
* Make a URL
*/
struct url *
fetchMakeURL(char *scheme, char *host, int port, char *doc,
char *user, char *pwd)
{
struct url *u;
if (!scheme || (!host && !doc)) {
_url_seterr(URL_MALFORMED);
return NULL;
}
if (port < 0 || port > 65535) {
_url_seterr(URL_BAD_PORT);
return NULL;
}
/* allocate struct url */
if ((u = calloc(1, sizeof *u)) == NULL) {
_fetch_syserr();
return NULL;
}
if ((u->doc = strdup(doc ? doc : "/")) == NULL) {
_fetch_syserr();
free(u);
return NULL;
}
#define seturl(x) snprintf(u->x, sizeof u->x, "%s", x)
seturl(scheme);
seturl(host);
seturl(user);
seturl(pwd);
#undef seturl
u->port = port;
return u;
}
/*
* Split an URL into components. URL syntax is:
* method:[//[user[:pwd]@]host[:port]]/[document]
@ -250,7 +292,6 @@ fetchParseURL(char *URL)
/* allocate struct url */
if ((u = calloc(1, sizeof *u)) == NULL) {
errno = ENOMEM;
_fetch_syserr();
return NULL;
}
@ -320,7 +361,6 @@ nohost:
p = "/";
if ((u->doc = strdup(p)) == NULL) {
errno = ENOMEM;
_fetch_syserr();
goto ouch;
}

View File

@ -110,6 +110,7 @@ int fetchStat(struct url *, struct url_stat *, char *);
struct url_ent *fetchList(struct url *, char *);
/* URL parsing */
struct url *fetchMakeURL(char *, char *, int, char *, char *, char *);
struct url *fetchParseURL(char *);
void fetchFreeURL(struct url *);