Retain orig. filename as suffix for tmp. filename
Adam Byrtek / alpha
alpha at student.uci.agh.edu.pl
Mon Feb 24 00:39:44 UTC 2003
It is useful to have an original filename as a part of temporary
filename when editing files from extfs or vfs:
* editors can use it's features connected to file name/extension
(syntax highlihting etc.)
* user can see the real name of the file he is editing in external
editor
I've created simple patch to extract 'foofile.tgz' as
* for the default getlocalcopy (used by most vfses):
vfsXXXXX-foofile.tgz, or vfsXXXXX when the earlier fails
(not mclocalcopy which is longer and not more informative)
* for the extfs_open:
extfsXXXXX-foofile.tgz, or extfsXXXXX when the earlier fails
It is worth noting, that the getlocalcopy has already supported file
'extension' as a suffix (mclocalcopyXXXXX.tgz in our case, btw it was
implemented in a quite ugly way: 6 lines of code could be easily
substituted with simple strrchr), but it is not enough IMO:
* Something we call 'extension' is not native to the *nix
nomenclature, in unix filename is atomic (of course we treat part
after the last dot as the 'extension', but it is mostly
conventional) - AFAIK, correct me if I'm wrong...
* The complete filename is more informative (see the second point at
the beginning).
Patch in the BTS (also attached):
https://savannah.gnu.org/patch/index.php?func=detailpatch&patch_id=1167&group_id=3521
--
_.|._ |_ _. : Adam Byrtek /alpha/
(_|||_)| |(_| : email alpha@(irc.pl|debian.org)
| : jabber alpha.pl(at)jabber.org, pgp 0xB25952C0
-------------- next part --------------
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/mc/vfs/ChangeLog,v
retrieving revision 1.583
diff -u -r1.583 ChangeLog
--- ChangeLog 19 Feb 2003 14:04:35 -0000 1.583
+++ ChangeLog 24 Feb 2003 00:20:34 -0000
@@ -1,0 +1,6 @@
+2003-02-24 Adam Byrtek <alpha at debian.org>
+
+ * extfs.c (extfs_open): Retain original filename as a suffix
+ for the temporary filename.
+ * vfs.c (mc_def_getlocalcopy): Likewise.
+
Index: extfs.c
===================================================================
RCS file: /cvs/gnome/mc/vfs/extfs.c,v
retrieving revision 1.66
diff -u -r1.66 extfs.c
--- extfs.c 25 Dec 2002 21:42:59 -0000 1.66
+++ extfs.c 24 Feb 2003 00:20:34 -0000
@@ -659,9 +659,15 @@
ERRNOR (EISDIR, NULL);
if (entry->inode->local_filename == NULL) {
- char *local_filename;
+ char *local_filename, *suffix;
- local_handle = mc_mkstemps (&local_filename, "extfs", NULL);
+ /* retain original filename as a suffix for a temporary filename */
+ suffix = g_strconcat("-", entry->name, NULL);
+
+ if ((local_handle = mc_mkstemps (&local_filename, "extfs", suffix)) == -1)
+ /* fallback just in case */
+ local_handle = mc_mkstemps (&local_filename, "extfs", NULL);
+ g_free (suffix);
if (local_handle == -1)
return NULL;
Index: vfs.c
===================================================================
RCS file: /cvs/gnome/mc/vfs/vfs.c,v
retrieving revision 1.108
diff -u -r1.108 vfs.c
--- vfs.c 19 Feb 2003 08:38:49 -0000 1.108
+++ vfs.c 24 Feb 2003 00:20:34 -0000
@@ -1052,29 +1052,26 @@
char *
mc_def_getlocalcopy (vfs *vfs, char *filename)
{
- char *tmp;
+ char *tmp, *suffix, *basename;
int fdin, fdout, i;
char buffer[8192];
struct stat mystat;
- char *ext = NULL;
- char *ptr;
fdin = mc_open (filename, O_RDONLY);
if (fdin == -1)
return NULL;
- /* Try to preserve existing extension */
- for (ptr = filename + strlen(filename) - 1; ptr >= filename; ptr--) {
- if (*ptr == '.') {
- ext = ptr;
- break;
- }
+ /* retain original filename as a suffix for a temporary filename */
+ basename = strrchr (filename, PATH_SEP);
+ if (basename && *basename==PATH_SEP)
+ basename++;
+ suffix = g_strconcat("-", basename, NULL);
- if (!isalnum((unsigned char) *ptr))
- break;
- }
+ if ((fdout = mc_mkstemps (&tmp, "vfs", suffix)) == -1)
+ fdout = mc_mkstemps (&tmp, "vfs", NULL); /* fallback just in case */
+ g_free (suffix);
- fdout = mc_mkstemps (&tmp, "mclocalcopy", ext);
+
if (fdout == -1)
goto fail;
while ((i = mc_read (fdin, buffer, sizeof (buffer))) > 0){
More information about the mc-devel
mailing list