[PATCH] D27475: [libFuzzer] Diff 17 - Implement DirName() for Windows.

Marcos Pividori via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 6 14:46:56 PST 2016


@zturner @amccarth Thanks, you are right.
I think we could use Adrian's solution since the random access operator []
returns both const and non-const references. So, we can get a non-const
pointer.
I will update the diff.

On Tue, Dec 6, 2016 at 2:15 PM, Zachary Turner <zturner at google.com> wrote:

> &result[0] is const, you're going to have to const cast it to do that
> unfortunately.  Regardless though, manual new / delete is almost never the
> right solution.  For example, the original code could be replaced with
>
> ```
> std::vector<char> Buffer(FileName.begin(), FileName.end());
> Buffer.push_back(0);
> memcpy(&Buffer[0], FileName.data(), FileName.size());
> PathRemoveFileSpecA(&Buffer[0]);
> return std::string(&Buffer[0]);
> ```
>
> and it would be better than manually new'ing and deleting.  Unless you can
> accept the const_cast (which I'm not convinced we should in this case), the
> only alternative is stack allocating the buffer.
>
> BTW, if we could use llvm then this would be a perfect use case for
> StringRef :)  Oh well
>
> On Tue, Dec 6, 2016 at 2:03 PM Adrian McCarthy via Phabricator <
> reviews at reviews.llvm.org> wrote:
>
>> amccarth added inline comments.
>>
>>
>> ================
>> Comment at: lib/Fuzzer/FuzzerIOWindows.cpp:144
>>  std::string DirName(const std::string &FileName) {
>> -  assert(0 && "Unimplemented");
>> +  char *Tmp = new char[FileName.size() + 1];
>> +  memcpy(Tmp, FileName.c_str(), FileName.size() + 1);
>> ----------------
>> Instead of managing memory yourself, I would just use another string as
>> the non-const buffer.  PathRemoveFileSpace may replace one of the
>> characters with '\0', so all you have to do is resize the result.
>>
>>     std::string result = FileName;
>>     PathRemoveFileSpecA(&result[0]);
>>     result.resize(std::strlen(result.c_str());
>>     return result;
>>
>>
>>
>> Repository:
>>   rL LLVM
>>
>> https://reviews.llvm.org/D27475
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161206/a27ce42f/attachment.html>


More information about the llvm-commits mailing list