@@ -168,6 +168,7 @@ typedef std::map<std::string, std::string> XattrMap;
168
168
const char * gpfs_dl_path = std::getenv(" GPFS_DL_PATH" );
169
169
170
170
int gpfs_lib_file_exists = -1 ;
171
+ long PASSWD_BUF_SIZE = -1 ;
171
172
172
173
static int (*dlsym_gpfs_fcntl)(gpfs_file_t file, void * arg) = 0;
173
174
@@ -1399,26 +1400,22 @@ struct GetPwName : public FSWorker
1399
1400
std::string _user;
1400
1401
struct passwd pwd;
1401
1402
struct passwd *_getpwnam_res;
1402
- char *buf;
1403
1403
GetPwName (const Napi::CallbackInfo& info)
1404
1404
: FSWorker(info)
1405
1405
{
1406
1406
_user = info[1 ].As <Napi::String>();
1407
+ _getpwnam_res = NULL ;
1407
1408
Begin (XSTR () << " GetPwName " << DVAL (_user));
1408
1409
}
1409
1410
virtual void Work ()
1410
1411
{
1411
- long bufsize = sysconf (_SC_GETPW_R_SIZE_MAX);
1412
- if (bufsize == -1 ) {
1413
- bufsize = 16384 ;
1414
- }
1412
+ std::unique_ptr<char []> buf = std::unique_ptr<char []>(new char [PASSWD_BUF_SIZE]);
1415
1413
1416
- buf = (char *)malloc (bufsize);
1417
1414
if (buf == NULL ) {
1418
1415
SetSyscallError ();
1419
1416
return ;
1420
1417
}
1421
- int rc = getpwnam_r (_user.c_str (), &pwd, buf, bufsize , &_getpwnam_res);
1418
+ int rc = getpwnam_r (_user.c_str (), &pwd, buf. get (), PASSWD_BUF_SIZE , &_getpwnam_res);
1422
1419
if (rc != 0 ) {
1423
1420
SetSyscallError ();
1424
1421
return ;
@@ -1434,12 +1431,6 @@ struct GetPwName : public FSWorker
1434
1431
set_getpwnam_res (env, res, *_getpwnam_res);
1435
1432
_deferred.Resolve (res);
1436
1433
}
1437
-
1438
- ~GetPwName ()
1439
- {
1440
- free (buf);
1441
- }
1442
-
1443
1434
};
1444
1435
1445
1436
struct FileWrap : public Napi ::ObjectWrap<FileWrap>
@@ -2424,6 +2415,12 @@ fs_napi(Napi::Env env, Napi::Object exports)
2424
2415
exports_fs[" DT_DIR" ] = Napi::Number::New (env, DT_DIR);
2425
2416
exports_fs[" DT_LNK" ] = Napi::Number::New (env, DT_LNK);
2426
2417
exports_fs[" PLATFORM_IOV_MAX" ] = Napi::Number::New (env, IOV_MAX);
2418
+ long passwd_bufsize = sysconf (_SC_GETPW_R_SIZE_MAX);
2419
+ if (passwd_bufsize == -1 ) {
2420
+ passwd_bufsize = 16384 ;
2421
+ }
2422
+ PASSWD_BUF_SIZE = passwd_bufsize;
2423
+
2427
2424
2428
2425
#ifdef O_DIRECT
2429
2426
exports_fs[" O_DIRECT" ] = Napi::Number::New (env, O_DIRECT);
@@ -2437,6 +2434,7 @@ fs_napi(Napi::Env env, Napi::Object exports)
2437
2434
exports_fs[" set_log_config" ] = Napi::Function::New (env, set_log_config);
2438
2435
2439
2436
exports[" fs" ] = exports_fs;
2437
+
2440
2438
}
2441
2439
2442
2440
} // namespace noobaa
0 commit comments