[llvm-commits] [llvm] r89765 - in /llvm/trunk: include/llvm/System/Path.h lib/System/Unix/Path.inc lib/System/Win32/Path.inc

Daniel Dunbar daniel at zuster.org
Tue Nov 24 09:30:39 PST 2009


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
>




More information about the llvm-commits mailing list