====== input ====== I/O module to assist with consuming data from files ===== Functions ===== ==== get_binary ==== Reads a file at ''%%path%%'' and returns the contents as a char* buffer. The ''%%fsz%%'' parameter stores the length of the returned array. The buffer is allocated inside the function, so the user is responsible for freeing it when finished. char *get_binary(const char *path, size_t *fsz); /* Usage */ size_t fsz = 0; char *buf = get_binary("/home/evan/binfile", &fsz); free(buf); ==== get_input ==== Reads a file at ''%%path%%'' and returns the contents as a single string. The string is allocated inside the function and the user is responsible for freeing it when finished. unsigned char *get_input(const char *path); /* Usage */ char *str = get_input("/home/evan/textfile"); free(str); ==== get_lines ==== Reads a file at ''%%path%%'' and returns the contents as an array of strings. The newline character ''%%\n%%'' is used as the delimiter to determine where the file is split. The user is responsible for cleaning up the memory using ''%%del_lines()%%''. ''%%lsz%%'' is set to the number of lines in the array. char **get_lines(const char *path, size_t *lsz); /* Usage */ size_t sz = 0; char **lines = get_lines("/home/evan/textfile", &sz); for (size_t i = 0; i < sz; i++) { printf("%s\n", lines[i]); } del_lines(lines); ==== del_lines ==== Frees all memory used by ''%%get_lines()%%'' void del_lines(char **lines); ==== get_ints ==== Reads a file at ''%%path%%'' and returns the contents as an array of integers. The file is assumed to be a newline seperated list of integers and nothing else. The newline character ''%%\n%%'' is used as the delimiter to determine where the file is split. The user is responsible for cleaning up the memory using ''%%free()%%''. ''%%lsz%%'' is set to the number of lines in the array. int *get_ints(const char *path, size_t *lsz); /* Usage */ int *nums = get_ints("/home/evan/intfile"); for (size_t i = 0; i < sz; i++) { printf("%d\n", nums[i]); } free(nums); ==== split ==== Takes a string ''%%s%%'' and splits it into an array of strings based on the delimiter. ''%%s%%'' is left unchanged. The user is responsible for cleaning up the memory of the split using ''%%del_split()%%''. ''%%sp_sz%%'' is set to the size of the split. char **split(char *s, size_t *lsz, const char *delim) /* Usage */ size_t sp_sz = 0; char **sp = split("Split on whitespace", &sp_sz, " "); printf("%s\n", sp[0]); // Prints "Split" ==== del_split ==== Frees all memory used by ''%%split()%%''. Just like ''%%split%%'', it does not touch the original string. void del_split(char **sp); /* Usage */ size_t sp_sz = 0; char **sp = split("Delete Me!", &sp_sz, " "); void del_split(sp); ==== capture_system ==== Runs a command on the system shell and returns stdout as a string. ''%%buffsize%%'' is the size of the returned buffer that holds ''%%stdout%%''. Passing ''%%0%%'' to ''%%buffsize%%'' will use the default buffer size of ''%%1024%%''. User is responsible for freeing the returned string. const char *capture_system(const char *cmd, int buffsize); /* Usage */ const char *cap = capture_system("ls $HOME", 0); printf("%s\n", cap); free(cap);