From 1ffad11881c63db416f2ee957740ab1a29d145b7 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 9 Oct 2015 17:03:19 +0200 Subject: [PATCH] deferred_unlink: fix for very long filenames, fixes #3136 --- src/utils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/utils.c b/src/utils.c index 23ea46d6a..4da475119 100644 --- a/src/utils.c +++ b/src/utils.c @@ -702,13 +702,20 @@ deferred_unlink(const char *filename, const char *rootdir) char *s; size_t l; int r; + long max; l = strlen(filename); s = malloc(l + 9 + 1); if (s == NULL) return -ENOMEM; + max = pathconf(filename, _PC_NAME_MAX); strcpy(s, filename); - strcpy(s + l, ".removing"); + if (l + 10 < max) { + s[0] = '.'; + strcpy(s + l, ".removing"); + } else { + memcpy(s, ".rm.", 4); + } r = rename(filename, s); if (r) { r = -errno; -- 2.47.3