MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / fopen_local

Function fopen_local

src/dir.c:828–898  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

826}
827
828FILE *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);

Callers 5

reiser_copyFunction · 0.85
ext2_copyFunction · 0.85
exfat_copyFunction · 0.85
ntfs_copyFunction · 0.85
fat_copyFunction · 0.85

Calls 3

MALLOCFunction · 0.85
filename_convertFunction · 0.85
strip_fnFunction · 0.70

Tested by

no test coverage detected