Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Bug with :P modifier when current directory is the root



Bart Schaefer wrote on Fri, Mar 10, 2017 at 18:25:01 -0800:
> Does this need an extra test that (here[strlen(here)-1] != '/') or some
> such, or are we safe enough this way?  Can zgetcwd() ever return "//" or
> "///" etc.?

zgetcwd() can return "." if the current working directory has been
deleted by another process.

I see zgetcwd() never returns NULL, but can it return an empty string?

> diff --git a/Src/subst.c b/Src/subst.c
> index 2214b3d..d68f16b 100644
> --- a/Src/subst.c
> +++ b/Src/subst.c
> @@ -4336,7 +4336,11 @@ modify(char **str, char **ptr)
>  			break;
>  		    case 'P':
>  			if (*copy != '/') {
> -			    copy = zhtricat(metafy(zgetcwd(), -1, META_HEAPDUP), "/", copy);
> +			    char *here = zgetcwd();
> +			    if (here[1])
> +				copy = zhtricat(metafy(here, -1, META_HEAPDUP), "/", copy);
> +			    else
> +				copy = dyncat(here, copy);
>  			}
>  			copy = xsymlink(copy, 1);
>  			break;



Messages sorted by: Reverse Date, Date, Thread, Author