diff -r 39f5f17c3bc3 -r 8531b63accae dav/main.c --- a/dav/main.c Tue Feb 26 12:10:16 2019 +0100 +++ b/dav/main.c Thu Mar 07 11:47:44 2019 +0100 @@ -47,6 +47,7 @@ #include "assistant.h" #include "system.h" #include "pwd.h" +#include "finfo.h" #include "main.h" static DavContext *ctx; @@ -76,6 +77,8 @@ print_usage(argv[0]); return -1; } + + putenv("LC_TIME=C"); char *cmd = argv[1]; CmdArgs *args = cmd_parse_args(argc - 2, argv + 2); @@ -1253,6 +1256,11 @@ printfile = TRUE; } + char *finfo_str = cmd_getoption(a, "finfo"); + uint32_t finfo = 0; + if(finfo_str) { + finfo = parse_finfo(finfo_str); + } int ret; for(int i=1;iargc;i++) { @@ -1260,7 +1268,7 @@ if(!import) { if(!strcmp(file, "-")) { FILE *in = stdin; - ret = put_file(repo, a, sn, path, "stdin", in, 0); + ret = put_file(repo, a, sn, path, "stdin", 0, NULL, in, 0); } else { ret = put_entry( repo, @@ -1268,6 +1276,7 @@ sn, path, file, + finfo, TRUE, printfile, ignoredirerr); @@ -1291,6 +1300,7 @@ DavSession *sn, char *path, char *file, + uint32_t finfo, DavBool root, DavBool printfile, DavBool ignoredirerr) @@ -1340,6 +1350,7 @@ sn, entry_path, entry_file, + finfo, FALSE, printfile, ignoredirerr); @@ -1370,9 +1381,6 @@ printf("put: %s\n", file); } - /* - * use stdin if the input file is - - */ FILE *in = fopen(file, "rb"); if(!in) { fprintf(stderr, "cannot open input file\n"); @@ -1380,7 +1388,7 @@ } char *filename = util_resource_name(file); //path = util_concat_path(path, filename); - ret = put_file(repo, a, sn, path, filename, in, s.st_size); + ret = put_file(repo, a, sn, path, filename, finfo, file, in, s.st_size); //free(path); fclose(in); } @@ -1469,7 +1477,17 @@ return ret == 0 ? CURL_SEEKFUNC_OK : CURL_SEEKFUNC_CANTSEEK; } -int put_file(Repository *repo, CmdArgs *a, DavSession *sn, char *path, char *name, FILE *in, off_t len) { +int put_file( + Repository *repo, + CmdArgs *a, + DavSession *sn, + char *path, + char *name, + uint32_t finfo, + const char *fpath, + FILE *in, + off_t len) +{ DavResource *res = dav_query(sn, "select - from %s", path); if(!res) { @@ -1497,11 +1515,15 @@ path = newpath; res = dav_resource_new(sn, path); + int ret = put_file(repo, a, sn, res->path, NULL, finfo, fpath, in, len); + // TODO: free res free(newpath); - int ret = put_file(repo, a, sn, res->path, NULL, in, len); - // TODO: free res return ret; } + + if(resource_set_finfo(fpath, res, finfo)) { + fprintf(stderr, "Cannot set finfo: %s.\n", strerror(errno)); + } dav_set_content(res, in, (dav_read_func)fread, (dav_seek_func)file_seek); if(len > 0 && len < 0x7d000000) {