Index: database/database.mysql
===================================================================
RCS file: /cvs/drupal/drupal/database/database.mysql,v
retrieving revision 1.197
diff -u -r1.197 database.mysql
--- database/database.mysql	14 Sep 2005 21:37:11 -0000	1.197
+++ database/database.mysql	15 Sep 2005 13:46:23 -0000
@@ -246,6 +246,7 @@
   nid int(10) unsigned NOT NULL default '0',
   vid int(10) unsigned NOT NULL default '0',
   filename varchar(255) NOT NULL default '',
+  filetitle varchar(255) NOT NULL default '',
   filepath varchar(255) NOT NULL default '',
   filemime varchar(255) NOT NULL default '',
   filesize int(10) unsigned NOT NULL default '0',
Index: database/database.pgsql
===================================================================
RCS file: /cvs/drupal/drupal/database/database.pgsql,v
retrieving revision 1.136
diff -u -r1.136 database.pgsql
--- database/database.pgsql	14 Sep 2005 21:37:11 -0000	1.136
+++ database/database.pgsql	15 Sep 2005 13:46:23 -0000
@@ -241,6 +241,7 @@
   fid SERIAL,
   nid integer NOT NULL default '0',
   vid integer NOT NULL default '0',
+  filetitle varchar(255) NOT NULL default '',
   filename varchar(255) NOT NULL default '',
   filepath varchar(255) NOT NULL default '',
   filemime varchar(255) NOT NULL default '',
Index: database/updates.inc
===================================================================
RCS file: /cvs/drupal/drupal/database/updates.inc,v
retrieving revision 1.134
diff -u -r1.134 updates.inc
--- database/updates.inc	14 Sep 2005 21:37:11 -0000	1.134
+++ database/updates.inc	15 Sep 2005 13:48:54 -0000
@@ -66,7 +66,8 @@
   "2005-08-08" => "update_144",
   "2005-08-15" => "update_145",
   "2005-08-25" => "update_146",
-  "2005-09-07" => "update_147"
+  "2005-09-07" => "update_147",
+  "2005-09-15" => "update_148"
 );
 
 function update_110() {
@@ -811,6 +812,22 @@
   return $ret;
 }
 
+function update_148() {
+  $ret = array();
+
+  switch ($GLOBALS['db_type']) {
+    case 'pgsql':
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql("ALTER TABLE {files} ADD COLUMN filetitle VARCHAR(255) NOT NULL DEFAULT ''");
+      break;
+    default:
+      break;
+  }
+
+  return $ret;
+}
+
 
 function update_sql($sql) {
   $edit = $_POST["edit"];
Index: modules/upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload.module,v
retrieving revision 1.51
diff -u -r1.51 upload.module
--- modules/upload.module	2 Sep 2005 02:11:41 -0000	1.51
+++ modules/upload.module	15 Sep 2005 13:46:23 -0000
@@ -152,6 +152,7 @@
             $node->files[$file->source] = $file;
             $node->files[$key]->list = $node->list[$key];
             $node->files[$key]->remove = $node->remove[$key];
+            $node->files[$key]->filetitle = $node->filetitle[$key];
             if ($file->source) {
               $filesize += $file->filesize;
             }
@@ -244,7 +245,7 @@
         foreach ($node->files as $file) {
           if ($file->list) {
             $rows[] = array(
-              '<a href="'. check_url(($file->fid ? file_create_url($file->filepath) : url(file_create_filename($file->filename, file_create_path())))) .'">'. check_plain($file->filename) .'</a>',
+              '<a href="'. check_url(($file->fid ? file_create_url($file->filepath) : url(file_create_filename($file->filename, file_create_path())))) .'">'. check_plain((!empty($file->filetitle))?$file->filetitle:$file->filename) .'</a>',
               format_size($file->filesize)
             );
             // We save the list of files still in preview for later
@@ -342,8 +343,8 @@
       // Insert new files:
       if ($file = file_save_upload($file, $file->filename)) {
         $fid = db_next_id('{files}_fid');
-        db_query("INSERT INTO {files} (fid, nid, vid, filename, filepath, filemime, filesize, list) VALUES (%d, %d, %d, '%s', '%s', '%s', %d, %d)",
-                 $fid, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $node->list[$key]);
+        db_query("INSERT INTO {files} (fid, nid, vid, filename, filepath, filemime, filesize, list, filetitle) VALUES (%d, %d, %d, '%s', '%s', '%s', %d, %d, '%s')",
+                 $fid, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $node->list[$key], $file->filetitle);
       }
     }
   }
@@ -360,15 +361,15 @@
   }
   foreach ((array)$node->list as $key => $value) {
     if (!$node->remove[$key]) {
-      db_query('UPDATE {files} SET list = %d WHERE fid = %d AND vid = %d', $node->list[$key], $key, $node->vid);
+      db_query('UPDATE {files} SET list = %d, filetitle = \'%s\' WHERE fid = %d AND vid = %d', $node->list[$key], $node->filetitle[$key], $key, $node->vid);
     }
   }
   if ($node->old_vid) {
     foreach ((array)$node->remove as $key => $remove) {
       if (!$remove) {
         $file = db_fetch_object(db_query('SELECT * FROM {files} WHERE vid = %d AND fid = %d', $node->old_vid, $key));
-        db_query("INSERT INTO {files} (fid, nid, vid, filename, filepath, filemime, filesize, list) VALUES (%d, %d, %d, '%s', '%s', '%s', %d, %d)",
-                 $key, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $file->list);
+        db_query("INSERT INTO {files} (fid, nid, vid, filename, filepath, filemime, filesize, list, filetitle) VALUES (%d, %d, %d, '%s', '%s', '%s', %d, %d, '%s')",
+                 $key, $node->nid, $node->vid, $file->filename, $file->filepath, $file->filemime, $file->filesize, $file->list, $file->filetitle);
       }
     }
   }
@@ -393,7 +394,7 @@
 }
 
 function _upload_form($node) {
-  $header = array(t('Delete'), t('List'), t('Url'), t('Size'));
+  $header = array(t('Delete'), t('List'), t('Url'), t('Title'), t('Size'));
   $rows = array();
   $output = '';
 
@@ -403,6 +404,7 @@
         form_checkbox('', "remove][$key", 1, $file->remove),
         form_checkbox('', "list][$key", 1, $file->list),
         $file->filename ."<br /><small>". file_create_url(($file->fid ? $file->filepath : file_create_filename($file->filename, file_create_path()))) ."</small>",
+        form_textfield('', "filetitle][$key", (!empty($file->filetitle)?$file->filetitle:$file->filename), 30, 256),
         format_size($file->filesize)
       );
     }
