dav/main.c

changeset 517
8531b63accae
parent 512
3320a015a3bc
child 520
da2b0cc44e4f
--- 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;i<a->argc;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) {

mercurial