Adding xbps_fetch_file_dest().

This function is similiar to xbps_fetch_file(). In contrast to xbps_fetch_file()
xbps_fetch_file_dest has an extra paramenter which allow to define an output file
for the request.
This commit is contained in:
Enno Boland 2014-03-04 14:19:52 +01:00
parent f20694a5bf
commit 59ee6b6733
2 changed files with 31 additions and 10 deletions

View File

@ -670,6 +670,20 @@ int xbps_configure_packages(struct xbps_handle *xhp, bool flush);
int xbps_fetch_file(struct xbps_handle *xhp, const char *uri,
const char *flags);
/**
* Download a file from a remote URL to current working directory.
*
* @param[in] xhp Pointer to an xbps_handle struct.
* @param[in] uri Remote URI string.
* @param[in] filename Local filename to safe the file
* @param[in] flags Flags passed to libfetch's fetchXget().
*
* @return -1 on error, 0 if not downloaded (because local/remote size/mtime
* do not match) and 1 if downloaded successfully.
**/
int xbps_fetch_file_dest(struct xbps_handle *xhp, const char *uri,
const char *filename, const char *flags);
/**
* Returns last error string reported by xbps_fetch_file().
*

View File

@ -91,7 +91,7 @@ xbps_fetch_error_string(void)
}
int
xbps_fetch_file(struct xbps_handle *xhp, const char *uri, const char *flags)
xbps_fetch_file_dest(struct xbps_handle *xhp, const char *uri, const char *filename, const char *flags)
{
struct stat st, st_tmpfile, *stp;
struct url *url = NULL;
@ -100,7 +100,7 @@ xbps_fetch_file(struct xbps_handle *xhp, const char *uri, const char *flags)
struct timespec ts[2];
off_t bytes_dload = 0;
ssize_t bytes_read = 0, bytes_written = 0;
char buf[4096], *filename, *tempfile = NULL;
char buf[4096], *tempfile = NULL;
char fetch_flags[8];
int fd = -1, rv = 0;
bool refetch = false, restart = false;
@ -117,14 +117,6 @@ xbps_fetch_file(struct xbps_handle *xhp, const char *uri, const char *flags)
memset(&fetch_flags, 0, sizeof(fetch_flags));
if (flags != NULL)
strlcpy(fetch_flags, flags, 7);
/*
* Get the filename specified in URI argument.
*/
filename = strrchr(uri, '/') + 1;
if (filename == NULL) {
rv = -1;
goto out;
}
tempfile = xbps_xasprintf("%s.part", filename);
/*
@ -298,3 +290,18 @@ out:
return rv;
}
int
xbps_fetch_file(struct xbps_handle *xhp, const char *uri, const char *flags)
{
char *filename;
/*
* Get the filename specified in URI argument.
*/
filename = strrchr(uri, '/') + 1;
if (filename == NULL) {
return -1;
}
return xbps_fetch_file_dest(xhp, uri, filename, flags);
}