Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linux/linux_getcwd.c
Show First 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | linux_getcwd(struct thread *td, struct linux_getcwd_args *uap) | ||||
buflen = uap->bufsize; | buflen = uap->bufsize; | ||||
if (__predict_false(buflen < 2)) | if (__predict_false(buflen < 2)) | ||||
return (ERANGE); | return (ERANGE); | ||||
if (buflen > LINUX_PATH_MAX) | if (buflen > LINUX_PATH_MAX) | ||||
buflen = LINUX_PATH_MAX; | buflen = LINUX_PATH_MAX; | ||||
buf = malloc(buflen, M_TEMP, M_WAITOK); | buf = malloc(buflen, M_TEMP, M_WAITOK); | ||||
error = vn_getcwd(buf, &retbuf, &buflen); | error = vn_getcwd(buf, &retbuf, &buflen); | ||||
if (error == ENOMEM) | |||||
error = ERANGE; | |||||
if (error == 0) { | if (error == 0) { | ||||
error = copyout(retbuf, uap->buf, buflen); | error = copyout(retbuf, uap->buf, buflen); | ||||
if (error == 0) | if (error == 0) | ||||
td->td_retval[0] = buflen; | td->td_retval[0] = buflen; | ||||
} | } | ||||
free(buf, M_TEMP); | free(buf, M_TEMP); | ||||
return (error); | return (error); | ||||
} | } |