Skip to content
Snippets Groups Projects
dfs.c 987 B
Newer Older
  • Learn to ignore specific revisions
  • #include "dfs.h"
    
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    void enqueue(struct directory *dr, struct list_head *stack)
    
    {
    	if (list_empty(stack))
    		INIT_LIST_HEAD(stack);
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	list_add(&dr->list, stack);
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    struct directory *dequeue(struct list_head *stack)
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	struct directory *dr;
    
    	if (list_empty(stack))
    		return NULL;
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	dr = list_first_entry(stack, struct directory, list);
    	list_del(&dr->list);
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	return dr;
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    bool search(char *path, struct list_head *visited)
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	struct directory *dr;
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	list_for_each_entry(dr, visited, list) {
    		if (strncmp(dr->path, path, 1024) == 0)
    
    			return true;
    	}
    
    	return false;
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    void clear_list(struct list_head *list)
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	struct directory *dr, *tmp;
    	print_list_dfs(list);
    
    	if (list_empty(list))
    		return;
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	list_for_each_entry_safe(dr, tmp, list, list) {
    		free(dr->path);
    		list_del(&dr->list);
    		free(dr);
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    }
    
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    void print_list_dfs(struct list_head *list)
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    {
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	struct directory *dr;
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	if (list_empty(list))
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    		return;
    
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	list_for_each_entry(dr, list, list) {
    		printf("path: %s\n", dr->path);
    
    Jakob Olsson's avatar
    Jakob Olsson committed
    	}