diff options
Diffstat (limited to 'src/pacman')
-rw-r--r-- | src/pacman/download.c | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/src/pacman/download.c b/src/pacman/download.c index efd40fbf..cd5888fe 100644 --- a/src/pacman/download.c +++ b/src/pacman/download.c @@ -495,13 +495,8 @@ char *fetch_pkgurl(char *target) { char spath[PATH_MAX]; char url[PATH_MAX]; - server_t *server; - list_t *servers = NULL; - list_t *files = NULL; char *host, *path, *fn; - - /* ORE - do not download the file if it exists in the current dir */ + struct stat buf; strncpy(url, target, PATH_MAX); host = strstr(url, "://"); @@ -524,25 +519,35 @@ char *fetch_pkgurl(char *target) strcpy(spath, "/"); } - server = (server_t *)malloc(sizeof(server_t)); - if(server == NULL) { - fprintf(stderr, "error: failed to allocate %d bytes\n", sizeof(server_t)); - return(NULL); - } - server->protocol = url; - server->server = host; - server->path = spath; - servers = list_add(servers, server); - - files = list_add(files, fn); - if(downloadfiles(servers, ".", files)) { - fprintf(stderr, "error: failed to download %s\n", target); - return(NULL); - } + /* do not download the file if it exists in the current dir + */ + if(stat(fn, &buf) == 0) { + vprint(" %s is already in the current directory\n", fn); + } else { + server_t *server; + list_t *servers = NULL; + list_t *files = NULL; + + server = (server_t *)malloc(sizeof(server_t)); + if(server == NULL) { + fprintf(stderr, "error: failed to allocate %d bytes\n", sizeof(server_t)); + return(NULL); + } + server->protocol = url; + server->server = host; + server->path = spath; + servers = list_add(servers, server); + + files = list_add(files, fn); + if(downloadfiles(servers, ".", files)) { + fprintf(stderr, "error: failed to download %s\n", target); + return(NULL); + } + files->data = NULL; + FREELIST(files); - FREELIST(servers); - files->data = NULL; - FREELIST(files); + FREELIST(servers); + } /* return the target with the raw filename, no URL */ return(strndup(fn, PATH_MAX)); |