lib, src: remove errno global
authorBen Noordhuis <info@bnoordhuis.nl>
Thu, 28 Feb 2013 16:50:14 +0000 (17:50 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Thu, 28 Feb 2013 22:11:47 +0000 (23:11 +0100)
Remove the errno global. It's a property on the process object now.

Fixes #3095.

lib/child_process.js
lib/dgram.js
lib/dns.js
lib/fs.js
lib/net.js
lib/tty.js
src/node.cc
src/node.js
test/common.js
test/simple/test-child-process-kill-throw.js
test/simple/test-tcp-wrap.js

index ef8c8009268a7f4f76407f2bf480de9902bdc415..4a9922e53e0a73397aa1022b168db87bb36841e7 100644 (file)
@@ -398,7 +398,9 @@ function setupChannel(target, channel) {
     var writeReq = channel.writeUtf8String(string, handle);
 
     if (!writeReq) {
-      var er = errnoException(errno, 'write', 'cannot write to IPC channel.');
+      var er = errnoException(process._errno,
+                              'write',
+                              'cannot write to IPC channel.');
       this.emit('error', er);
     }
 
@@ -710,7 +712,7 @@ function ChildProcess() {
     //
     // - spawn failures are reported with exitCode == -1
     //
-    var err = (exitCode == -1) ? errnoException(errno, 'spawn') : null;
+    var err = (exitCode == -1) ? errnoException(process._errno, 'spawn') : null;
 
     if (signalCode) {
       self.signalCode = signalCode;
@@ -866,7 +868,7 @@ ChildProcess.prototype.spawn = function(options) {
 
     this._handle.close();
     this._handle = null;
-    throw errnoException(errno, 'spawn');
+    throw errnoException(process._errno, 'spawn');
   }
 
   this.pid = this._handle.pid;
@@ -951,14 +953,14 @@ ChildProcess.prototype.kill = function(sig) {
       /* Success. */
       this.killed = true;
       return true;
-    } else if (errno == 'ESRCH') {
+    } else if (process._errno == 'ESRCH') {
       /* Already dead. */
-    } else if (errno == 'EINVAL' || errno == 'ENOSYS') {
+    } else if (process._errno == 'EINVAL' || process._errno == 'ENOSYS') {
       /* The underlying platform doesn't support this signal. */
-      throw errnoException(errno, 'kill');
+      throw errnoException(process._errno, 'kill');
     } else {
       /* Other error, almost certainly EPERM. */
-      this.emit('error', errnoException(errno, 'kill'));
+      this.emit('error', errnoException(process._errno, 'kill'));
     }
   }
 
index 222de73eb3c468d9b9bb09d753afff23075314fc..91c2243681cf42a7316f025fa10e452de4161008 100644 (file)
@@ -190,7 +190,7 @@ Socket.prototype.bind = function(port, address, callback) {
         return; // handle has been closed in the mean time
 
       if (self._handle.bind(ip, port || 0, /*flags=*/ 0)) {
-        self.emit('error', errnoException(errno, 'bind'));
+        self.emit('error', errnoException(process._errno, 'bind'));
         self._bindState = BIND_STATE_UNBOUND;
         // Todo: close?
         return;
@@ -274,7 +274,7 @@ Socket.prototype.send = function(buffer,
       }
       else {
         // don't emit as error, dgram_legacy.js compatibility
-        var err = errnoException(errno, 'send');
+        var err = errnoException(process._errno, 'send');
         process.nextTick(function() {
           callback(err);
         });
@@ -306,7 +306,7 @@ Socket.prototype.address = function() {
 
   var address = this._handle.getsockname();
   if (!address)
-    throw errnoException(errno, 'getsockname');
+    throw errnoException(process._errno, 'getsockname');
 
   return address;
 };
@@ -314,7 +314,7 @@ Socket.prototype.address = function() {
 
 Socket.prototype.setBroadcast = function(arg) {
   if (this._handle.setBroadcast((arg) ? 1 : 0)) {
-    throw errnoException(errno, 'setBroadcast');
+    throw errnoException(process._errno, 'setBroadcast');
   }
 };
 
@@ -325,7 +325,7 @@ Socket.prototype.setTTL = function(arg) {
   }
 
   if (this._handle.setTTL(arg)) {
-    throw errnoException(errno, 'setTTL');
+    throw errnoException(process._errno, 'setTTL');
   }
 
   return arg;
@@ -338,7 +338,7 @@ Socket.prototype.setMulticastTTL = function(arg) {
   }
 
   if (this._handle.setMulticastTTL(arg)) {
-    throw errnoException(errno, 'setMulticastTTL');
+    throw errnoException(process._errno, 'setMulticastTTL');
   }
 
   return arg;
@@ -349,7 +349,7 @@ Socket.prototype.setMulticastLoopback = function(arg) {
   arg = arg ? 1 : 0;
 
   if (this._handle.setMulticastLoopback(arg)) {
-    throw errnoException(errno, 'setMulticastLoopback');
+    throw errnoException(process._errno, 'setMulticastLoopback');
   }
 
   return arg; // 0.4 compatibility
@@ -365,7 +365,7 @@ Socket.prototype.addMembership = function(multicastAddress,
   }
 
   if (this._handle.addMembership(multicastAddress, interfaceAddress)) {
-    throw new errnoException(errno, 'addMembership');
+    throw new errnoException(process._errno, 'addMembership');
   }
 };
 
@@ -379,7 +379,7 @@ Socket.prototype.dropMembership = function(multicastAddress,
   }
 
   if (this._handle.dropMembership(multicastAddress, interfaceAddress)) {
-    throw new errnoException(errno, 'dropMembership');
+    throw new errnoException(process._errno, 'dropMembership');
   }
 };
 
@@ -402,7 +402,9 @@ Socket.prototype._stopReceiving = function() {
 
 function onMessage(handle, slab, start, len, rinfo) {
   var self = handle.owner;
-  if (!slab) return self.emit('error', errnoException(errno, 'recvmsg'));
+  if (!slab) {
+    return self.emit('error', errnoException(process._errno, 'recvmsg'));
+  }
   rinfo.size = len; // compatibility
   self.emit('message', slab.slice(start, start + len), rinfo);
 }
index fb7a8138c17ea33c69b97ee55e46e44d4d381a2c..86b01ce713c462d8a61d6c6fd10cbd3823020ef2 100644 (file)
@@ -121,14 +121,14 @@ exports.lookup = function(domain, family, callback) {
         callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4);
       }
     } else {
-      callback(errnoException(errno, 'getaddrinfo'));
+      callback(errnoException(process._errno, 'getaddrinfo'));
     }
   }
 
   var wrap = cares.getaddrinfo(domain, family);
 
   if (!wrap) {
-    throw errnoException(errno, 'getaddrinfo');
+    throw errnoException(process._errno, 'getaddrinfo');
   }
 
   wrap.oncomplete = onanswer;
@@ -146,14 +146,14 @@ function resolver(bindingName) {
       if (!status) {
         callback(null, result);
       } else {
-        callback(errnoException(errno, bindingName));
+        callback(errnoException(process._errno, bindingName));
       }
     }
 
     callback = makeAsync(callback);
     var wrap = binding(name, onanswer);
     if (!wrap) {
-      throw errnoException(errno, bindingName);
+      throw errnoException(process._errno, bindingName);
     }
 
     callback.immediately = true;
index 78940a8304a27cf7e7d2971a4f7749e97528f466..8188f7170000b5585b67970521550d8f33b9419c 100644 (file)
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -978,7 +978,7 @@ function FSWatcher() {
   this._handle.onchange = function(status, event, filename) {
     if (status) {
       self._handle.close();
-      self.emit('error', errnoException(errno, 'watch'));
+      self.emit('error', errnoException(process._errno, 'watch'));
     } else {
       self.emit('change', event, filename);
     }
@@ -992,7 +992,7 @@ FSWatcher.prototype.start = function(filename, persistent) {
 
   if (r) {
     this._handle.close();
-    throw errnoException(errno, 'watch');
+    throw errnoException(process._errno, 'watch');
   }
 };
 
index 714e5bb0a03945a1cedebd144c5118694b2589c7..d5e85b17e80481cb72cda028ba75a5cb549b66a3 100644 (file)
@@ -198,7 +198,7 @@ function onSocketFinish() {
   var shutdownReq = this._handle.shutdown();
 
   if (!shutdownReq)
-    return this._destroy(errnoException(errno, 'shutdown'));
+    return this._destroy(errnoException(process._errno, 'shutdown'));
 
   shutdownReq.oncomplete = afterShutdown;
 }
@@ -351,7 +351,7 @@ Socket.prototype._read = function(n, callback) {
     this._handle.reading = true;
     var r = this._handle.readStart();
     if (r)
-      this._destroy(errnoException(errno, 'read'));
+      this._destroy(errnoException(process._errno, 'read'));
   } else {
     debug('readStart already has been called.');
   }
@@ -453,7 +453,7 @@ function onread(buffer, offset, length) {
   timers.active(self);
 
   var end = offset + length;
-  debug('onread', global.errno, offset, length, end);
+  debug('onread', process._errno, offset, length, end);
 
   if (buffer) {
     debug('got data');
@@ -484,10 +484,10 @@ function onread(buffer, offset, length) {
       debug('readStop');
       var r = handle.readStop();
       if (r)
-        self._destroy(errnoException(errno, 'read'));
+        self._destroy(errnoException(process._errno, 'read'));
     }
 
-  } else if (errno == 'EOF') {
+  } else if (process._errno == 'EOF') {
     debug('EOF');
 
     if (self._readableState.length === 0)
@@ -503,9 +503,9 @@ function onread(buffer, offset, length) {
     // procedure. No need to wait for all the data to be consumed.
     self.emit('_socketEnd');
   } else {
-    debug('error', errno);
+    debug('error', process._errno);
     // Error
-    self._destroy(errnoException(errno, 'read'));
+    self._destroy(errnoException(process._errno, 'read'));
   }
 }
 
@@ -594,7 +594,7 @@ Socket.prototype._write = function(dataEncoding, cb) {
   var writeReq = createWriteReq(this._handle, data, enc);
 
   if (!writeReq || typeof writeReq !== 'object')
-    return this._destroy(errnoException(errno, 'write'), cb);
+    return this._destroy(errnoException(process._errno, 'write'), cb);
 
   writeReq.oncomplete = afterWrite;
   this._bytesDispatched += writeReq.bytes;
@@ -661,8 +661,8 @@ function afterWrite(status, handle, req) {
   }
 
   if (status) {
-    debug('write failure', errnoException(errno, 'write'));
-    self._destroy(errnoException(errno, 'write'), req.cb);
+    debug('write failure', errnoException(process._errno, 'write'));
+    self._destroy(errnoException(process._errno, 'write'), req.cb);
     return;
   }
 
@@ -691,7 +691,7 @@ function connect(self, address, port, addressType, localAddress) {
     }
 
     if (r) {
-      self._destroy(errnoException(errno, 'bind'));
+      self._destroy(errnoException(process._errno, 'bind'));
       return;
     }
   }
@@ -708,7 +708,7 @@ function connect(self, address, port, addressType, localAddress) {
   if (connectReq !== null) {
     connectReq.oncomplete = afterConnect;
   } else {
-    self._destroy(errnoException(errno, 'connect'));
+    self._destroy(errnoException(process._errno, 'connect'));
   }
 }
 
@@ -834,7 +834,7 @@ function afterConnect(status, handle, req, readable, writable) {
 
   } else {
     self._connecting = false;
-    self._destroy(errnoException(errno, 'connect'));
+    self._destroy(errnoException(process._errno, 'connect'));
   }
 }
 
@@ -922,7 +922,7 @@ var createServerHandle = exports._createServerHandle =
       default:
         // Not a fd we can listen on.  This will trigger an error.
         debug('listen invalid fd=' + fd + ' type=' + type);
-        global.errno = 'EINVAL'; // hack, callers expect that errno is set
+        process._errno = 'EINVAL'; // hack, callers expect that errno is set
         handle = null;
         break;
     }
@@ -969,7 +969,7 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
     debug('_listen2: create a handle');
     self._handle = createServerHandle(address, port, addressType, fd);
     if (!self._handle) {
-      var error = errnoException(errno, 'listen');
+      var error = errnoException(process._errno, 'listen');
       process.nextTick(function() {
         self.emit('error', error);
       });
@@ -988,7 +988,7 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
   r = self._handle.listen(backlog || 511);
 
   if (r) {
-    var ex = errnoException(errno, 'listen');
+    var ex = errnoException(process._errno, 'listen');
     self._handle.close();
     self._handle = null;
     process.nextTick(function() {
@@ -1096,7 +1096,7 @@ function onconnection(clientHandle) {
   debug('onconnection');
 
   if (!clientHandle) {
-    self.emit('error', errnoException(errno, 'accept'));
+    self.emit('error', errnoException(process._errno, 'accept'));
     return;
   }
 
index ccc1ebee28bc56222f35a9e4985a4eb789672b44..98d498a17c4f4607334e7f75759c9eb0caf83b68 100644 (file)
@@ -94,7 +94,7 @@ WriteStream.prototype._refreshSize = function() {
   var oldRows = this.rows;
   var winSize = this._handle.getWindowSize();
   if (!winSize) {
-    this.emit('error', errnoException(errno, 'getWindowSize'));
+    this.emit('error', errnoException(process._errno, 'getWindowSize'));
     return;
   }
   var newCols = winSize[0];
index 74f299394f2dafeea517d349d52a17eccf7125bf..847ebaffb26a5a52a15ebf4d36dbe89523c89b89 100644 (file)
@@ -1046,17 +1046,17 @@ MakeCallback(const Handle<Object> object,
 void SetErrno(uv_err_t err) {
   HandleScope scope;
 
+  static Persistent<String> errno_symbol;
   if (errno_symbol.IsEmpty()) {
-    errno_symbol = NODE_PSYMBOL("errno");
+    errno_symbol = NODE_PSYMBOL("_errno");
   }
 
   if (err.code == UV_UNKNOWN) {
     char errno_buf[100];
     snprintf(errno_buf, 100, "Unknown system errno %d", err.sys_errno_);
-    Context::GetCurrent()->Global()->Set(errno_symbol, String::New(errno_buf));
+    process->Set(errno_symbol, String::New(errno_buf));
   } else {
-    Context::GetCurrent()->Global()->Set(errno_symbol,
-                                         String::NewSymbol(uv_err_name(err)));
+    process->Set(errno_symbol, String::NewSymbol(uv_err_name(err)));
   }
 }
 
index 9d30cbaf6e58875782aee6459278c6785e776b90..90c681255b74addf866a1bb4bd1a0cc6543deb80 100644 (file)
       }
 
       if (r) {
-        throw errnoException(errno, 'kill');
+        throw errnoException(process._errno, 'kill');
       }
 
       return true;
         var r = wrap.start(signum);
         if (r) {
           wrap.close();
-          throw errnoException(errno, 'uv_signal_start');
+          throw errnoException(process._errno, 'uv_signal_start');
         }
 
         signalWraps[type] = wrap;
index d529ab2d70b8f1c4575c29995981ab320094ca78..28faaf97885c7ebabaa576e561c8075f0d5952d7 100644 (file)
@@ -101,10 +101,6 @@ process.on('exit', function() {
                       process,
                       global];
 
-  if (global.errno) {
-    knownGlobals.push(errno);
-  }
-
   if (global.gc) {
     knownGlobals.push(gc);
   }
index f85bf515497eb529985e0a43687caa6610b87697..4beba7e7a21d728a459b0de95860a8ef402be4ee 100644 (file)
@@ -32,7 +32,7 @@ if (process.argv[2] === 'child') {
   child.on('exit', function() {
     child._handle = {
       kill: function() {
-        global.errno = 42;
+        process._errno = 42;
         return -1;
       }
     };
index 1e9e115a9468aecb64573b81a7c0af511c0a417d..10f7038c8315166a2e6c0edc7f28d99800568079 100644 (file)
@@ -33,7 +33,7 @@ assert.equal(0, r);
 // Should not be able to bind to the same port again
 var r = handle.bind('0.0.0.0', common.PORT);
 assert.equal(-1, r);
-console.log(errno);
-assert.equal(errno, 'EINVAL');
+console.log(process._errno);
+assert.equal(process._errno, 'EINVAL');
 
 handle.close();