Hi Dorian, Took a quick glance into the source and a couple things which stood out, that haven't been pointed out already:
#define BUFFER_SIZE MAX_TAGS * MAX_TAG_SIZE Macros like this pretty much always should be parenthesized. It costs nothing and can save you from getting into potential bugs. See http://c-faq.com/cpp/safemacros.html for a more detailed explanation. else if (strlen(temp) > 0) { strcat(tempForWrite, temp); I see lots of `strcat` calls going on, and maybe you *are* checking for overflow somewhere out there, but it's not immediately obvious where. I would suggest using `strlcat` instead. I would also suggest being very careful with the str* family of functions, they often contain various bear traps. if (errno == ENOTSUP) { fprintf(stderr, "Extended attributes are not available on your filesystem.\n"); return -1; } else if (errno == ENOENT) { fprintf(stderr, "File does not exist.\n"); return -1; } Use strerror(). Also a lot of these messages are being used in multiple location. I'd just use a macro for them. #define ERRMSG_X "error x" ... fprintf(stderr, "%s\n", ERRMSG_X); ...Or an array of them and index into it using enum. Lastly, it's already been pointed out, but it's very cringe having to go into a `src` dir just to find a single source file in there. And related to that, given it's a single source file and none of the functions are being called externally, you should declare (as well as define) all the functions as `static`. - NRK