#68 从目录中加载额外的证书和crl。
This commit is contained in:
@@ -73,4 +73,59 @@ char *tfe_thread_safe_ctime(const time_t *tp, char *buf, int len)
|
||||
month_str[month], day + 1, hour, min, sec, year);
|
||||
return buf;
|
||||
}
|
||||
//replacement of glibc scandir, to adapt dictator malloc wrap
|
||||
int tfe_scandir(const char *dir, struct dirent ***namelist,
|
||||
int(*filter)(const struct dirent *),
|
||||
int(*compar)(const void *, const void *))
|
||||
{
|
||||
DIR * od;
|
||||
int n = 0;
|
||||
int ENLARGE_STEP=1024;
|
||||
int DIR_ENT_SIZE=ENLARGE_STEP;
|
||||
struct dirent ** list = NULL;
|
||||
struct dirent * p;
|
||||
struct dirent entry,*result;
|
||||
|
||||
if((dir == NULL) || (namelist == NULL))
|
||||
return -1;
|
||||
|
||||
od = opendir(dir);
|
||||
if(od == NULL)
|
||||
return -1;
|
||||
|
||||
list = (struct dirent **)malloc(DIR_ENT_SIZE*sizeof(struct dirent *));
|
||||
|
||||
|
||||
while(0==readdir_r(od,&entry,&result))
|
||||
{
|
||||
if(result==NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if( filter && !filter(&entry))
|
||||
continue;
|
||||
|
||||
p = (struct dirent *)malloc(sizeof(struct dirent));
|
||||
memcpy((void *)p,(void *)(&entry),sizeof(struct dirent));
|
||||
list[n] = p;
|
||||
|
||||
n++;
|
||||
if(n >= DIR_ENT_SIZE)
|
||||
{
|
||||
DIR_ENT_SIZE+=ENLARGE_STEP;
|
||||
list=(struct dirent **)realloc((void*)list,DIR_ENT_SIZE*sizeof(struct dirent *));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
closedir(od);
|
||||
|
||||
*namelist = list;
|
||||
|
||||
if(compar)
|
||||
qsort((void *)*namelist,n,sizeof(struct dirent *),compar);
|
||||
|
||||
return n;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user