about summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--shared.c62
1 files changed, 26 insertions, 36 deletions
diff --git a/shared.c b/shared.c
index 225ce15..3d91a76 100644
--- a/shared.c
+++ b/shared.c
@@ -563,49 +563,39 @@ char *expand_macros(const char *txt)
 
 char *get_mimetype_for_filename(const char *filename)
 {
-	static const char *delimiters;
-	char *ext = NULL, *iterate, *mimetype = NULL, *token;
-	char line[1024];
-	FILE *fd;
+	char *ext, *mimetype, *token, line[1024];
+	FILE *file;
 	struct string_list_item *mime;
 
-	if (filename == NULL)
+	if (!filename)
 		return NULL;
 
 	ext = strrchr(filename, '.');
+	if (!ext)
+		return NULL;
+	++ext;
+	if (!ext[0])
+		return NULL;
+	mime = string_list_lookup(&ctx.cfg.mimetypes, ext);
+	if (mime)
+		return xstrdup(mime->util);
 
-	if (ext && *(++ext)) {
-		mime = string_list_lookup(&ctx.cfg.mimetypes, ext);
-		if (mime) {
-			/* We could just pass the pointer here, but would have to care
-			 * whether or not to free the memory. Instead just dup. */
-			mimetype = xstrdup(mime->util);
-		} else if (ctx.cfg.mimetype_file != NULL) {
-			fd = fopen(ctx.cfg.mimetype_file, "r");
-			if (fd == NULL)
-				return NULL;
-
-			delimiters = " \t\r\n";
-
-			/* loop over all lines in the file */
-			while (mimetype == NULL && fgets(line, sizeof(line), fd)) {
-				iterate = strtok(line, delimiters);
-
-				/* skip empty lines and comment lines */
-				if (iterate == NULL || (iterate[0] == '#'))
-					continue;
-
-				/* loop over all extensions of mimetype */
-				while ((token = strtok(NULL, delimiters))) {
-					if (strcasecmp(ext, token) == 0) {
-						mimetype = xstrdup(iterate);
-						break;
-					}
-				}
+	if (!ctx.cfg.mimetype_file)
+		return NULL;
+	file = fopen(ctx.cfg.mimetype_file, "r");
+	if (!file)
+		return NULL;
+	while (fgets(line, sizeof(line), file)) {
+		if (!line[0] || line[0] == '#')
+			continue;
+		mimetype = strtok(line, " \t\r\n");
+		while ((token = strtok(NULL, " \t\r\n"))) {
+			if (!strcasecmp(ext, token)) {
+				fclose(file);
+				return xstrdup(mimetype);
 			}
-			fclose(fd);
 		}
 	}
-
-	return mimetype;
+	fclose(file);
+	return NULL;
 }
1af5f5838686da2286d3ad2ca&follow=1'>Switch to powerlineJune McEnroe Which I'm not going to bother configuring because it thinks it's all fancy and for other things that aren't Vim so it stores its config file in ~/.config which I keep in a different repo and I only want to use it for Vim so fuck you, Powerline. </rant> 2013-03-12Remove vim-powerlineJune McEnroe 2013-02-03Update base16 and refheapJune McEnroe 2013-02-03Ignore plugin/private.vimJune McEnroe 2012-09-29Disable GUI dialogsJune McEnroe