diff -r d1a43035d3a2 -r 182af08b4813 dav/main.c --- a/dav/main.c Wed Aug 14 18:01:37 2013 +0200 +++ b/dav/main.c Thu Aug 15 11:23:25 2013 +0200 @@ -74,6 +74,8 @@ return cmd_get(args); } else if(!strcmp(cmd, "put")) { return cmd_put(args); + } else if(!strcmp(cmd, "remove") || !strcmp(cmd, "rm")) { + return cmd_remove(args); } print_usage(argv[0]); @@ -135,11 +137,11 @@ *path = strdup("/"); } -void print_resource_error(DavSession *sn, DavResource *res) { - char *res_url = util_concat_path(sn->base_url, res->path); +void print_resource_error(DavSession *sn, char *path) { + char *res_url = util_concat_path(sn->base_url, path); switch(sn->error) { default: { - fprintf(stderr, "Cannot get resource %s.\n", res_url); + fprintf(stderr, "Operation failed for resource %s.\n", res_url); break; } case DAV_NOT_FOUND: { @@ -161,6 +163,7 @@ int cmd_list(CmdArgs *a) { if(a->argc == 0) { + fprintf(stderr, "Too few arguments\n"); return -1; } @@ -181,7 +184,7 @@ DavResource *ls = dav_get(sn, path, "U:crypto-key"); if(!ls) { - print_resource_error(sn, ls); + print_resource_error(sn, path); return -1; } @@ -222,23 +225,67 @@ static char* ls_size_str(DavResource *res) { char *str = malloc(16); uint64_t size = res->contentlength; - + if(res->iscollection) { - snprintf(str, 16, "%" PRIu64, size); + snprintf(str, 16, ""); } else if(size < 0x400) { - snprintf(str, 16, "%" PRIu64 " Bytes", size); + snprintf(str, 16, "%" PRIu64 " bytes", size); } else if(size < 0x100000) { - size /= 0x400; - snprintf(str, 16, "%" PRIu64 " KiB", size); + float s = (float)size/0x400; + int diff = (s*100 - (int)s*100); + if(diff > 90) { + diff = 0; + s += 0.10f; + } + if(size < 0x2800 && diff != 0) { + // size < 10 KiB + snprintf(str, 16, "%.1f KiB", s); + } else { + snprintf(str, 16, "%.0f KiB", s); + } } else if(size < 0x40000000) { - size /= 0x100000; - snprintf(str, 16, "%" PRIu64 "MiB", size); + float s = (float)size/0x100000; + int diff = (s*100 - (int)s*100); + if(diff > 90) { + diff = 0; + s += 0.10f; + } + if(size < 0xa00000 && diff != 0) { + // size < 10 MiB + snprintf(str, 16, "%.1f MiB", s); + } else { + size /= 0x100000; + snprintf(str, 16, "%.0f MiB", s); + } } else if(size < 0x1000000000ULL) { - size /= 0x40000000; - snprintf(str, 16, "%" PRIu64 "GiB", size); + float s = (float)size/0x40000000; + int diff = (s*100 - (int)s*100); + if(diff > 90) { + diff = 0; + s += 0.10f; + } + if(size < 0x280000000 && diff != 0) { + // size < 10 GiB + snprintf(str, 16, "%.1f GiB", s); + } else { + size /= 0x40000000; + snprintf(str, 16, "%.0f GiB", s); + } } else { - size /= 0x1000000000ULL; - snprintf(str, 16, "%" PRIu64, "TiB", size); + size /= 1024; + float s = (float)size/0x40000000; + int diff = (s*100 - (int)s*100); + if(diff > 90) { + diff = 0; + s += 0.10f; + } + if(size < 0x280000000 && diff != 0) { + // size < 10 TiB + snprintf(str, 16, "%.1f TiB", s); + } else { + size /= 0x40000000; + snprintf(str, 16, "%.0f TiB", s); + } } return str; } @@ -289,6 +336,7 @@ int cmd_get(CmdArgs *a) { if(a->argc == 0) { + fprintf(stderr, "Too few arguments\n"); return -1; } @@ -307,7 +355,7 @@ DavResource *res = dav_get(sn, path, "U:crypto-key"); if(!res) { - print_resource_error(sn, res); + print_resource_error(sn, path); return -1; } @@ -380,6 +428,7 @@ int cmd_put(CmdArgs *a) { if(a->argc < 2) { + fprintf(stderr, "Too few arguments\n"); return -1; } @@ -436,7 +485,7 @@ } if(dav_store(res)) { - print_resource_error(sn, res); + print_resource_error(sn, res->path); fprintf(stderr, "Cannot upload file.\n"); fclose(in); return -1; @@ -447,3 +496,37 @@ fclose(in); return 0; } + +int cmd_remove(CmdArgs *a) { + if(a->argc < 1) { + fprintf(stderr, "Too few arguments\n"); + return -1; + } + + DavSession *sn = NULL; + char *url = a->argv[0]; + char *root = NULL; + char *path = NULL; + url_get_parts(url, &root, &path); + + Repository *repo = get_repository(root); + if(repo) { + sn = dav_session_new_auth(ctx, repo->url, repo->user, repo->password); + } else { + sn = dav_session_new(ctx, root); + } + + DavResource *res = dav_resource_new(sn, path); + if(!res) { + fprintf(stderr, "error\n"); + return -1; + } + + if(dav_delete(res)) { + print_resource_error(sn, res->path); + fprintf(stderr, "Cannot delete resource.\n"); + return -1; + } + + return 0; +}