From 4af1bba6d0f1da1b4d444ef3a936e2ef2c639a1e Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Wed, 17 Jan 2018 03:21:16 +0800 Subject: [PATCH] util: implement util.getSystemErrorName() Reimplement uv.errname() as internal/util.getSystemErrorName() to avoid the memory leaks caused by unknown error codes and avoid calling into C++ for the error names. Also expose it as a public API for external use. PR-URL: https://github.com/nodejs/node/pull/18186 Refs: http://docs.libuv.org/en/v1.x/errors.html#c.uv_err_name Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater --- doc/api/util.md | 20 +++++++ lib/child_process.js | 7 ++- lib/internal/util.js | 15 +++++ lib/util.js | 12 +--- src/uv.cc | 2 + test/parallel/test-child-process-execfile.js | 5 +- .../parallel/test-net-server-listen-handle.js | 7 ++- test/parallel/test-uv-errno.js | 59 +++++++++++-------- test/sequential/test-async-wrap-getasyncid.js | 3 +- 9 files changed, 87 insertions(+), 43 deletions(-) diff --git a/doc/api/util.md b/doc/api/util.md index 68f8487b1ba002..c9ce952af3885f 100644 --- a/doc/api/util.md +++ b/doc/api/util.md @@ -257,6 +257,25 @@ intended as a debugging tool. Some input values can have a significant performance overhead that can block the event loop. Use this function with care and never in a hot code path. +## util.getSystemErrorName(err) + + +* `err` {number} +* Returns: {string} + +Returns the string name for a numeric error code that comes from a Node.js API. +The mapping between error codes and error names is platform-dependent. +See [Common System Errors][] for the names of common errors. + +```js +fs.access('file/that/does/not/exist', (err) => { + const name = util.getSystemErrorName(err.errno); + console.error(name); // ENOENT +}); +``` + ## util.inherits(constructor, superConstructor)