updated to get closer to building using cygwin, which is difficult because
[feisty_meow.git] / nucleus / library / filesystem / filename.h
index a6018ef53313ab4488e3449dcb9a491454db1d36..f609f9016b0b14f85e8d5625d1da5d2b590d551d 100644 (file)
@@ -23,8 +23,7 @@
 // forward declarations.
 class status_info;
 
-//hmmm: this doesn't really belong here, does it.
-
+//hmmm: this doesn't really belong here, does it...
 // define useful constant for filesystem path length.
 #ifndef MAX_ABS_PATH 
   #ifdef __WIN32__
@@ -64,6 +63,9 @@ public:
     /*!< this means that not only was the pathname parsed and found valid,
     but the file actually exists. */
 
+  void reset(const basis::astring &name);
+    //!< changes the file name held by the object.
+
   const basis::astring &raw() const;
     //!< returns the astring that we're holding onto for the path.
   basis::astring &raw();
@@ -142,6 +144,10 @@ public:
   bool is_readable() const;
   bool is_executable() const;
 
+  // is_normal makes sure that the file or directory is not a named pipe or other
+  // special type of file.  symbolic links are considered normal.
+  bool is_normal() const;
+
   enum write_modes {
     ALLOW_NEITHER = 0x0,
     ALLOW_READ = 0x1, ALLOW_WRITE = 0x2,
@@ -182,18 +188,19 @@ public:
     the file to be created or accessed).  the "replacement" is used as the
     character that is substituted instead of illegal characters. */
 
-  void separate(structures::string_array &pieces) const;
-    //!< breaks the filename into its component directories.
-    /*!< this returns an array containing the component names.  the last
-    component, unless the filename held is actually a directory, should be the
-    name of the file.  if the first character is a directory, then the first
-    component will be empty. */
+  void separate(bool &rooted, structures::string_array &pieces) const;
+    //!< breaks the filename into its component parts.
+    /*!< this returns an array containing the component names for the path in
+    this filename object.  if the "rooted" flag is set to true, then the path
+    was absolute (i.e. started at '/' in unix.  this notion is not needed for
+    dos/windoze, as the first component will be something like 'a:'). */
 
-  void join(const structures::string_array &pieces);
+  void join(bool rooted, const structures::string_array &pieces);
     //!< undoes a separate() operation to get the filename back.
     /*!< "this" is set to a filename made from each of the "pieces".  if there
-    are any directory separators inside the pieces, then they will be removed
-    by canonicalize(). */
+    are any directory separators inside the pieces themselves, then they will
+    be removed by canonicalize().  if separate() said the path was rooted,
+    then join needs to be told that. */
 
   // these implement the packing functionality.
   virtual void pack(basis::byte_array &packed_form) const;