summaryrefslogtreecommitdiff
path: root/osdep
diff options
context:
space:
mode:
Diffstat (limited to 'osdep')
-rw-r--r--osdep/OSXEthernetTap.cpp29
1 files changed, 13 insertions, 16 deletions
diff --git a/osdep/OSXEthernetTap.cpp b/osdep/OSXEthernetTap.cpp
index 05eca4f8..d1c82fce 100644
--- a/osdep/OSXEthernetTap.cpp
+++ b/osdep/OSXEthernetTap.cpp
@@ -344,23 +344,20 @@ OSXEthernetTap::OSXEthernetTap(
Mutex::Lock _gl(globalTapCreateLock);
- if (stat("/dev/zt0",&stattmp)) {
- if (homePath) {
- long kextpid = (long)vfork();
- if (kextpid == 0) {
- ::chdir(homePath);
- OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
- ::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
- ::_exit(-1);
- } else if (kextpid > 0) {
- int exitcode = -1;
- ::waitpid(kextpid,&exitcode,0);
- }
- ::usleep(500); // give tap device driver time to start up and try again
- if (stat("/dev/zt0",&stattmp))
- throw std::runtime_error("/dev/zt# tap devices do not exist and cannot load tap.kext");
+ if (::stat("/dev/zt0",&stattmp)) {
+ long kextpid = (long)vfork();
+ if (kextpid == 0) {
+ ::chdir(homePath);
+ OSUtils::redirectUnixOutputs("/dev/null",(const char *)0);
+ ::execl("/sbin/kextload","/sbin/kextload","-q","-repository",homePath,"tap.kext",(const char *)0);
+ ::_exit(-1);
+ } else if (kextpid > 0) {
+ int exitcode = -1;
+ ::waitpid(kextpid,&exitcode,0);
}
- throw std::runtime_error("/dev/zt# tap devices do not exist and tap.kext not available");
+ ::usleep(500); // give tap device driver time to start up and try again
+ if (::stat("/dev/zt0",&stattmp))
+ throw std::runtime_error("/dev/zt# tap devices do not exist and cannot load tap.kext");
}
// Try to reopen the last device we had, if we had one and it's still unused.