コミットを比較
2 コミット
b59041ac68
...
8636981efa
作成者 | SHA1 | 日付 |
---|---|---|
守矢諏訪子 | 8636981efa | |
守矢諏訪子 | f798a99058 |
|
@ -1,2 +1,5 @@
|
|||
# 0.2.0
|
||||
* ファイル名はパラメートルを付いたら、ファイル名は拡張子に
|
||||
|
||||
# 0.1.0
|
||||
* 最初リリース
|
||||
|
|
48
main.c
48
main.c
|
@ -1,13 +1,51 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <libgen.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
const char* sofname = "odl";
|
||||
const char* version = "0.1.0";
|
||||
const char* version = "0.2.0";
|
||||
char* filename;
|
||||
|
||||
char* get_filename(const char* url) {
|
||||
char* fn_start = strrchr(url, '/');
|
||||
if (fn_start == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
fn_start++;
|
||||
|
||||
char* query = strchr(fn_start, '?');
|
||||
char* anchor = strchr(fn_start, '#');
|
||||
char* fn_end = NULL;
|
||||
|
||||
if (query != NULL && anchor != NULL) {
|
||||
fn_end = (query < anchor) ? query : anchor;
|
||||
} else if (query != NULL) {
|
||||
fn_end = query;
|
||||
} else if (anchor != NULL) {
|
||||
fn_end = anchor;
|
||||
}
|
||||
|
||||
// URLでパラメートルがなければ、そのままファイル名をコピーして
|
||||
if (fn_end == NULL) {
|
||||
fn_end = strchr(fn_start, '\0');
|
||||
}
|
||||
|
||||
size_t length = fn_end - fn_start;
|
||||
|
||||
char* extfn = malloc(length + 1);
|
||||
if (extfn == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
strncpy(extfn, fn_start, length);
|
||||
extfn[length] = '\0';
|
||||
|
||||
return extfn;
|
||||
}
|
||||
|
||||
int progress_callback(void *cp, double dt, double dn, double ut, double un) {
|
||||
(void)cp;
|
||||
(void)ut;
|
||||
|
@ -35,7 +73,7 @@ int progress_callback(void *cp, double dt, double dn, double ut, double un) {
|
|||
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("usage: %s [url ...]\n", sofname);
|
||||
printf("usage: %s-%s [url ...]\n", sofname, version);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -47,7 +85,11 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
for (int i = 1; i < argc; i++) {
|
||||
const char* url = argv[i];
|
||||
filename = basename((char*)url);
|
||||
filename = get_filename(url);
|
||||
if (filename == NULL) {
|
||||
fprintf(stderr, "URLからファイル名を抽出出来ませんでした。\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
||||
|
|
読み込み中…
新しいイシューから参照