Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: runtime/bin/directory.h

Issue 1781883002: Fixes some memory leaks in //runtime/bin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fix tests on Windows Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/dartutils.cc ('k') | runtime/bin/directory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/directory.h
diff --git a/runtime/bin/directory.h b/runtime/bin/directory.h
index 9402031054dd565791efe8d23b37cd1744f21b0e..e37aa769dc03741aa435f18dc1ab3d8d871a52d0 100644
--- a/runtime/bin/directory.h
+++ b/runtime/bin/directory.h
@@ -25,9 +25,7 @@ enum ListType {
class PathBuffer {
public:
PathBuffer();
- ~PathBuffer() {
- free(data_);
- }
+ ~PathBuffer();
bool Add(const char* name);
bool AddW(const wchar_t* name);
@@ -35,15 +33,18 @@ class PathBuffer {
char* AsString() const;
wchar_t* AsStringW() const;
- void Reset(int new_length);
+ // Makes a scope allocated copy of the string.
+ const char* AsScopedString() const;
+
+ void Reset(intptr_t new_length);
- int length() const {
+ intptr_t length() const {
return length_;
}
private:
void* data_;
- int length_;
+ intptr_t length_;
DISALLOW_COPY_AND_ASSIGN(PathBuffer);
};
@@ -112,10 +113,10 @@ class DirectoryListing {
}
}
- virtual bool HandleDirectory(char* dir_name) = 0;
- virtual bool HandleFile(char* file_name) = 0;
- virtual bool HandleLink(char* link_name) = 0;
- virtual bool HandleError(const char* dir_name) = 0;
+ virtual bool HandleDirectory(const char* dir_name) = 0;
+ virtual bool HandleFile(const char* file_name) = 0;
+ virtual bool HandleLink(const char* link_name) = 0;
+ virtual bool HandleError() = 0;
virtual void HandleDone() {}
void Push(DirectoryListingEntry* directory) {
@@ -145,8 +146,8 @@ class DirectoryListing {
return follow_links_;
}
- char* CurrentPath() {
- return path_buffer_.AsString();
+ const char* CurrentPath() {
+ return path_buffer_.AsScopedString();
}
PathBuffer& path_buffer() {
@@ -182,10 +183,10 @@ class AsyncDirectoryListing : public DirectoryListing {
: DirectoryListing(dir_name, recursive, follow_links) {}
virtual ~AsyncDirectoryListing() {}
- virtual bool HandleDirectory(char* dir_name);
- virtual bool HandleFile(char* file_name);
- virtual bool HandleLink(char* file_name);
- virtual bool HandleError(const char* dir_name);
+ virtual bool HandleDirectory(const char* dir_name);
+ virtual bool HandleFile(const char* file_name);
+ virtual bool HandleLink(const char* file_name);
+ virtual bool HandleError();
virtual void HandleDone();
void SetArray(CObjectArray* array, intptr_t length) {
@@ -200,7 +201,7 @@ class AsyncDirectoryListing : public DirectoryListing {
}
private:
- bool AddFileSystemEntityToResponse(Response response, char* arg);
+ bool AddFileSystemEntityToResponse(Response response, const char* arg);
CObjectArray* array_;
intptr_t index_;
intptr_t length_;
@@ -226,10 +227,10 @@ class SyncDirectoryListing: public DirectoryListing {
DartUtils::GetDartType(DartUtils::kIOLibURL, "Link");
}
virtual ~SyncDirectoryListing() {}
- virtual bool HandleDirectory(char* dir_name);
- virtual bool HandleFile(char* file_name);
- virtual bool HandleLink(char* file_name);
- virtual bool HandleError(const char* dir_name);
+ virtual bool HandleDirectory(const char* dir_name);
+ virtual bool HandleFile(const char* file_name);
+ virtual bool HandleLink(const char* file_name);
+ virtual bool HandleError();
private:
Dart_Handle results_;
@@ -252,11 +253,18 @@ class Directory {
static void List(DirectoryListing* listing);
static ExistsResult Exists(const char* path);
- static char* Current();
+
+ // Returns the current working directory. The caller must call
+ // free() on the result.
+ static char* CurrentNoScope();
+
+ // Returns the current working directory. The returned string is allocated
+ // with Dart_ScopeAllocate(). It lasts only as long as the current API scope.
+ static const char* Current();
+ static const char* SystemTemp();
+ static const char* CreateTemp(const char* path);
static bool SetCurrent(const char* path);
static bool Create(const char* path);
- static char* SystemTemp();
- static char* CreateTemp(const char* path);
static bool Delete(const char* path, bool recursive);
static bool Rename(const char* path, const char* new_path);
« no previous file with comments | « runtime/bin/dartutils.cc ('k') | runtime/bin/directory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698