? .komodotools
? drupal_7_head.komodoproject
? sites/default/files
? sites/default/settings.php
Index: includes/file.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/file.inc,v
retrieving revision 1.243
diff -u -p -r1.243 file.inc
--- includes/file.inc	15 Dec 2010 03:39:41 -0000	1.243
+++ includes/file.inc	21 Dec 2010 07:38:13 -0000
@@ -2289,7 +2289,8 @@ function drupal_rmdir($uri, $context = N
  * @see http://drupal.org/node/515192
  *
  * @param $directory
- *   The directory where the temporary filename will be created.
+ *   The directory where the temporary filename will be created. This should
+ *   already exist and be writeable by PHP.
  * @param $prefix
  *   The prefix of the generated temporary filename.
  *   Note: Windows uses only the first three characters of prefix.
@@ -2304,10 +2305,10 @@ function drupal_tempnam($directory, $pre
   $scheme = file_uri_scheme($directory);
 
   if ($scheme && file_stream_wrapper_valid_scheme($scheme)) {
-    $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
+    $local_directory = drupal_realpath($directory);
 
-    if ($filename = tempnam($wrapper->getDirectoryPath(), $prefix)) {
-      return $scheme . '://' . basename($filename);
+    if (is_writable($local_directory) && ($filename = tempnam($local_directory, $prefix))) {
+      return file_stream_wrapper_uri_normalize($directory . '/' . basename($filename));
     }
     else {
       return FALSE;
Index: modules/simpletest/tests/file.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v
retrieving revision 1.72
diff -u -p -r1.72 file.test
--- modules/simpletest/tests/file.test	30 Nov 2010 19:31:46 -0000	1.72
+++ modules/simpletest/tests/file.test	21 Dec 2010 07:38:15 -0000
@@ -2542,7 +2542,7 @@ class FileMimeTypeTest extends DrupalWeb
 /**
  * Tests stream wrapper functions.
  */
-class StreamWrapperTest extends DrupalWebTestCase {
+class FileStreamWrapperTest extends FileTestCase {
 
   protected $scheme = 'dummy';
   protected $classname = 'DrupalDummyStreamWrapper';
@@ -2617,4 +2617,23 @@ class StreamWrapperTest extends DrupalWe
     $this->assertTrue(file_stream_wrapper_valid_scheme(file_uri_scheme('public://asdf')), t('Got a valid stream scheme from public://asdf'));
     $this->assertFalse(file_stream_wrapper_valid_scheme(file_uri_scheme('foo://asdf')), t('Did not get a valid stream scheme from foo://asdf'));
   }
+
+  /**
+   * Test the drupal_tempnam() function.
+   *
+   * Ensure that drupal_tempnam can create files in a folder when using a stream
+   * wrapper.
+   */
+  function testDrupalTempnam() {
+    // Create a tmp file at the root of the default stream wrapper.
+    $tempnam = drupal_tempnam(file_default_scheme() . '://', 'tmp');
+    $this->assertTrue($tempnam, t('Default stream wrapper can create temporary files'));
+    $this->assertEqual(file_default_scheme() . '://tmp', substr($tempnam, 0, strlen(file_default_scheme() . '://tmp')), t('Temporary file created at root of stream wrapper with correct URI'));
+
+    // Create a tmp file in a subfolder of the default stream wrapper.
+    $folder = $this->createDirectory();
+    $tempnam = drupal_tempnam($folder, 'tmp');
+    $this->assertTrue($tempnam, t('Default stream wrapper can create temporary files'));
+    $this->assertEqual($folder, drupal_dirname($tempnam), t('Temporary file in subdirectory of stream wrapper was created'));s
+  }
 }
