| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- 'use strict';
 
- var fs = require('fs');
 
- var parse = require('parse-passwd');
 
- function homedir() {
 
-   // The following logic is from looking at logic used in the different platform
 
-   // versions of the uv_os_homedir function found in https://github.com/libuv/libuv
 
-   // This is the function used in modern versions of node.js
 
-   if (process.platform === 'win32') {
 
-     // check the USERPROFILE first
 
-     if (process.env.USERPROFILE) {
 
-       return process.env.USERPROFILE;
 
-     }
 
-     // check HOMEDRIVE and HOMEPATH
 
-     if (process.env.HOMEDRIVE && process.env.HOMEPATH) {
 
-       return process.env.HOMEDRIVE + process.env.HOMEPATH;
 
-     }
 
-     // fallback to HOME
 
-     if (process.env.HOME) {
 
-       return process.env.HOME;
 
-     }
 
-     return null;
 
-   }
 
-   // check HOME environment variable first
 
-   if (process.env.HOME) {
 
-     return process.env.HOME;
 
-   }
 
-   // on linux platforms (including OSX) find the current user and get their homedir from the /etc/passwd file
 
-   var passwd = tryReadFileSync('/etc/passwd');
 
-   var home = find(parse(passwd), getuid());
 
-   if (home) {
 
-     return home;
 
-   }
 
-   // fallback to using user environment variables
 
-   var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME;
 
-   if (!user) {
 
-     return null;
 
-   }
 
-   if (process.platform === 'darwin') {
 
-     return '/Users/' + user;
 
-   }
 
-   return '/home/' + user;
 
- }
 
- function find(arr, uid) {
 
-   var len = arr.length;
 
-   for (var i = 0; i < len; i++) {
 
-     if (+arr[i].uid === uid) {
 
-       return arr[i].homedir;
 
-     }
 
-   }
 
- }
 
- function getuid() {
 
-   if (typeof process.geteuid === 'function') {
 
-     return process.geteuid();
 
-   }
 
-   return process.getuid();
 
- }
 
- function tryReadFileSync(fp) {
 
-   try {
 
-     return fs.readFileSync(fp, 'utf8');
 
-   } catch (err) {
 
-     return '';
 
-   }
 
- }
 
- module.exports = homedir;
 
 
  |