| 826 | } |
| 827 | |
| 828 | FILE *fopen_local(char **localfilename, const char *localroot, const char *filename) |
| 829 | { |
| 830 | #ifdef DISABLED_FOR_FRAMAC |
| 831 | return NULL; |
| 832 | #else |
| 833 | const int l1=strlen(localroot); |
| 834 | const int l2=strlen(filename); |
| 835 | const char *src; |
| 836 | char *dst=(char *)MALLOC(l1+l2+1); |
| 837 | const char *src_org=filename; |
| 838 | char *dst_org=dst; |
| 839 | FILE *f_out; |
| 840 | memcpy(dst, localroot, l1); |
| 841 | memcpy(dst+l1, filename, l2+1); |
| 842 | *localfilename=dst; |
| 843 | strip_fn(dst); |
| 844 | f_out=fopen(dst,"wb"); |
| 845 | if(f_out) |
| 846 | return f_out; |
| 847 | /* Need to create the parent and maybe convert the pathname */ |
| 848 | src=filename; |
| 849 | memcpy(dst, localroot, l1+1); |
| 850 | dst+=l1; |
| 851 | while(*src!='\0') |
| 852 | { |
| 853 | unsigned int n; |
| 854 | src_org=src; |
| 855 | dst_org=dst; |
| 856 | for(n=0; |
| 857 | *src!='\0' && (n==0 || *src!='/'); |
| 858 | dst++, src++, n++) |
| 859 | *dst=*src; |
| 860 | *dst='\0'; |
| 861 | if(*src!='\0') |
| 862 | { |
| 863 | #ifdef __MINGW32__ |
| 864 | if(mkdir(*localfilename)<0 && errno==EINVAL) |
| 865 | { |
| 866 | unsigned int l; |
| 867 | l=filename_convert(dst_org, src_org, n); |
| 868 | dst=dst_org+l; |
| 869 | mkdir(*localfilename); |
| 870 | } |
| 871 | #elif defined(__CYGWIN__) |
| 872 | if(memcmp(&localfilename[1],":/cygdrive",11)!=0 && |
| 873 | mkdir(*localfilename, 0775)<0 && |
| 874 | (errno==EINVAL || errno==ENOENT)) |
| 875 | { |
| 876 | unsigned int l; |
| 877 | l=filename_convert(dst_org, src_org, n); |
| 878 | dst=dst_org+l; |
| 879 | mkdir(*localfilename, 0775); |
| 880 | } |
| 881 | #else |
| 882 | if(mkdir(*localfilename, 0775)<0 && errno==EINVAL) |
| 883 | { |
| 884 | unsigned int l; |
| 885 | l=filename_convert(dst_org, src_org, n); |
no test coverage detected