diff options
-rw-r--r-- | ext/Cwd/Cwd.xs | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/ext/Cwd/Cwd.xs b/ext/Cwd/Cwd.xs index 6935155a40..10c6f15422 100644 --- a/ext/Cwd/Cwd.xs +++ b/ext/Cwd/Cwd.xs @@ -211,29 +211,21 @@ PPCODE: dXSTARG; char *path; STRLEN len; - char *buf; - - New(0, buf, MAXPATHLEN, char); - if (buf) { - buf[MAXPATHLEN] = 0; - if (pathsv) - path = SvPV(pathsv, len); - else { - path = "."; - len = 1; - } + char buf[MAXPATHLEN]; - if (bsd_realpath(path, buf)) { - sv_setpvn(TARG, buf, strlen(buf)); - SvPOK_only(TARG); - } - else - sv_setsv(TARG, &PL_sv_undef); + if (pathsv) + path = SvPV(pathsv, len); + else { + path = "."; + len = 1; + } - Safefree(buf); + if (bsd_realpath(path, buf)) { + sv_setpvn(TARG, buf, strlen(buf)); + SvPOK_only(TARG); } else - sv_setsv(TARG, &PL_sv_undef); + sv_setsv(TARG, &PL_sv_undef); XSprePUSH; PUSHTARG; } |