libidav/utils.c

changeset 18
af411868ab9b
parent 2
fbdfaacc4182
child 20
db263186edf3
equal deleted inserted replaced
17:7cfd36aa005b 18:af411868ab9b
610 } else { 610 } else {
611 return url; 611 return url;
612 } 612 }
613 } 613 }
614 614
615 const char* util_resource_name_c(const char *url, char pathseparator) {
616 cxstring urlstr = cx_str(url);
617 if(urlstr.ptr[urlstr.length-1] == pathseparator) {
618 urlstr.length--;
619 }
620 cxstring resname = cx_strrchr(urlstr, pathseparator);
621 if(resname.length > 1) {
622 return resname.ptr+1;
623 } else {
624 return url;
625 }
626 }
627
628 const char* util_path_file_name(const char *url) {
629 #ifdef _WIN32
630 return util_resource_name_c(url, '\\');
631 #else
632 return util_resource_name_c(url, '/');
633 #endif
634 }
635
636
615 int util_mkdir(char *path, mode_t mode) { 637 int util_mkdir(char *path, mode_t mode) {
616 #ifdef _WIN32 638 #ifdef _WIN32
617 return mkdir(path); 639 return mkdir(path);
618 #else 640 #else
619 return mkdir(path, mode); 641 return mkdir(path, mode);
654 } else { 676 } else {
655 url = cx_strcat(2, base, path); 677 url = cx_strcat(2, base, path);
656 } 678 }
657 679
658 return url; 680 return url;
681 }
682
683 cxmutstr util_concat_path_ext(cxstring base, cxstring path, char separator) {
684 if(!path.ptr) {
685 path = CX_STR("");
686 }
687
688 int add_separator = 0;
689 if(base.length != 0 && base.ptr[base.length-1] == separator) {
690 if(path.ptr[0] == separator) {
691 base.length--;
692 }
693 } else {
694 if(path.length == 0 || path.ptr[0] != separator) {
695 add_separator = 1;
696 }
697 }
698
699 cxmutstr url;
700 if(add_separator) {
701 url = cx_strcat(3, base, cx_strn(&separator, 1), path);
702 } else {
703 url = cx_strcat(2, base, path);
704 }
705
706 return url;
707 }
708
709 cxmutstr util_concat_sys_path(cxstring base, cxstring path) {
710 #ifdef _WIN32
711 return util_concat_path_ext(base, path, '\\');
712 #else
713 return util_concat_path_ext(base, path, '/');
714 #endif
659 } 715 }
660 716
661 char* util_get_url(DavSession *sn, const char *href) { 717 char* util_get_url(DavSession *sn, const char *href) {
662 cxstring base = cx_str(sn->base_url); 718 cxstring base = cx_str(sn->base_url);
663 cxstring href_str = cx_str(href); 719 cxstring href_str = cx_str(href);
705 return url.space; 761 return url.space;
706 } 762 }
707 763
708 char* util_parent_path(const char *path) { 764 char* util_parent_path(const char *path) {
709 const char *name = util_resource_name(path); 765 const char *name = util_resource_name(path);
766 size_t namelen = strlen(name);
767 size_t pathlen = strlen(path);
768 size_t parentlen = pathlen - namelen;
769 char *parent = malloc(parentlen + 1);
770 memcpy(parent, path, parentlen);
771 parent[parentlen] = '\0';
772 return parent;
773 }
774
775 char* util_sys_parent_path(const char *path) {
776 const char *name = util_path_file_name(path);
710 size_t namelen = strlen(name); 777 size_t namelen = strlen(name);
711 size_t pathlen = strlen(path); 778 size_t pathlen = strlen(path);
712 size_t parentlen = pathlen - namelen; 779 size_t parentlen = pathlen - namelen;
713 char *parent = malloc(parentlen + 1); 780 char *parent = malloc(parentlen + 1);
714 memcpy(parent, path, parentlen); 781 memcpy(parent, path, parentlen);

mercurial