Check for trailing '/' in mount.zfs

When run with a root '/' cwd the mount.zfs helper would strip not
only the '/' but also the next character from the dataset name.
For example, '/tank' was changed to 'ank' instead of just 'tank'.
Originally, this was done for the '/tmp' cwd case where we needed
to strip the '/' following the cwd.  For example '/tmp/tank' needed
to remove the '/tmp' cwd plus 1 character for the '/'.

This change fixes the problem by checking the cwd and if it ends in
a '/' it does not strip and extra character.  Otherwise it will strip
the next character.  I believe this should only ever be true for the
root directory.

Closes #148
This commit is contained in:
Brian Behlendorf 2011-03-10 12:58:44 -08:00
parent 3eae80100b
commit a6cba65cca

View File

@ -218,10 +218,14 @@ static char *
parse_dataset(char *dataset)
{
char cwd[PATH_MAX];
int len;
(void) getcwd(cwd, PATH_MAX);
if (!strncmp(cwd, dataset, strlen(cwd)))
return (dataset + strlen(cwd) + 1);
len = strlen(cwd);
/* Do not add one when cwd already ends in a trailing '/' */
if (!strncmp(cwd, dataset, len))
return (dataset + len + (cwd[len-1] != '/'));
return (dataset);
}