[Xfce4-commits] r27234 - in squeeze/trunk: data libsqueeze
Peter de Ridder
peter at xfce.org
Tue Jul 8 01:01:09 CEST 2008
Author: peter
Date: 2008-07-07 23:01:09 +0000 (Mon, 07 Jul 2008)
New Revision: 27234
Modified:
squeeze/trunk/data/zip.squeeze
squeeze/trunk/libsqueeze/archive-iter.c
squeeze/trunk/libsqueeze/archive.c
squeeze/trunk/libsqueeze/archive.h
squeeze/trunk/libsqueeze/command-queue.c
squeeze/trunk/libsqueeze/parser-context.c
squeeze/trunk/libsqueeze/parser-context.h
squeeze/trunk/libsqueeze/scanf-parser.c
Log:
Open archive works now.
partialy fixed zip.squeeze
Modified: squeeze/trunk/data/zip.squeeze
===================================================================
--- squeeze/trunk/data/zip.squeeze 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/data/zip.squeeze 2008-07-07 23:01:09 UTC (rev 27234)
@@ -2,14 +2,24 @@
Name=Zip
Version=1.0
Type=X-Squeeze-Archiver
-MimeType=application/x-zip
+MimeType=application/zip;application/x-zip
X-Squeeze-Version=0.3
+[application/zip]
+X-Squeeze-Requires=zip;unzip
+X-Squeeze-New=zip
+X-Squeeze-Add=zip
+X-Squeeze-Remove=zip
+X-Squeeze-Extract=zip
+X-Squeeze-Refresh=unzip -lv -qq %a
+
[application/x-zip]
-X-Squeeze-Requires=zip
+X-Squeeze-Requires=zip;unzip
X-Squeeze-New=zip
X-Squeeze-Add=zip
X-Squeeze-Remove=zip
+X-Squeeze-Extract=zip
+X-Squeeze-Refresh=unzip -lv -qq %a
[Squeeze-Add]
[Squeeze-Remove]
@@ -18,12 +28,12 @@
X-Squeeze-Options=Password;Overwrite;w00t
[Squeeze-Refresh]
-X-Squeeze-Headers=Rights;Owner/Group;Size;Date;Time;Name
+X-Squeeze-Headers=Size;Method;Compressed;Ratio;Date;Time;CRC-32
# Tar does not support passwords, this is just for illustrative purposes
X-Squeeze-Options=Password
# I wonder if this will be enough...
-X-Squeeze-Parse=%s %s %u %s %s %F
+X-Squeeze-Parse=%u %s %u %s %s %s %s %F
X-Squeeze-Separator=space
[Squeeze-Option-Password]
Modified: squeeze/trunk/libsqueeze/archive-iter.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-iter.c 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/archive-iter.c 2008-07-07 23:01:09 UTC (rev 27234)
@@ -1448,11 +1448,11 @@
props_iter += sizeof(gchar *);
break;
case G_TYPE_UINT:
- (*((guint *)props_iter)) = ((const guint)props[i]);
+ (*((guint *)props_iter)) = *((const guint *)props[i]);
props_iter += sizeof(guint);
break;
case G_TYPE_UINT64:
- (*((guint64 *)props_iter)) = (*(const guint64 *)props[i]);
+ (*((guint64 *)props_iter)) = *((const guint64 *)props[i]);
props_iter += sizeof(guint64);
break;
}
Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/archive.c 2008-07-07 23:01:09 UTC (rev 27234)
@@ -31,8 +31,8 @@
#include "slist.h"
#include "archive-tempfs.h"
+#include "command-queue.h"
-
#include "internals.h"
#ifndef LSQ_ENTRY_CHILD_BUFFER_SIZE
Modified: squeeze/trunk/libsqueeze/archive.h
===================================================================
--- squeeze/trunk/libsqueeze/archive.h 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/archive.h 2008-07-07 23:01:09 UTC (rev 27234)
@@ -116,7 +116,10 @@
LSQArchiveState
lsq_archive_get_state(const LSQArchive *archive);
+void
+lsq_archive_refreshed(const LSQArchive *archive);
+
G_END_DECLS
#endif /* __ARCHIVE_H__ */
Modified: squeeze/trunk/libsqueeze/command-queue.c
===================================================================
--- squeeze/trunk/libsqueeze/command-queue.c 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/command-queue.c 2008-07-07 23:01:09 UTC (rev 27234)
@@ -18,6 +18,7 @@
#include <glib.h>
#include <glib-object.h>
#include <signal.h>
+#include <string.h>
#include <thunar-vfs/thunar-vfs.h>
#include "libsqueeze.h"
@@ -64,6 +65,8 @@
} state;
};
+static void lsq_command_entry_start(LSQCommandEntry *entry, LSQExecuteContext *ctx);
+
static void build_queue(LSQCommandQueue *queue, const gchar *command_string);
G_DEFINE_TYPE(LSQCommandQueue, lsq_command_queue, G_TYPE_OBJECT);
@@ -174,8 +177,6 @@
return argv;
}
-static void lsq_command_entry_start(LSQCommandEntry *entry, LSQExecuteContext *ctx);
-
static void child_exit(GPid pid, gint status, LSQExecuteContext *ctx)
{
g_spawn_close_pid(pid);
@@ -251,7 +252,9 @@
parse_channel(GIOChannel *source, GIOCondition condition, LSQExecuteContext *ctx)
{
if(condition & G_IO_IN)
- lsq_parser_parse(ctx->parser, ctx->ctx);
+ do {
+ lsq_parser_parse(ctx->parser, ctx->ctx);
+ } while(lsq_parser_context_read_again(ctx->ctx));
if(condition & G_IO_HUP || !lsq_parser_context_is_good(ctx->ctx))
{
lsq_parser_context_set_channel(ctx->ctx, NULL);
@@ -271,11 +274,12 @@
static void lsq_command_entry_start(LSQCommandEntry *entry, LSQExecuteContext *ctx)
{
+ GError *error = NULL;
gint fd_in = FALSE;
gint fd_out = TRUE;
- GIOChannel *redir_in;
+ GIOChannel *redir_in = NULL;
GIOChannel *chan_in;
- GIOChannel *redir_out;
+ //GIOChannel *redir_out;
GIOChannel *chan_out;
gchar **argv;
GPid pid;
@@ -294,15 +298,31 @@
if(entry->redirect_in)
{
gchar *file = format_get_filename(entry->redirect_in, ctx);
- redir_in = g_io_channel_new_file(file, "r", NULL);
+ //redir_in = g_io_channel_new_file(file, "r", NULL);
g_free(file);
fd_in = TRUE;
}
argv = lsq_command_entry_to_argv(entry, ctx);
- g_spawn_async_with_pipes(NULL, argv, NULL, flags, NULL, NULL, &pid, fd_in?&fd_in:NULL, fd_out?&fd_out:NULL, NULL, NULL);
+ g_debug("command: %s", argv[0]);
+ gchar **argvi = argv;
+ while (argvi[1])
+ {
+ g_debug("arg: '%s'", argvi[1]);
+ argvi++;
+ }
+
+ if(!g_spawn_async_with_pipes(NULL, argv, NULL, flags, NULL, NULL, &pid, fd_in?&fd_in:NULL, fd_out?&fd_out:NULL, NULL, &error))
+ {
+ g_debug("spawn failed: %s", error->message);
+ g_error_free(error);
+ return;
+ }
+
+ g_strfreev(argv);
+
g_child_watch_add(pid, (GChildWatchFunc)child_exit, ctx);
ctx->state |= LSQ_EXEC_CTX_STATE_RUNNING;
Modified: squeeze/trunk/libsqueeze/parser-context.c
===================================================================
--- squeeze/trunk/libsqueeze/parser-context.c 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/parser-context.c 2008-07-07 23:01:09 UTC (rev 27234)
@@ -116,3 +116,9 @@
return ctx->last_stat == G_IO_STATUS_NORMAL || ctx->last_stat == G_IO_STATUS_AGAIN;
}
+gboolean
+lsq_parser_context_read_again(LSQParserContext *ctx)
+{
+ return ctx->last_stat == G_IO_STATUS_NORMAL;
+}
+
Modified: squeeze/trunk/libsqueeze/parser-context.h
===================================================================
--- squeeze/trunk/libsqueeze/parser-context.h 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/parser-context.h 2008-07-07 23:01:09 UTC (rev 27234)
@@ -63,6 +63,12 @@
gboolean lsq_parser_context_get_line (LSQParserContext *, gchar **, gsize *);
+gboolean lsq_parser_context_is_good (LSQParserContext *);
+
+gboolean lsq_parser_context_read_again(LSQParserContext *);
+
+void lsq_parser_context_set_channel(LSQParserContext *, GIOChannel *);
+
G_END_DECLS
#endif /* __LIBSQUEEZE_PARSER_CONTEXT_H__ */
Modified: squeeze/trunk/libsqueeze/scanf-parser.c
===================================================================
--- squeeze/trunk/libsqueeze/scanf-parser.c 2008-07-07 20:21:25 UTC (rev 27233)
+++ squeeze/trunk/libsqueeze/scanf-parser.c 2008-07-07 23:01:09 UTC (rev 27234)
@@ -99,7 +99,7 @@
ctx = g_object_new(lsq_scanf_parser_context_get_type(), "archive", archive, NULL);
guint n_props = lsq_parser_n_properties(LSQ_PARSER(parser));
ctx->data_store = g_new0(union _data_store, n_props);
- ctx->props_store = g_new0(gpointer, n_props);
+ ctx->props_store = g_new0(gpointer, n_props+1);
return LSQ_PARSER_CONTEXT(ctx);
}
@@ -170,16 +170,24 @@
guint skip_char(gchar *str, guint lng, parse_part *part, LSQScanfParserContext *ctx)
{
const gchar *ptr;
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter)
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim)
return 1;
//for(ptr = str; g_ascii_isspace(*ptr); ptr++);
- ptr = g_strstr_len(str, lng, part->delimiter);
+ ptr = g_strstr_len(str, lng, delim);
+
+ if(!ptr)
+ return 0;
return ptr - str;
}
@@ -190,11 +198,16 @@
#ifdef DO_EXSTENSIVE_CHECKING
gchar *ptr2;
#endif
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
{
g_ascii_strtoll(str, &ptr, 10);
return ptr - str;
@@ -202,7 +215,10 @@
for(ptr = str; g_ascii_isspace(*ptr); ptr++);
- ptr = g_strstr_len(ptr, lng, part->delimiter);
+ ptr = g_strstr_len(ptr, lng, delim);
+
+ if(!ptr)
+ return 0;
#ifdef DO_EXSTENSIVE_CHECKING
g_ascii_strtoll(str, &ptr2, 10);
if(ptr > ptr2)
@@ -218,11 +234,16 @@
#ifdef DO_EXSTENSIVE_CHECKING
gchar *ptr2;
#endif
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
{
g_ascii_strtod(str, &ptr);
return ptr - str;
@@ -230,7 +251,10 @@
for(ptr = str; g_ascii_isspace(*ptr); ptr++);
- ptr = g_strstr_len(ptr, lng, part->delimiter);
+ ptr = g_strstr_len(ptr, lng, delim);
+
+ if(!ptr)
+ return 0;
#ifdef DO_EXSTENSIVE_CHECKING
g_ascii_strtod(str, &ptr2);
if(ptr > ptr2)
@@ -246,11 +270,16 @@
#ifdef DO_EXSTENSIVE_CHECKING
gchar *ptr2;
#endif
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
{
g_ascii_strtoll(str, &ptr, 010);
return ptr - str;
@@ -258,7 +287,10 @@
for(ptr = str; g_ascii_isspace(*ptr); ptr++);
- ptr = g_strstr_len(ptr, lng, part->delimiter);
+ ptr = g_strstr_len(ptr, lng, delim);
+
+ if(!ptr)
+ return 0;
#ifdef DO_EXSTENSIVE_CHECKING
g_ascii_strtoll(str, &ptr2, 010);
if(ptr > ptr2)
@@ -271,16 +303,24 @@
guint skip_string(gchar *str, guint lng, parse_part *part, LSQScanfParserContext *ctx)
{
gchar *ptr;
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
return 0;
for(ptr = str; g_ascii_isspace(*ptr); ptr++);
- ptr = g_strstr_len(ptr, lng, part->delimiter);
+ ptr = g_strstr_len(ptr, lng, delim);
+
+ if(!ptr)
+ return 0;
return ptr - str;
}
@@ -291,17 +331,25 @@
#ifdef DO_EXSTENSIVE_CHECKING
gchar *ptr2;
#endif
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
{
g_ascii_strtoull(str, &ptr, 10);
return ptr - str;
}
- ptr = g_strstr_len(str, lng, part->delimiter);
+ ptr = g_strstr_len(str, lng, delim);
+
+ if(!ptr)
+ return 0;
#ifdef DO_EXSTENSIVE_CHECKING
g_ascii_strtoull(str, &ptr2, 10);
if(ptr > ptr2)
@@ -317,17 +365,25 @@
#ifdef DO_EXSTENSIVE_CHECKING
gchar *ptr2;
#endif
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
{
g_ascii_strtoll(str, &ptr, 0x10);
return ptr - str;
}
- ptr = g_strstr_len(str, lng, part->delimiter);
+ ptr = g_strstr_len(str, lng, delim);
+
+ if(!ptr)
+ return 0;
#ifdef DO_EXSTENSIVE_CHECKING
g_ascii_strtoll(str, &ptr2, 0x10);
if(ptr > ptr2)
@@ -357,16 +413,20 @@
gchar *ptr2; \
type val; \
ptype *pval; \
+ const gchar *delim; \
if(!lng) return 0; \
+ delim = part->delimiter; \
+ if(!delim && !part->next) delim = "\n"; \
pval = &ctx->data_store[part->index].pname; \
ctx->props_store[part->index] = pval; \
- if(!part->delimiter[0]) { \
+ if(!delim[0]) { \
val = g_ascii_strtoll(str, &ptr, base); \
- *pval = val; \
+ *pval = val; \
return ptr - str; \
} \
for(ptr = str; g_ascii_isspace(*ptr); ptr++); \
- ptr = g_strstr_len(ptr, lng, part->delimiter); \
+ ptr = g_strstr_len(ptr, lng, delim); \
+ if(!ptr) return 0; \
val = g_ascii_strtoll(str, &ptr2, base); \
*pval = val; \
if(ptr > ptr2) return 0; \
@@ -379,16 +439,20 @@
gchar *ptr2; \
type val; \
type *pval; \
+ const gchar *delim; \
if(!lng) return 0; \
+ delim = part->delimiter; \
+ if(!delim && !part->next) delim = "\n"; \
pval = &ctx->data_store[part->index].pname; \
ctx->props_store[part->index] = pval; \
- if(!part->delimiter[0]) { \
+ if(!delim[0]) { \
val = g_ascii_strtod(str, &ptr); \
- *pval = val; \
+ *pval = val; \
return ptr - str; \
} \
for(ptr = str; g_ascii_isspace(*ptr); ptr++); \
- ptr = g_strstr_len(ptr, lng, part->delimiter); \
+ ptr = g_strstr_len(ptr, lng, delim); \
+ if(!ptr) return 0; \
val = g_ascii_strtod(str, &ptr2); \
*pval = val; \
if(ptr > ptr2) return 0; \
@@ -401,16 +465,20 @@
gchar *ptr2; \
type val; \
ptype *pval; \
+ const gchar *delim; \
if(!lng) return 0; \
+ delim = part->delimiter; \
+ if(!delim && !part->next) delim = "\n"; \
pval = &ctx->data_store[part->index].pname; \
ctx->props_store[part->index] = pval; \
- if(!part->delimiter[0]) { \
+ if(!delim[0]) { \
val = g_ascii_strtoull(str, &ptr, base); \
- *pval = val; \
+ *pval = val; \
return ptr - str; \
} \
for(ptr = str; g_ascii_isspace(*ptr); ptr++); \
- ptr = g_strstr_len(ptr, lng, part->delimiter); \
+ ptr = g_strstr_len(ptr, lng, delim); \
+ if(!ptr) return 0; \
val = g_ascii_strtoull(str, &ptr2, base); \
*pval = val; \
if(ptr > ptr2) return 0; \
@@ -427,24 +495,32 @@
const gchar *ptr;
gchar val;
gchar *pval;
+ const gchar *delim;
if(!lng)
return 0;
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
pval = &ctx->data_store[part->index].c;
ctx->props_store[part->index] = pval;
- if(!part->delimiter[0])
+ if(!delim[0])
{
- val = *str;
- *pval = val;
+ val = *str;
+ *pval = val;
return 1;
}
//for(ptr = str; g_ascii_isspace(*ptr); ptr++);
- ptr = g_strstr_len(str, lng, part->delimiter);
+ ptr = g_strstr_len(str, lng, delim);
+ if(!ptr)
+ return 0;
+
//FIXME?
val = *(ptr-1);
*pval = val;
@@ -469,19 +545,27 @@
{
gchar *ptr;
gchar *cur;
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter[0])
+ delim = part->delimiter;
+ if(!delim && !part->next)
+ delim = "\n";
+
+ if(!delim[0])
return 0;
for(cur = str; g_ascii_isspace(*cur); cur++);
- ptr = g_strstr_len(cur, lng, part->delimiter);
+ ptr = g_strstr_len(cur, lng, delim);
- ctx->props_store[part->index] = g_strndup(cur, ptr-cur);
+ if(!ptr)
+ return 0;
+ g_debug("string: %s", (gchar*)(ctx->props_store[part->index] = g_strndup(cur, ptr-cur)));
+
return ptr - str;
}
@@ -498,15 +582,24 @@
guint parse_filename(gchar *str, guint lng, parse_part *part, LSQScanfParserContext *ctx)
{
gchar *ptr;
+ const gchar *delim;
if(!lng)
return 0;
- if(!part->delimiter)
- return 1;
+ delim = part->delimiter;
- ptr = g_strstr_len(str, lng, part->delimiter);
+ if(!delim && !part->next)
+ delim = "\n";
+ if(!delim[0])
+ return 0;
+
+ ptr = g_strstr_len(str, lng, delim);
+
+ if(!ptr)
+ return 0;
+
ctx->filename = g_strndup(str, ptr-str);
return ptr - str;
@@ -1030,14 +1123,22 @@
gchar *line, *ptr;
gsize line_length, lng;
guint size, line_nr;
+ parse_part *part;
if(!lsq_parser_context_get_line(LSQ_PARSER_CONTEXT(ctx), &line, &line_length))
return;
+
ptr = line;
lng = line_length;
line_nr = ctx->parse_line;
+ part = ctx->parse_loc;
- parse_part *part = ctx->parse_loc;
+ if(!part)
+ {
+ ctx->parse_loc = part = parser->parser;
+ ctx->parse_line = line_nr = 0;
+ }
+
while(part)
{
//parse
@@ -1066,37 +1167,43 @@
if(part->delimiter)
{
- if(!g_str_has_prefix(ptr, part->delimiter))
+ if(!g_str_has_prefix(ptr, part->delimiter))
+ {
+ //no match
+ if(line_nr)
{
- //no match
- if(line_nr)
- {
- ptr = line;
- lng = line_length;
- part = parser->parser;
- line_nr = 0;
- continue;
- }
- ctx->parse_loc = parser->parser;
- ctx->parse_line = 0;
- g_free(line);
- return;
+ ptr = line;
+ lng = line_length;
+ part = parser->parser;
+ line_nr = 0;
+ continue;
}
+ ctx->parse_loc = parser->parser;
+ ctx->parse_line = 0;
+ g_free(line);
+ return;
+ }
+
+ size = strlen(part->delimiter);
+ if(size > lng)
+ size = lng;
+ ptr += size;
+ lng -= size;
}
if(part->delimiter)
{
- if(g_str_has_suffix(part->delimiter, "\n"))
+ if(g_str_has_suffix(part->delimiter, "\n"))
+ {
+ //next line
+ if(part->next)
{
- //next line
- if(part->next)
- {
- ctx->parse_loc = part->next;
- ctx->parse_line = line_nr+1;
- g_free(line);
- return;
- }
+ ctx->parse_loc = part->next;
+ ctx->parse_line = line_nr+1;
+ g_free(line);
+ return;
}
+ }
}
part = part->next;
@@ -1106,6 +1213,7 @@
if(!part)
{
+ g_debug("file: %s", ctx->filename);
LSQArchiveIter *iter = lsq_archive_add_file(LSQ_PARSER_CONTEXT(ctx)->archive, ctx->filename);
lsq_archive_iter_set_propsv(iter, ctx->props_store);
lsq_archive_iter_unref(iter);
More information about the Xfce4-commits
mailing list