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); |