<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I have users running rsync 3.0.6 on Mac OS 10.5 and 10.6 with the following arguments (for example):<div><br></div><div><font class="Apple-style-span" face="Courier" size="3"><span class="Apple-style-span" style="font-size: 13px;">rsync -aNHAXx --fileflags --force-change --no-inc-recursive --delete-during --filter="P _Archive*" --filter="P /*" --backup --backup-dir="_Archive_2010_March_07_22-27-43" / /Volumes/Backup</span></font></div><div><br></div><div>I can't seem to figure out how make_bak_dir could be returning this error for a handful of them:<div><br></div><div><div>rsync: make_bak_dir mkdir "/Volumes/Backup/_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/ Orchestra" failed: File exists</div><div>rsync: keep_backup failed: "/Volumes/Backup/Users/jsmith/Library/Mail/Mailboxes/ Orchestra/ * New Mexico Concert/Assistant - John Smith.mbox/Messages/269981.emlx" -> "_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/ Orchestra/ * New Mexico Concert/Assistant - John Smith.mbox/Messages/269981.emlx": No such file or directory</div><div>rsync: stat "/Volumes/Backup/_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/ Orchestra/ * New Mexico Concert/Assistant - John Smith.mbox/Messages/269981.emlx" failed: No such file or directory</div><div><div><br></div></div><div>Here's another example from a different user:</div><div><br></div><div>rsync: make_bak_dir mkdir "/Volumes/LaCie 1TB/_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches" failed: File exists</div><div>rsync: keep_backup failed: "/Volumes/LaCie 1TB/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1" -> "_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1": No such file or directory</div><div>rsync: stat "/Volumes/LaCie 1TB/_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1" failed: No such file or directory<br><br></div><div><br></div></div><div>Because everywhere that make_bak_dir is called, there's a test that the previous open() that was called failed with ENOENT. For example, from receiver.c:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #980063">if</span> ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, <span style="color: #0000ff">0600</span>)) < <span style="color: #0000ff">0</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #980063">int</span> save_errno = errno ? errno : EINVAL; <span style="color: #00842e">/* 0 paranoia */</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #980063">if</span> (errno == ENOENT && make_bak_dir(backupptr) == <span style="color: #0000ff">0</span>) {</div><div><font class="Apple-style-span" face="Monaco" size="3"><span class="Apple-style-span" style="font-size: 11px; "><br></span></font></div><div>Does make_bak_dir simply need to trap for that error, like:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(0, 132, 46); ">/* Try to find an existing dir, starting from the deepest dir. */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #980063">while</span> (<span style="color: #0000ff">1</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #980063">if</span> (--p == fbuf)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #980063">return</span> -<span style="color: #0000ff">1</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #980063">if</span> (*p == <span style="color: #0000ff">'/'</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>*p = <span style="color: #0000ff">'\0'</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(0, 132, 46); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span></span><span style="color: #980063">if</span><span style="color: #000000"> (mkdir_defmode(fbuf) == </span><span style="color: #0000ff">0</span><span style="color: #000000"> || errno == EEXIST) // <-- Trap for EEXIST?</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #980063">break</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #980063">if</span> (errno != ENOENT) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span>rsyserr(FERROR, errno,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(172, 0, 13); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                                </span></span>"make_bak_dir mkdir %s failed"<span style="color: #000000">,</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                                </span>full_fname(fbuf));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #980063">return</span> -<span style="color: #0000ff">1</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">}</div><div><font class="Apple-style-span" face="Monaco" size="3"><span class="Apple-style-span" style="font-size: 11px;"><br></span></font></div></div><div>Thanks,</div><div>Mike</div><div><br></div></div></div></body></html>