X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fgetvservername.c;h=046f828c68c74e10586ce2303b74bf6d4545d8f4;hb=7d3d2df7f36ecdcba4bf081404dfaa2f2c3a06ee;hp=00dfd3afda631d38b6ec304c480a5f2e78de2695;hpb=f30fdcfd6caa637eaaee58301d1f67cf9901eb29;p=util-vserver.git diff --git a/util-vserver/lib/getvservername.c b/util-vserver/lib/getvservername.c index 00dfd3a..046f828 100644 --- a/util-vserver/lib/getvservername.c +++ b/util-vserver/lib/getvservername.c @@ -27,12 +27,15 @@ #include #include #include +#include +#include static char * getRecentName(char *start, char *end) { char *res = 0; int fd; + char buf[PATH_MAX]; strcpy(end, "/name"); fd = open(start, O_RDONLY); @@ -46,6 +49,7 @@ getRecentName(char *start, char *end) if (TEMP_FAILURE_RETRY(read(fd, buf, len+1))==len) { while (len>0 && buf[len-1]=='\n') --len; + buf[len] = '\0'; if (len>0) res = buf; } @@ -57,8 +61,21 @@ getRecentName(char *start, char *end) } if (res==0) { + int old_fd = open(".", O_RDONLY); + *end = '\0'; - res = basename(start); + + if (old_fd!=-1 && + chdir(start)!=-1 && + getcwd(buf, sizeof buf)==buf) + start = buf; + + res = basename(start); + + if (old_fd!=-1) { + fchdir(old_fd); + close(old_fd); + } } return strdup(res);