- if ((f = fcntl(sk, F_GETFL)) < 0 ||
- (fd = fcntl(sk, F_GETFD)) < 0 ||
- fcntl(nsk, F_SETFL, f) < 0 ||
- dup2(nsk, sk) < 0) {
+ if (tmp)
+ *tmp = nsk;
+ else {
+ if ((f = fcntl(sk, F_GETFL)) < 0 ||
+ (fd = fcntl(sk, F_GETFD)) < 0 ||
+ fcntl(nsk, F_SETFL, f) < 0 ||
+ dup2(nsk, sk) < 0) {
+ close(nsk);
+ return (-1);
+ }
+ unlink(sun.sun_path);