+ if (fname) {
+ c = f_name_buf();
+ strlcpy(c, fname, MAXPATHLEN);
+ } else
+ c = f_name(file, NULL);
+ if (am_sender && file->dir.root) {
+ pathjoin(buf2, sizeof buf2,
+ file->dir.root, c);
+ clean_fname(buf2, 0);
+ if (fmt[1]) {
+ strlcpy(c, buf2, MAXPATHLEN);
+ n = c;
+ } else
+ n = buf2;
+ } else if (*c != '/') {
+ pathjoin(buf2, sizeof buf2,
+ curr_dir + module_dirlen, c);
+ clean_fname(buf2, 0);
+ if (fmt[1]) {
+ strlcpy(c, buf2, MAXPATHLEN);
+ n = c;
+ } else
+ n = buf2;
+ } else {
+ clean_fname(c, 0);
+ n = c;
+ }
+ if (*n == '/')
+ n++;
+ break;
+ case 'n':
+ if (fname) {
+ c = f_name_buf();
+ strlcpy(c, fname, MAXPATHLEN);
+ } else
+ c = f_name(file, NULL);
+ if (S_ISDIR(file->mode))
+ strlcat(c, "/", MAXPATHLEN);
+ n = c;
+ break;
+ case 'L':
+ if (hlink && *hlink) {
+ n = hlink;
+ strlcpy(buf2, " => ", sizeof buf2);
+ } else if (S_ISLNK(file->mode) && !fname) {
+ n = F_SYMLINK(file);
+ strlcpy(buf2, " -> ", sizeof buf2);
+ } else {
+ n = "";
+ if (!fmt[1])
+ break;
+ strlcpy(buf2, " ", sizeof buf2);
+ }
+ strlcat(fmt, "s", sizeof fmt);
+ snprintf(buf2 + 4, sizeof buf2 - 4, fmt, n);