diff options
author | Jeff Layton <jlayton@redhat.com> | 2011-07-06 08:10:36 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2011-07-06 20:03:05 +0000 |
commit | b2a0fa152072f0085fa8d8eb0dbf9b3b0c5952fc (patch) | |
tree | 59e205c8c98301f1465d7ff1bad45b8f833456b2 /fs/cifs | |
parent | 677d8537d875832019fa989186f084ba47ecd93d (diff) |
cifs: fix build_unc_path_to_root to account for a prefixpath
Regression introduced by commit f87d39d9513.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: Pavel Shilovsky <piastryyy@gmail.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/connect.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 545e8546574..44376ce41e4 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -2855,19 +2855,28 @@ cifs_cleanup_volume_info(struct smb_vol **pvolume_info) /* build_path_to_root returns full path to root when * we do not have an exiting connection (tcon) */ static char * -build_unc_path_to_root(const struct smb_vol *volume_info, +build_unc_path_to_root(const struct smb_vol *vol, const struct cifs_sb_info *cifs_sb) { - char *full_path; + char *full_path, *pos; + unsigned int pplen = vol->prepath ? strlen(vol->prepath) : 0; + unsigned int unc_len = strnlen(vol->UNC, MAX_TREE_SIZE + 1); - int unc_len = strnlen(volume_info->UNC, MAX_TREE_SIZE + 1); - full_path = kmalloc(unc_len + 1, GFP_KERNEL); + full_path = kmalloc(unc_len + pplen + 1, GFP_KERNEL); if (full_path == NULL) return ERR_PTR(-ENOMEM); - strncpy(full_path, volume_info->UNC, unc_len); - full_path[unc_len] = 0; /* add trailing null */ + strncpy(full_path, vol->UNC, unc_len); + pos = full_path + unc_len; + + if (pplen) { + strncpy(pos, vol->prepath, pplen); + pos += pplen; + } + + *pos = '\0'; /* add trailing null */ convert_delimiter(full_path, CIFS_DIR_SEP(cifs_sb)); + cFYI(1, "%s: full_path=%s", __func__, full_path); return full_path; } |