733 } |
733 } |
734 |
734 |
735 int ret; |
735 int ret; |
736 if(!strcmp(file, "-")) { |
736 if(!strcmp(file, "-")) { |
737 FILE *in = stdin; |
737 FILE *in = stdin; |
738 ret = put_file(repo, a, sn, path, "stdin", in); |
738 ret = put_file(repo, a, sn, path, "stdin", in, 0); |
739 } else { |
739 } else { |
740 ret = put_entry(repo, a, sn, path, file); |
740 ret = put_entry(repo, a, sn, path, file); |
741 } |
741 } |
742 |
742 |
743 free(path); |
743 free(path); |
790 fprintf(stderr, "cannot open input file\n"); |
790 fprintf(stderr, "cannot open input file\n"); |
791 return -1; |
791 return -1; |
792 } |
792 } |
793 char *filename = util_resource_name(file); |
793 char *filename = util_resource_name(file); |
794 //path = util_concat_path(path, filename); |
794 //path = util_concat_path(path, filename); |
795 ret = put_file(repo, a, sn, path, filename, in); |
795 ret = put_file(repo, a, sn, path, filename, in, s.st_size); |
796 //free(path); |
796 //free(path); |
797 fclose(in); |
797 fclose(in); |
798 } |
798 } |
799 |
799 |
800 return ret; |
800 return ret; |
801 } |
801 } |
802 |
802 |
803 int put_file(Repository *repo, CmdArgs *a, DavSession *sn, char *path, char *name, FILE *in) { |
803 int put_file(Repository *repo, CmdArgs *a, DavSession *sn, char *path, char *name, FILE *in, off_t len) { |
804 DavResource *res = dav_query(sn, "select - from %s", path); |
804 DavResource *res = dav_query(sn, "select - from %s", path); |
805 if(!res) { |
805 if(!res) { |
806 if(sn->error == DAV_NOT_FOUND) { |
806 if(sn->error == DAV_NOT_FOUND) { |
807 res = dav_resource_new(sn, path); |
807 res = dav_resource_new(sn, path); |
808 if(dav_create(res)) { |
808 if(dav_create(res)) { |
821 // TODO: free res |
821 // TODO: free res |
822 char *newpath = util_concat_path(path, name); |
822 char *newpath = util_concat_path(path, name); |
823 path = newpath; |
823 path = newpath; |
824 res = dav_resource_new(sn, path); |
824 res = dav_resource_new(sn, path); |
825 free(newpath); |
825 free(newpath); |
826 int ret = put_file(repo, a, sn, res->path, NULL, in); |
826 int ret = put_file(repo, a, sn, res->path, NULL, in, len); |
827 // TODO: free res |
827 // TODO: free res |
828 return ret; |
828 return ret; |
829 } |
829 } |
830 |
830 |
831 dav_set_content(res, in, (dav_read_func)fread); |
831 dav_set_content(res, in, (dav_read_func)fread); |
|
832 if(len > 0) { |
|
833 //dav_set_content_length(res, (size_t)len); |
|
834 } |
832 |
835 |
833 if(dav_store(res)) { |
836 if(dav_store(res)) { |
834 print_resource_error(sn, res->path); |
837 print_resource_error(sn, res->path); |
835 fprintf(stderr, "Cannot upload file.\n"); |
838 fprintf(stderr, "Cannot upload file.\n"); |
836 if(sn->errorstr) { |
839 if(sn->errorstr) { |