Some coding conventions used in this project ============================================ 1) The language chosen for this implementation is ENGLISH. Therefore, all materials in the repository should be in the english language. Not only the code itself, but also comments and filenames. 2) Try to refactor your code into the greatest number of procedures and functions as possible. Whenever possible use standard library functions instead of writing your own. Perhaps wikipedia and the "man" command can help you in knowing how a stdlib function works. For example, the manpage for "strcpy" is "man 3 strcpy" (*) libc standard library functions are in section 3 of the manual, so to look them up, you type "man 3 " (*) The C development manpages are in Ubuntu packages named "manpages-dev", "manpages-posix" and "manpages-posix-dev". To install them use "sudo aptitude install manpages-{dev,posix,posix-dev}" 3) Whenever you write a .c file to contain new procedures, also write a similarly named .h file. In the header you ought to put the declarations for the procedures you hope to call in other files, together with macro definitions and other kinds of declarations. By writing your code in this way, the C linker shall do its magic beautifully and you shall be free of "undefined reference" errors. 4) Each and every header file you write must have INCLUSION GUARDS. This is just a piece of code that guards you against having a "multiple definition" error. They look like this: #ifndef MY_FILE_NAME_H #define MY_FILE_NAME_H ... your header code in here ... #endif The convention for this project is that the inclusion guard macro shall be named after the file name, with CAPS LOCK on, with the "." substituted for a underscore. For example, the file fs_ops.h have its inclusion guards with this macro: FS_OPS_H 5) Whenever you think of some task that can be tested, write a .c file with a main() function that tests the feature you wanna test. After that write a "make" script that will compile and link the appropriate files, generating the target executable. The template for this "make" script can be found in the ones that are already working, like "make_vdi" and "make_format".