[Xfce4-commits] r23159 - xarchiver/branches/xarchiver-psybsd/libxarchiver
Stephan Arts
stephan at xfce.org
Fri Sep 15 04:50:02 UTC 2006
Author: stephan
Date: 2006-09-15 04:50:01 +0000 (Fri, 15 Sep 2006)
New Revision: 23159
Modified:
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
Log:
All properties are stored in entry now with gnu-tar. (making mem-usage 2.5 times what it was, should really make it optional)
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-09-14 13:27:54 UTC (rev 23158)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-09-15 04:50:01 UTC (rev 23159)
@@ -18,6 +18,8 @@
#define EXO_API_SUBJECT_TO_CHANGE
+#include <stdlib.h>
+#include <string.h>
#include <glib.h>
#include <glib/gstdio.h>
@@ -341,7 +343,7 @@
archive->column_names[0] = g_strdup("filename");
//empty archive-tree
/* use tvf once implementation of path recognition is stable */
- gchar *command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " tf " , archive->path, NULL);
+ gchar *command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " tvf " , archive->path, NULL);
lxa_execute(command, archive, NULL, NULL, lxa_archive_support_gnu_tar_refresh_parse_output, NULL);
g_free(command);
}
@@ -379,7 +381,12 @@
gchar *line = NULL;
LXAEntry *entry;
+ GValue *props = NULL;
+ gint n = 0, a = 0;
+ gchar *temp_filename = NULL;
+ gchar *_size = NULL;
+
if(cond & (G_IO_PRI | G_IO_IN))
{
while(TRUE)
@@ -387,7 +394,73 @@
status = g_io_channel_read_line(ioc, &line, NULL,NULL,NULL);
if (line == NULL)
break;
- entry = lxa_archive_add_file(archive, line);
+
+ props = g_new0(GValue, 6);
+
+ g_value_init(&props[0], G_TYPE_INT);
+ gint _rights = 0;
+ /* _rights |= (line[0] == '-')?0x0:0x00000001; // folder / file? */
+ _rights |= (line[1] == '-')?0x0:0x00000001;
+ _rights |= (line[2] == '-')?0x0:0x00000002;
+ _rights |= (line[3] == '-')?0x0:0x00000004;
+ _rights |= (line[4] == '-')?0x0:0x00000008;
+ _rights |= (line[5] == '-')?0x0:0x00000010;
+ _rights |= (line[6] == '-')?0x0:0x00000020;
+ _rights |= (line[7] == '-')?0x0:0x00000040;
+ _rights |= (line[9] == '-')?0x0:0x00000080;
+ _rights |= (line[10] == '-')?0x0:0x00000100;
+ g_value_set_int(&props[0], _rights);
+
+ for(n=13; n < strlen(line); n++)
+ if(line[n] == ' ') break;
+
+ g_value_init(&props[1], G_TYPE_STRING);
+ g_value_set_string(&props[1], g_strndup(&line[11], n-11));
+
+ for(; n < strlen(line); n++)
+ if(line[n] >= '0' && line[n] <= '9') break;
+
+ a = n;
+
+ for(; n < strlen(line); n++)
+ if(line[n] == ' ') break;
+
+ g_value_init(&props[2], G_TYPE_UINT64);
+ _size = g_strndup(&line[a], n-a);
+ g_value_set_uint64(&props[2], (guint64)atof ( _size ));
+ g_free (_size);
+
+ a = n++;
+
+ for(; n < strlen(line); n++) // DATE
+ if(line[n] == ' ') break;
+
+ g_value_init(&props[3], G_TYPE_STRING);
+ g_value_set_string ( &props[3], g_strndup (&line[n-10], 10) );
+
+ a = n++;
+ for (; n < strlen(line); n++) // TIME
+ if (line[n] == ' ') break;
+
+ g_value_init(&props[4], G_TYPE_STRING);
+ g_value_set_string ( &props[4], g_strndup (&line[n-8], 8) );
+
+ g_value_init(&props[5], G_TYPE_STRING);
+
+ gchar *temp = g_strrstr (&line[n],"->");
+ if (temp )
+ {
+ temp_filename = g_strstrip(g_strndup(&line[n], strlen(line) - strlen(temp) - n ));
+ g_value_set_string (&props[5], g_strstrip(g_strndup (&temp[3] , strlen(temp))) );
+ }
+ else
+ {
+ temp_filename = g_strstrip(g_strndup(&line[n], strlen(line)-n-1));
+ g_value_set_string (&props[5], g_strdup(" ") );
+ }
+
+ entry = lxa_archive_add_file(archive, temp_filename);
+ entry->props = props;
g_free(line);
/* TODO: Add data */
}
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c 2006-09-14 13:27:54 UTC (rev 23158)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c 2006-09-15 04:50:01 UTC (rev 23159)
@@ -101,6 +101,7 @@
if(archive->path)
g_free(archive->path);
g_free(archive->root_entry.filename);
+ /* TODO: free archive->root_entry.children */
}
LXAArchive *
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h 2006-09-14 13:27:54 UTC (rev 23158)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h 2006-09-15 04:50:01 UTC (rev 23159)
@@ -34,6 +34,7 @@
typedef struct {
GValue *filename;
+ GValue *props;
GSList *children;
} LXAEntry;
More information about the Xfce4-commits
mailing list