From 7c2c6484a6c984e73cf669eb8329a44bbcb9b7af Mon Sep 17 00:00:00 2001 From: Per Hurtig Date: Mon, 18 Aug 2025 17:15:19 +0200 Subject: [PATCH] Fix macOS shared memory filename length limit (fixes issue #92) (#93) * Fix macOS shared memory filename length limit Shorten shared memory object names from "__tdf_kittage_{pid}_page_{rn}_{page_num}" to "tdf_{pid}_{rn}_{page_num}" and change timestamp from nanoseconds to milliseconds % 1M to stay under macOS's 31-character limit for shm names. Fixes "File name too long (os error 63)" error when rendering PDFs on macOS. On macOS, SHM_NAME_MAX: 30 * Fix macOS shared memory filename length limit Shorten shared memory object names from "__tdf_kittage_{pid}_page_{rn}_{page_num}" to "tdf_{pid}_{rn}_{page_num}" and change timestamp from nanoseconds to milliseconds % 1M to stay under macOS's 31-character limit for shm names. Fixes "File name too long (os error 63)" error when rendering PDFs on macOS. SHM_NAME_MAX: 30 --- src/converter.rs | 11 +++++------ src/kitty.rs | 3 +-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/converter.rs b/src/converter.rs index 2b6bc09..2170824 100644 --- a/src/converter.rs +++ b/src/converter.rs @@ -139,14 +139,13 @@ pub async fn run_conversion_loop( let rn = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap_or_default() - .as_nanos(); + .as_millis() % 1_000_000; let mut img = if shms_work { - kittage::image::Image::shm_from( - dyn_img, - &format!("__tdf_kittage_{pid}_page_{rn}_{page_num}") - ) - .map_err(|e| RenderError::Converting(format!("Couldn't write to shm: {e}")))? + kittage::image::Image::shm_from(dyn_img, &format!("tdf_{pid}_{rn}_{page_num}")) + .map_err(|e| { + RenderError::Converting(format!("Couldn't write to shm: {e}")) + })? } else { kittage::image::Image::from(dyn_img) }; diff --git a/src/kitty.rs b/src/kitty.rs index 7cbde8a..97b4184 100644 --- a/src/kitty.rs +++ b/src/kitty.rs @@ -78,8 +78,7 @@ pub async fn run_action<'image, 'data, 'es>( pub async fn do_shms_work(ev_stream: &mut EventStream) -> bool { let img = DynamicImage::new_rgb8(1, 1); let pid = std::process::id(); - let Ok(mut k_img) = kittage::image::Image::shm_from(img, &format!("__tdf_kittage_test_{pid}")) - else { + let Ok(mut k_img) = kittage::image::Image::shm_from(img, &format!("tdf_test_{pid}")) else { return false; };