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

Function mkdir_local

src/dir.c:743–812  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

741}
742
743char *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;

Callers 2

copy_dirFunction · 0.85
mkdir_local_for_fileFunction · 0.85

Calls 2

MALLOCFunction · 0.85
filename_convertFunction · 0.85

Tested by

no test coverage detected