Correct a small detail in list_t
The compiler was complaining of incompatible pointer types.
Change PATH_MAX+/* ... */ by PATH_MAX.
PATH_MAX+/* ... */ makes the code uselessly complicated.
Let's remove it.
Rewrite make_path() in a dynamic way
I changed my mind.

Now, make_path() returns a dynamically allocated path which must
be freed with free() next.
Define PATH_MAX as 2048
Portability sucks. Operating systems sucks.

2048 characters is enough to hold any reasonable file path.
If you need a larger size, who are you? why are you doing this?