#include "stack_operations.h"

void push(struct directory *dr, struct list_head *list)
{
	if (list_empty(list))
		INIT_LIST_HEAD(list);
	list_add(&dr->list, list);
}

struct directory *pop(struct list_head *list)
{
	struct directory *dr;

	if (list_empty(list))
		return NULL;
	dr = list_first_entry(list, struct directory, list);
	list_del(&dr->list);

	return dr;
}

bool search(char *path, struct list_head *list)
{
	struct directory *dr;

	list_for_each_entry(dr, list, list) {
		if (strncmp(dr->path, path, 1024) == 0)
			return true;
	}

	return false;
}

void clear_list(struct list_head *list)
{
	struct directory *dr, *tmp;

	if (list_empty(list))
		return;

	list_for_each_entry_safe(dr, tmp, list, list) {
		free(dr->path);
		list_del(&dr->list);
		free(dr);
	}
}

void print_list_dfs(struct list_head *list)
{
	struct directory *dr;

	if (list_empty(list))
		return;

	list_for_each_entry(dr, list, list) {
		printf("path: %s\n", dr->path);
	}
}