diff options
Diffstat (limited to 'old/canls.c')
| -rw-r--r-- | old/canls.c | 70 | 
1 files changed, 70 insertions, 0 deletions
diff --git a/old/canls.c b/old/canls.c new file mode 100644 index 0000000..02a41e2 --- /dev/null +++ b/old/canls.c @@ -0,0 +1,70 @@ +#include <stdio.h> +#include <stdlib.h>		/* calloc */ +#include <string.h>		/* memmove */ +#include <unistd.h>	/* chdir */ +#include "shared.h" + +static char *read_dir(FILE *dir_dump, char *buf) +{ +	static char *contents = NULL; +	int read, size = 0; +	while ((read = fread(buf, 1, bufsize, dir_dump)) > 0) { +		size += read; +		contents = realloc(contents, size); +		memmove(&contents[size-read], buf, read); +	} +	return contents; +} + +const char *key_delim = "\":"; +/* Return character pointer to beginning of value. */ +char * +getval(char *str, char *key) +{ +	key = realloc(key, strlen(key) + strlen(key_delim) + 1); +	strcat(key, key_delim); +	char *rt = strstr(str, key); +	if (rt == NULL) { +		fprintf(stderr, "%s\n", "Invalid key.\n"); +	} +	return rt; +} + +/* Count directories. */ +int +count_dir(char *contents) +{ +	int count = 0; +	char *p = contents; +	while ((p = strstr(p, "\n")) != NULL) { +		count++; +		p = &p[1]; /* Increment p past the current '\n'. */ +	} +	return count; +} + +int +main(int argc, char **argv) +{ + +	char *path = NULL; +	if (argc > 1) { +		path = argv[1]; +	} + +	chdir("dump"); +	FILE *root_stream = fopen("folders", "r"); +	if (root_stream == NULL) { +		fprintf(stderr, "Generate a dump of your Canvas" +			" account directory structure" +			" using dump.sh.\n"); +		return 1; +	} + +	char buf[bufsize]; +	char *root_contents = read_dir(root_stream, buf); +	int root_count = count_dir(root_contents); +	printf("%d\n", root_count); + +	return 0; +}  | 
