]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
deferred_unlink: fix for very long filenames, fixes #3136
authorJaroslav Kysela <perex@perex.cz>
Fri, 9 Oct 2015 15:03:19 +0000 (17:03 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 9 Oct 2015 15:03:19 +0000 (17:03 +0200)
src/utils.c

index 23ea46d6a11c13c0be6f07f793a5ae4b92fa1b48..4da4751195a77b8a8fd2324b120f67632d1ab001 100644 (file)
@@ -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;