[LLVMdev] [llvm-commits] [llvm] r89765 - in /llvm/trunk: include/llvm/System/Path.h lib/System/Unix/Path.inc lib/System/Win32/Path.inc
Edward O'Callaghan
eocallaghan at auroraux.org
Tue Nov 24 22:38:05 PST 2009
G'Day,
Following Daniels comments about semantics of the sys::Path API,
he has convinced me otherwise as the driver doesn't make or remove
directories, so his semantics do indeed make more sense in this
context.
Fixes applied here;
LLVM:
http://llvm.org/viewvc/llvm-project?view=rev&revision=89848
Clang:
http://llvm.org/viewvc/llvm-project?view=rev&revision=89849
Thanks everyone for the feedback,
Edward.
2009/11/24 Edward O'Callaghan <eocallaghan at auroraux.org>:
> G'Day Daniel,
>
>> I would prefer this be Path::isRegularFile, that corresponds to a well
>> known Unixism (S_ISREG) and avoids creating new terminology.
>> Similarly, I don't think it should do anything else -- checking that
>> the path is a directory is something clients can do.
>
> You know that's about the forth time someone has told me to change the name. :|
> Also, isRegularFile would be wrong because it returns false for being
> a regular file, that's not we want to be checking for, you got it the
> wrong way around.
>
> I'm not sure what you mean about not checking a directory, if its not
> a reg file or a directory then its special. Please see how its being
> used on the clang side of this fix. This is a two part fix, one side
> on LLVM and the other on Clang.
>
> Cheers,
> Edward.
>
> 2009/11/24 Daniel Dunbar <daniel at zuster.org>:
>> Hi Edward,
>>
>>
>> On Tue, Nov 24, 2009 at 7:19 AM, Edward O'Callaghan
>> <eocallaghan at auroraux.org> wrote:
>>> Author: evocallaghan
>>> Date: Tue Nov 24 09:19:10 2009
>>> New Revision: 89765
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=89765&view=rev
>>> Log:
>>> Provide Path::isSpecialFile interface for PR5568.
>>>
>>> Modified:
>>> llvm/trunk/include/llvm/System/Path.h
>>> llvm/trunk/lib/System/Unix/Path.inc
>>> llvm/trunk/lib/System/Win32/Path.inc
>>>
>>> Modified: llvm/trunk/include/llvm/System/Path.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Path.h?rev=89765&r1=89764&r2=89765&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/System/Path.h (original)
>>> +++ llvm/trunk/include/llvm/System/Path.h Tue Nov 24 09:19:10 2009
>>> @@ -380,6 +380,11 @@
>>> /// in the file system.
>>> bool canWrite() const;
>>>
>>> + /// This function checks that what we're trying to work only on a regular file or Dir.
>>> + /// Check for things like /dev/null, any block special file,
>>> + /// or other things that aren't "regular" files.
>>> + bool isSpecialFile() const;
>>> +
>>> /// This function determines if the path name references an executable
>>> /// file in the file system. This function checks for the existence and
>>> /// executability (by the current program) of the file.
>>
>>
>> I would prefer this be Path::isRegularFile, that corresponds to a well
>> known Unixism (S_ISREG) and avoids creating new terminology.
>> Similarly, I don't think it should do anything else -- checking that
>> the path is a directory is something clients can do.
>>
>> - Daniel
>>
>>> Modified: llvm/trunk/lib/System/Unix/Path.inc
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Path.inc?rev=89765&r1=89764&r2=89765&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/System/Unix/Path.inc (original)
>>> +++ llvm/trunk/lib/System/Unix/Path.inc Tue Nov 24 09:19:10 2009
>>> @@ -335,7 +335,7 @@
>>> free(pv);
>>> return (NULL);
>>> }
>>> -#endif
>>> +#endif // __FreeBSD__
>>>
>>> /// GetMainExecutable - Return the path to the main executable, given the
>>> /// value of argv[0] from program startup.
>>> @@ -454,6 +454,24 @@
>>> }
>>>
>>> bool
>>> +Path::isSpecialFile() const {
>>> + // Get the status so we can determine if its a file or directory
>>> + struct stat buf;
>>> + std::string *ErrStr;
>>> +
>>> + if (0 != stat(path.c_str(), &buf)) {
>>> + MakeErrMsg(ErrStr, path + ": can't get status of file");
>>> + return true;
>>> + }
>>> +
>>> + if (S_ISDIR(buf.st_mode) || S_ISREG(buf.st_mode)) {
>>> + return false;
>>> + }
>>> +
>>> + return true;
>>> +}
>>> +
>>> +bool
>>> Path::canExecute() const {
>>> if (0 != access(path.c_str(), R_OK | X_OK ))
>>> return false;
>>> @@ -723,7 +741,7 @@
>>>
>>> bool
>>> Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const {
>>> - // Get the status so we can determin if its a file or directory
>>> + // Get the status so we can determine if its a file or directory
>>> struct stat buf;
>>> if (0 != stat(path.c_str(), &buf)) {
>>> MakeErrMsg(ErrStr, path + ": can't get status of file");
>>>
>>> Modified: llvm/trunk/lib/System/Win32/Path.inc
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Path.inc?rev=89765&r1=89764&r2=89765&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/System/Win32/Path.inc (original)
>>> +++ llvm/trunk/lib/System/Win32/Path.inc Tue Nov 24 09:19:10 2009
>>> @@ -357,6 +357,11 @@
>>> return attr != INVALID_FILE_ATTRIBUTES;
>>> }
>>>
>>> +bool
>>> +Path::isSpecialFile() const {
>>> + return false;
>>> +}
>>>
>>> std::string
>>> Path::getLast() const {
>>> // Find the last slash
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>
>
>
>
> --
> --
> Edward O'Callaghan
> http://www.auroraux.org/
> eocallaghan at auroraux dot org
> ---
> () ascii ribbon campaign - against html e-mail
> /\ - against microsoft attachments
>
--
--
Edward O'Callaghan
http://www.auroraux.org/
eocallaghan at auroraux dot org
---
() ascii ribbon campaign - against html e-mail
/\ - against microsoft attachments
More information about the llvm-dev
mailing list