upped time between retries.
[feisty_meow.git] / nucleus / library / filesystem / filename.h
index a6018ef53313ab4488e3449dcb9a491454db1d36..940b6c037cfc717005a149ddc7c34a7bbfa2abc7 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__
@@ -142,6 +141,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 +185,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;