diff -Naur bacula-2.2.8.orig/src/filed/backup.c bacula-2.2.8/src/filed/backup.c --- bacula-2.2.8.orig/src/filed/backup.c 2008-05-19 10:34:26.000000000 -0400 +++ bacula-2.2.8/src/filed/backup.c 2008-05-19 10:43:23.000000000 -0400 @@ -1102,9 +1102,9 @@ /* Copy to first path separator -- Win32 might have c: ... */ while (*in && !IsPathSeparator(*in)) { - *out++ = *in++; + out++; in++; } - *out++ = *in++; + out++; in++; numsep++; /* one separator seen */ for (stripped=0; strippedlink_save = get_pool_memory(PM_FNAME); } pm_strcpy(ff_pkt->fname_save, ff_pkt->fname); + if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { + pm_strcpy(ff_pkt->link_save, ff_pkt->link); + Dmsg2(500, "strcpy link_save=%d link=%d\n", strlen(ff_pkt->link_save), + strlen(ff_pkt->link)); + sm_check(__FILE__, __LINE__, true); + } /* * Strip path. If it doesn't succeed put it back. If @@ -1151,18 +1161,19 @@ * Don't strip symlinks. * I.e. if either stripping fails don't strip anything. */ - if (do_strip(ff_pkt->strip_path, ff_pkt->fname)) { - if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { - pm_strcpy(ff_pkt->link_save, ff_pkt->link); - if (!do_strip(ff_pkt->strip_path, ff_pkt->link)) { - pm_strcpy(ff_pkt->link, ff_pkt->link_save); - pm_strcpy(ff_pkt->fname, ff_pkt->fname_save); - } - } - } else { - pm_strcpy(ff_pkt->fname, ff_pkt->fname_save); - } - Dmsg2(200, "fname=%s stripped=%s\n", ff_pkt->fname_save, ff_pkt->fname); + if (!do_strip(ff_pkt->strip_path, ff_pkt->fname)) { + unstrip_path(ff_pkt); + goto rtn; + } + /* Strip links but not symlinks */ + if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { + if (!do_strip(ff_pkt->strip_path, ff_pkt->link)) { + unstrip_path(ff_pkt); + } + } +rtn: + Dmsg3(100, "fname=%s stripped=%s link=%s\n", ff_pkt->fname_save, ff_pkt->fname, + ff_pkt->link); } static void unstrip_path(FF_PKT *ff_pkt) @@ -1172,6 +1183,11 @@ } pm_strcpy(ff_pkt->fname, ff_pkt->fname_save); if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { + Dmsg2(500, "strcpy link=%s link_save=%s\n", ff_pkt->link, + ff_pkt->link_save); pm_strcpy(ff_pkt->link, ff_pkt->link_save); + Dmsg2(500, "strcpy link=%d link_save=%d\n", strlen(ff_pkt->link), + strlen(ff_pkt->link_save)); + sm_check(__FILE__, __LINE__, true); } }