#ifndef SP_HW1_COMMON_H
#define SP_HW1_COMMON_H

#include <stdbool.h>
#include <stdlib.h>
#include <sys/select.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

void* e_malloc (size_t size);
char* e_strcat (const char* s1, const char* s2);
void e_err_exit (const char* a);

typedef struct {
	bool active;
	int ref_count;
	fd_set fset;
	dev_t fdev;
	ino_t fino;
} fnode;

typedef struct {
	int maxfd;
	fnode* flist;
} ftab;

ftab* ftab_create (int maxfd);
fnode* ftab_insert (ftab* ft, dev_t fdev, ino_t fino, int fd);
fnode* ftab_search (ftab* ft, dev_t fdev, ino_t fino);
void ftab_free (ftab* ft);
fnode* fnode_ref (fnode* fn, int fd);
void fnode_unref (fnode* fn, ftab* ft);

#endif /* SP_HW1_COMMON_H */