summaryrefslogtreecommitdiffstats
path: root/lexer
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2017-03-13 16:17:11 +0100
committerDave Davenport <qball@gmpclient.org>2017-03-13 16:17:11 +0100
commitd67a562d884bbb8152bf75a21e97f7539a75bd25 (patch)
treead2c39393076b8e1a7ce2b9731a0270c3bee7733 /lexer
parentab9a2b05d3fcccbf8544e0f364c570a4af747c0f (diff)
Get full canonical path for duplicate filtering.
Diffstat (limited to 'lexer')
-rw-r--r--lexer/theme-lexer.l33
1 files changed, 23 insertions, 10 deletions
diff --git a/lexer/theme-lexer.l b/lexer/theme-lexer.l
index 5caefaeb..110b23f7 100644
--- a/lexer/theme-lexer.l
+++ b/lexer/theme-lexer.l
@@ -4,6 +4,7 @@
%{
#include <stdio.h>
#include <glib.h>
+#include <gio/gio.h>
#include <helper.h>
#include "rofi.h"
@@ -49,6 +50,7 @@ GQueue *queue = NULL;
ParseObject *current = NULL;
+static char * rofi_theme_parse_prepare_file ( const char *file, const char *parent_file );
%}
%{
@@ -198,15 +200,7 @@ if ( queue == NULL ){
yytext[yyleng-1] = '\0';
ParseObject *top = g_queue_peek_head ( file_queue );
g_assert ( top != NULL );
- char *filename = rofi_expand_path ( &yytext[1] );
- // If no absolute path specified, expand it.
- if ( ! g_path_is_absolute ( filename ) && top->type == PT_FILE ) {
- char *basedir = g_path_get_dirname ( top->filename );
- char *path = g_build_filename ( basedir, filename, NULL );
- g_free ( filename);
- filename = path;
- g_free ( basedir );
- }
+ char *filename = rofi_theme_parse_prepare_file ( &yytext[1], top->filename );
if ( g_list_find_custom ( imported_files, filename, (GCompareFunc)g_strcmp0 ) != NULL ) {
g_log ( LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Skipping file: '%s' already parsed.", filename );
} else {
@@ -493,9 +487,28 @@ if ( queue == NULL ){
}
%%
-gboolean rofi_theme_parse_file ( const char *file )
+
+static char * rofi_theme_parse_prepare_file ( const char *file, const char *parent_file )
{
char *filename = rofi_expand_path ( file );
+ // If no absolute path specified, expand it.
+ if ( parent_file != NULL && ! g_path_is_absolute ( filename ) ) {
+ char *basedir = g_path_get_dirname ( parent_file );
+ char *path = g_build_filename ( basedir, filename, NULL );
+ g_free ( filename);
+ filename = path;
+ g_free ( basedir );
+ }
+ GFile *gf = g_file_new_for_path ( filename );
+ g_free(filename);
+ filename = g_file_get_path ( gf );
+ g_object_unref ( gf );
+
+ return filename;
+}
+gboolean rofi_theme_parse_file ( const char *file )
+{
+ char *filename = rofi_theme_parse_prepare_file ( file, NULL );
yyin = fopen ( filename, "rb" );
if ( yyin == NULL ) {
char *str = g_markup_printf_escaped ( "Failed to open theme: <i>%s</i>\nError: <b>%s</b>",