| 741 | } |
| 742 | |
| 743 | char *mkdir_local(const char *localroot, const char *pathname) |
| 744 | { |
| 745 | #ifdef DISABLED_FOR_FRAMAC |
| 746 | return NULL; |
| 747 | #else |
| 748 | const int l1=(localroot==NULL?0:strlen(localroot)); |
| 749 | const int l2=strlen(pathname); |
| 750 | char *localdir=(char *)MALLOC(l1+l2+1); |
| 751 | const char *src; |
| 752 | char *dst; |
| 753 | if(localroot!=NULL) |
| 754 | memcpy(localdir, localroot, l1); |
| 755 | memcpy(localdir+l1, pathname, l2+1); |
| 756 | #ifdef HAVE_MKDIR |
| 757 | #ifdef __MINGW32__ |
| 758 | if(mkdir(localdir)>=0 || errno==EEXIST) |
| 759 | return localdir; |
| 760 | #else |
| 761 | if(mkdir(localdir, 0775)>=0 || errno==EEXIST) |
| 762 | return localdir; |
| 763 | #endif |
| 764 | /* Need to create the parent and maybe convert the pathname */ |
| 765 | if(localroot!=NULL) |
| 766 | memcpy(localdir, localroot, l1); |
| 767 | localdir[l1]='\0'; |
| 768 | src=pathname; |
| 769 | dst=localdir+l1; |
| 770 | while(*src!='\0') |
| 771 | { |
| 772 | unsigned int n=0; |
| 773 | const char *src_org=src; |
| 774 | char *dst_org=dst; |
| 775 | for(n=0; |
| 776 | *src!='\0' && (n==0 || *src!='/'); |
| 777 | dst++, src++, n++) |
| 778 | *dst=*src; |
| 779 | *dst='\0'; |
| 780 | #ifdef __MINGW32__ |
| 781 | if(mkdir(localdir)<0 && errno==EINVAL) |
| 782 | { |
| 783 | unsigned int l; |
| 784 | l=filename_convert(dst_org, src_org, n); |
| 785 | dst=dst_org+l; |
| 786 | mkdir(localdir); |
| 787 | } |
| 788 | #elif defined(__CYGWIN__) |
| 789 | if(memcmp(&localdir[1],":/cygdrive",11)!=0 && |
| 790 | mkdir(localdir, 0775)<0 && errno==EINVAL) |
| 791 | { |
| 792 | unsigned int l; |
| 793 | l=filename_convert(dst_org, src_org, n); |
| 794 | dst=dst_org+l; |
| 795 | mkdir(localdir, 0775); |
| 796 | } |
| 797 | #else |
| 798 | if(mkdir(localdir, 0775)<0 && errno==EINVAL) |
| 799 | { |
| 800 | unsigned int l; |
no test coverage detected