first commit
This commit is contained in:
commit
21be7fd279
156 changed files with 6939 additions and 0 deletions
54
include/libmu/recurse.h
Normal file
54
include/libmu/recurse.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
#ifndef _RECURSE_H
|
||||
#define _RECURSE_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <dirent.h>
|
||||
#include <string.h>
|
||||
#include "make_path.h"
|
||||
#include "get_stat.h"
|
||||
|
||||
int mu_recurse(const char *restrict prog_name, int link_flag, const char *restrict path, void *restrict arg, int (*file_act)(const char *path, void *p), int (*dir_act)(const char *path, void *p)) {
|
||||
|
||||
struct stat sb;
|
||||
if (mu_get_stats(prog_name, link_flag, path, &sb))
|
||||
return 1;
|
||||
|
||||
if (!S_ISDIR(sb.st_mode) || S_ISLNK(sb.st_mode)) {
|
||||
if (file_act != NULL)
|
||||
return file_act(path, arg);
|
||||
}
|
||||
|
||||
DIR *dir = opendir(path);
|
||||
if (dir == NULL) {
|
||||
if (prog_name != NULL)
|
||||
fprintf(stderr, "%s: %s: Can`t open directory\n", prog_name, path);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ret = 0;
|
||||
|
||||
struct dirent *ep;
|
||||
while ((ep = readdir(dir)) != NULL) {
|
||||
if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, ".."))
|
||||
continue;
|
||||
|
||||
char *full_path = mu_make_path(prog_name, path, ep->d_name);
|
||||
if (full_path == NULL)
|
||||
continue;
|
||||
|
||||
if (mu_recurse(prog_name, link_flag, full_path, arg, file_act, dir_act))
|
||||
ret = 1;
|
||||
|
||||
free(full_path);
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
if (dir_act != NULL)
|
||||
if (dir_act(path, arg))
|
||||
ret = 1;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue