コミットを比較
2 コミット
b59041ac68
...
8636981efa
作成者 | SHA1 | 日付 |
---|---|---|
守矢諏訪子 | 8636981efa | |
守矢諏訪子 | f798a99058 |
|
@ -1,2 +1,5 @@
|
||||||
|
# 0.2.0
|
||||||
|
* ファイル名はパラメートルを付いたら、ファイル名は拡張子に
|
||||||
|
|
||||||
# 0.1.0
|
# 0.1.0
|
||||||
* 最初リリース
|
* 最初リリース
|
||||||
|
|
48
main.c
48
main.c
|
@ -1,13 +1,51 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
const char* sofname = "odl";
|
const char* sofname = "odl";
|
||||||
const char* version = "0.1.0";
|
const char* version = "0.2.0";
|
||||||
char* filename;
|
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) {
|
int progress_callback(void *cp, double dt, double dn, double ut, double un) {
|
||||||
(void)cp;
|
(void)cp;
|
||||||
(void)ut;
|
(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[]) {
|
int main(int argc, char* argv[]) {
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
printf("usage: %s [url ...]\n", sofname);
|
printf("usage: %s-%s [url ...]\n", sofname, version);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +85,11 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
const char* url = argv[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_PROGRESSFUNCTION, progress_callback);
|
||||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
||||||
|
|
読み込み中…
新しいイシューから参照