aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-11-24 17:28:19 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-11-24 17:46:08 +0000
commit4e640edf7642cbc7bd2cc5d308b95cb14f8e236a (patch)
treef5180878a23c12e9ddbb47008f9d9464af08b0b0 /searchlib/src
parent81affee11ad6a020b3f6a7381c6e6cc3f7cb5123 (diff)
Use c++11 strings instead of old c-style manual string manipulation.
Diffstat (limited to 'searchlib/src')
-rw-r--r--searchlib/src/vespa/searchlib/util/dirtraverse.cpp51
-rw-r--r--searchlib/src/vespa/searchlib/util/dirtraverse.h13
2 files changed, 23 insertions, 41 deletions
diff --git a/searchlib/src/vespa/searchlib/util/dirtraverse.cpp b/searchlib/src/vespa/searchlib/util/dirtraverse.cpp
index 6ab5d42d350..31b39ad0d09 100644
--- a/searchlib/src/vespa/searchlib/util/dirtraverse.cpp
+++ b/searchlib/src/vespa/searchlib/util/dirtraverse.cpp
@@ -15,17 +15,16 @@ static int cmpname(const void *av, const void *bv)
*(const DirectoryTraverse::Name *const *) av;
const DirectoryTraverse::Name *const b =
*(const DirectoryTraverse::Name *const *) bv;
- return strcmp(a->_name, b->_name);
+ return strcmp(a->_name.c_str(), b->_name.c_str());
}
}
DirectoryTraverse::Name::Name(const char *name)
- : _name(nullptr),
+ : _name(name),
_next(nullptr)
{
- _name = strdup(name);
}
-DirectoryTraverse::Name::~Name() { free(_name); }
+DirectoryTraverse::Name::~Name() = default;
DirectoryTraverse::Name *
DirectoryTraverse::Name::sort(Name *head, int count)
@@ -132,19 +131,15 @@ DirectoryTraverse::ScanSingleDir()
assert(_nameHead == nullptr);
assert(_nameCount == 0);
delete _curDir;
- free(_fullDirName);
- _fullDirName = nullptr;
+ _fullDirName.clear();
_curDir = UnQueueDir();
if (_curDir == nullptr)
return;
- _fullDirName = (char *) malloc(strlen(_baseDir) + 1 +
- strlen(_curDir->_name) + 1);
- strcpy(_fullDirName, _baseDir);
- if (_curDir->_name[0] != '\0') {
- strcat(_fullDirName, "/");
- strcat(_fullDirName, _curDir->_name);
+ _fullDirName = _baseDir;
+ if ( ! _curDir->_name.empty()) {
+ _fullDirName += "/" + _curDir->_name;
}
- FastOS_DirectoryScan *dirscan = new FastOS_DirectoryScan(_fullDirName);
+ FastOS_DirectoryScan *dirscan = new FastOS_DirectoryScan(_fullDirName.c_str());
while (dirscan->ReadNext()) {
const char *name = dirscan->GetName();
if (strcmp(name, ".") == 0 ||
@@ -171,13 +166,8 @@ DirectoryTraverse::NextName()
if (_nameHead == nullptr)
return false;
_curName = UnQueueName();
- free(_fullName);
- _fullName = (char *) malloc(strlen(_fullDirName) + 1 +
- strlen(_curName->_name) + 1);
- strcpy(_fullName, _fullDirName);
- _relName = _fullName + strlen(_baseDir) + 1;
- strcat(_fullName, "/");
- strcat(_fullName, _curName->_name);
+ _fullName = _fullDirName + "/" + _curName->_name;
+ _relName = _fullName.c_str() + (_baseDir.size() + 1);
return true;
}
@@ -193,13 +183,8 @@ DirectoryTraverse::NextRemoveDir()
return false;
curName = _rdirHead;
_rdirHead = curName->_next;
- free(_fullName);
- _fullName = (char *) malloc(strlen(_baseDir) + 1 +
- strlen(curName->_name) + 1);
- strcpy(_fullName, _baseDir);
- _relName = _fullName + strlen(_baseDir) + 1;
- strcat(_fullName, "/");
- strcat(_fullName, curName->_name);
+ _fullName = _baseDir + "/" + curName->_name;
+ _relName = _fullName.c_str() + _baseDir.size() + 1;
delete curName;
return true;
}
@@ -226,7 +211,7 @@ DirectoryTraverse::RemoveTree()
const char *fullname = GetFullName();
FastOS_File::RemoveDirectory(fullname);
}
- FastOS_File::RemoveDirectory(_baseDir);
+ FastOS_File::RemoveDirectory(_baseDir.c_str());
return true;
}
@@ -252,7 +237,7 @@ DirectoryTraverse::GetTreeSize()
}
DirectoryTraverse::DirectoryTraverse(const char *baseDir)
- : _baseDir(nullptr),
+ : _baseDir(baseDir),
_nameHead(nullptr),
_nameCount(0),
_dirHead(nullptr),
@@ -261,11 +246,10 @@ DirectoryTraverse::DirectoryTraverse(const char *baseDir)
_rdirHead(nullptr),
_curDir(nullptr),
_curName(nullptr),
- _fullDirName(nullptr),
- _fullName(nullptr),
+ _fullDirName(),
+ _fullName(),
_relName(nullptr)
{
- _baseDir = strdup(baseDir);
QueueDir("");
ScanSingleDir();
}
@@ -273,9 +257,6 @@ DirectoryTraverse::DirectoryTraverse(const char *baseDir)
DirectoryTraverse::~DirectoryTraverse()
{
- free(_fullDirName);
- free(_fullName);
- free(_baseDir);
delete _curDir;
delete _curName;
PushPushedDirs();
diff --git a/searchlib/src/vespa/searchlib/util/dirtraverse.h b/searchlib/src/vespa/searchlib/util/dirtraverse.h
index bff7aae705a..4a96ad0935d 100644
--- a/searchlib/src/vespa/searchlib/util/dirtraverse.h
+++ b/searchlib/src/vespa/searchlib/util/dirtraverse.h
@@ -3,6 +3,7 @@
#pragma once
#include <cstdint>
+#include <string>
namespace search {
@@ -20,14 +21,14 @@ public:
Name& operator=(const Name &);
public:
- char *_name;
+ std::string _name;
Name *_next;
explicit Name(const char *name);
~Name();
static Name *sort(Name *head, int count);
};
private:
- char *_baseDir;
+ std::string _baseDir;
Name *_nameHead;
int _nameCount;
Name *_dirHead;
@@ -36,11 +37,11 @@ private:
Name *_rdirHead;
Name *_curDir;
Name *_curName;
- char *_fullDirName;
- char *_fullName;
- char *_relName;
+ std::string _fullDirName;
+ std::string _fullName;
+ const char *_relName;
public:
- const char *GetFullName() const { return _fullName; }
+ const char *GetFullName() const { return _fullName.c_str(); }
const char *GetRelName() const { return _relName; }
void QueueDir(const char *name);
void PushDir(const char *name);