@@ -1568,6 +1568,38 @@ static void Rename(const FunctionCallbackInfo<Value>& args) {
15681568 }
15691569}
15701570
1571+ static void RenameSync (const FunctionCallbackInfo<Value>& args) {
1572+ Environment* env = Environment::GetCurrent (args);
1573+ Isolate* isolate = env->isolate ();
1574+
1575+ CHECK_EQ (args.Length (), 2 );
1576+
1577+ BufferValue old_path (isolate, args[0 ]);
1578+ CHECK_NOT_NULL (*old_path);
1579+ auto view_old_path = old_path.ToStringView ();
1580+ THROW_IF_INSUFFICIENT_PERMISSIONS (
1581+ env, permission::PermissionScope::kFileSystemRead , view_old_path);
1582+ THROW_IF_INSUFFICIENT_PERMISSIONS (
1583+ env, permission::PermissionScope::kFileSystemWrite , view_old_path);
1584+
1585+ BufferValue new_path (isolate, args[1 ]);
1586+ CHECK_NOT_NULL (*new_path);
1587+ THROW_IF_INSUFFICIENT_PERMISSIONS (
1588+ env,
1589+ permission::PermissionScope::kFileSystemWrite ,
1590+ new_path.ToStringView ());
1591+
1592+ uv_fs_t req;
1593+ auto cleanup = OnScopeLeave ([&req]() { uv_fs_req_cleanup (&req); });
1594+ FS_SYNC_TRACE_BEGIN (rename);
1595+ int err = uv_fs_rename (nullptr , &req, *old_path, *new_path, nullptr );
1596+ FS_SYNC_TRACE_END (rename);
1597+
1598+ if (err < 0 ) {
1599+ return env->ThrowUVException (err, " rename" , nullptr , *old_path, *new_path);
1600+ }
1601+ }
1602+
15711603static void FTruncate (const FunctionCallbackInfo<Value>& args) {
15721604 Environment* env = Environment::GetCurrent (args);
15731605
@@ -3395,6 +3427,7 @@ static void CreatePerIsolateProperties(IsolateData* isolate_data,
33953427 SetMethod (isolate, target, " fdatasync" , Fdatasync);
33963428 SetMethod (isolate, target, " fsync" , Fsync);
33973429 SetMethod (isolate, target, " rename" , Rename);
3430+ SetMethod (isolate, target, " renameSync" , RenameSync);
33983431 SetMethod (isolate, target, " ftruncate" , FTruncate);
33993432 SetMethod (isolate, target, " rmdir" , RMDir);
34003433 SetMethod (isolate, target, " mkdir" , MKDir);
@@ -3521,6 +3554,7 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
35213554 registry->Register (Fdatasync);
35223555 registry->Register (Fsync);
35233556 registry->Register (Rename);
3557+ registry->Register (RenameSync);
35243558 registry->Register (FTruncate);
35253559 registry->Register (RMDir);
35263560 registry->Register (MKDir);
0 commit comments