Skip to content

Commit aab05a8

Browse files
author
Benjamin Pasero
committed
Hot Exit: avoid direct calls to fs.readdir()/fs.readdirSync() (fixes microsoft#14055)
1 parent 4dc59b7 commit aab05a8

2 files changed

Lines changed: 14 additions & 18 deletions

File tree

src/vs/base/node/extfs.ts

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,21 @@ import paths = require('path');
1616

1717
const loop = flow.loop;
1818

19+
export function readdirSync(path: string): string[] {
20+
// Mac: uses NFD unicode form on disk, but we want NFC
21+
// See also https://github.com/nodejs/node/issues/2165
22+
if (platform.isMacintosh) {
23+
return fs.readdirSync(path).map(c => strings.normalizeNFC(c));
24+
}
25+
26+
return fs.readdirSync(path);
27+
}
28+
1929
export function readdir(path: string, callback: (error: Error, files: string[]) => void): void {
2030
// Mac: uses NFD unicode form on disk, but we want NFC
2131
// See also https://github.com/nodejs/node/issues/2165
2232
if (platform.isMacintosh) {
23-
return readdirNormalize(path, (error, children) => {
33+
return fs.readdir(path, (error, children) => {
2434
if (error) {
2535
return callback(error, null);
2636
}
@@ -29,22 +39,7 @@ export function readdir(path: string, callback: (error: Error, files: string[])
2939
});
3040
}
3141

32-
return readdirNormalize(path, callback);
33-
}
34-
35-
function readdirNormalize(path: string, callback: (error: Error, files: string[]) => void): void {
36-
fs.readdir(path, (error, children) => {
37-
if (error) {
38-
return callback(error, null);
39-
}
40-
41-
// Bug in node: In some environments we get "." and ".." as entries from the call to readdir().
42-
// For example Sharepoint via WebDav on Windows includes them. We never want those
43-
// entries in the result set though because they are not valid children of the folder
44-
// for our concerns.
45-
// See https://github.com/nodejs/node/issues/4002
46-
return callback(null, children.filter(c => c !== '.' && c !== '..'));
47-
});
42+
return fs.readdir(path, callback);
4843
}
4944

5045
export function mkdirp(path: string, mode: number, callback: (error: Error) => void): void {

src/vs/platform/backup/node/backupService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import * as crypto from 'crypto';
1010
import * as arrays from 'vs/base/common/arrays';
1111
import fs = require('fs');
1212
import pfs = require('vs/base/node/pfs');
13+
import { readdirSync } from 'vs/base/node/extfs';
1314
import Uri from 'vs/base/common/uri';
1415
import { IBackupService } from 'vs/platform/backup/common/backup';
1516
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
@@ -109,7 +110,7 @@ export class BackupService implements IBackupService {
109110

110111
// Allow sync here as it's only used in workbench initialization's critical path
111112
try {
112-
return fs.readdirSync(untitledDir).map(file => path.join(untitledDir, file));
113+
return readdirSync(untitledDir).map(file => path.join(untitledDir, file));
113114
} catch (ex) {
114115
return [];
115116
}

0 commit comments

Comments
 (0)