diff --git a/options/path.c b/options/path.c index 17d6245582..304f009167 100644 --- a/options/path.c +++ b/options/path.c @@ -155,11 +155,11 @@ char *mp_splitext(const char *path, bstr *root) { assert(path); const char *split = strrchr(path, '.'); - if (!split) - split = path + strlen(path); + if (!split || !split[1] || strchr(split, '/')) + return NULL; if (root) - *root = (bstr){.start = (char *)path, .len = path - split}; - return (char *)split; + *root = (bstr){(char *)path, split - path}; + return (char *)split + 1; } char *mp_path_join(void *talloc_ctx, struct bstr p1, struct bstr p2) diff --git a/options/path.h b/options/path.h index 0e1744bbd0..4756379fa2 100644 --- a/options/path.h +++ b/options/path.h @@ -50,10 +50,10 @@ char *mp_get_user_path(void *talloc_ctx, struct mpv_global *global, char *mp_basename(const char *path); -/* Return file extension, including the '.'. If root is not NULL, set it to the - * part of the path without extension. So: path == root + returnvalue +/* Return file extension, excluding the '.'. If root is not NULL, set it to the + * part of the path without extension. So: path == root + "." + extension * Don't consider it a file extension if the only '.' is the first character. - * Return "" if no extension. + * Return NULL if no extension and don't set *root in this case. */ char *mp_splitext(const char *path, bstr *root); diff --git a/player/screenshot.c b/player/screenshot.c index 7336c64e97..500960aee4 100644 --- a/player/screenshot.c +++ b/player/screenshot.c @@ -347,7 +347,7 @@ void screenshot_to_file(struct MPContext *mpctx, const char *filename, int mode, } char *ext = mp_splitext(filename, NULL); if (ext) - opts.format = ext + 1; // omit '.' + opts.format = ext; struct mp_image *image = screenshot_get(mpctx, mode); if (!image) { screenshot_msg(ctx, SMSG_ERR, "Taking screenshot failed.");