? webfm_806614.patch
Index: webfm.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/webfm.module,v
retrieving revision 1.45
diff -u -p -r1.45 webfm.module
--- webfm.module	19 May 2010 23:07:23 -0000	1.45
+++ webfm.module	23 May 2010 15:11:36 -0000
@@ -2203,13 +2203,14 @@ class webfm_fdesc {
     $dir = dirname($file->fpath);
     //assume the object $file record path has a directory before the file name
     if (is_dir($dir)) {
-      if(chdir($dir)) {
+      if (chdir($dir)) {
         if($handle = opendir('.')) {
-          while(($readdir = readdir($handle)) !== false) {
-            if(is_dir($readdir))
+	
+			while (($readdir = readdir($handle)) !== false) {
+            if(is_dir($readdir)) {
               continue;
-
-            if(is_file($readdir) && ($readdir == basename($file->fpath))) {
+	    }
+            if(is_file($readdir) && ($readdir == _webfm_basename($file->fpath))) {
               $this->id = $file->fid;
               $this->n = strrev(substr(strrev($file->fpath), 0, strpos(strrev($file->fpath), '/')));
               $this->p = $dir;
@@ -2232,8 +2233,8 @@ class webfm_fdesc {
               $this->fformat = urldecode($file->fformat);
               $this->fversion = $file->fversion;
               $this->m = (filemtime($readdir)) ? @filemtime($readdir) : "";
-
-              $this->result = TRUE;
+              
+	      $this->result = TRUE;
               break;
             }
           }
@@ -2423,7 +2424,7 @@ function webfm_send_file($fid, $download
     }
   }
 
-  $name=basename($f->fpath);
+  $name=_webfm_basename($f->fpath);
 
   //filenames in IE containing dots will screw up the
   //filename unless we add this
Index: webfm_file.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/webfm_file.inc,v
retrieving revision 1.13
diff -u -p -r1.13 webfm_file.inc
--- webfm_file.inc	22 Mar 2010 01:26:13 -0000	1.13
+++ webfm_file.inc	23 May 2010 15:11:36 -0000
@@ -63,7 +63,7 @@ function webfm_rename($source, $dest, $u
        ($file_o && webfm_file_mod_access($file_o))) {
       //check validity of new file name
       $file = new stdClass();
-      $file->filename = basename($dest);
+      $file->filename = _webfm_basename($dest);
       $file->filepath = $source;
       $file->filesize = 0; //avoid fail for size - we're interested in extensions
       if(webfm_enum_validate($file, $err_arr) === FALSE) {
@@ -75,11 +75,11 @@ function webfm_rename($source, $dest, $u
       if(@rename($source, $dest_temp)) {
         if(!@rename($dest_temp, $dest)) {
           @rename($dest_temp, $source);
-          $err_arr[] = t('rename ').basename($source).t(' fail');
+          $err_arr[] = t('rename ')._webfm_basename($source).t(' fail');
           return FALSE;
         }
       } else {
-        $err_arr[] = basename($source).t(' read-only');
+        $err_arr[] = _webfm_basename($source).t(' read-only');
         return FALSE;
       }
     } else {
@@ -267,4 +267,25 @@ function webfm_insert_dir($path, $recur,
     $err_arr[] = t('Cannot open dir ').$path;
   }
   return $result;
-}
\ No newline at end of file
+}
+
+/**
+ * Get file's basename (locale independent)
+ * 
+ *
+ * @param string Filename
+ *
+ * @return string Basename
+ */
+function _webfm_basename($filename) {
+  //Originally by Aleksander Machniak 
+  //http://pear.php.net/bugs/bug.php?id=14529&edit=12&patch=mime.patch&revision=1222363721
+  
+  //basename() is not unicode safe and locale dependent
+  if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware')) {
+    return preg_replace('/^.*[\\\\\\/]/', '', $filename);
+  }
+  else {
+   return preg_replace('/^.*[\/]/', '', $filename);
+  }
+}
