[Initng-svn] r3793 - initng-gui/initng-gnome/src
svn at initng.thinktux.net
svn at initng.thinktux.net
Thu Apr 13 11:44:39 CEST 2006
Author: danne
Date: Thu Apr 13 11:44:36 2006
New Revision: 3793
Modified:
initng-gui/initng-gnome/src/callbacks.c
initng-gui/initng-gnome/src/ngehandler.c
initng-gui/initng-gnome/src/serviceparser.c
initng-gui/initng-gnome/src/serviceparser.h
Log:
Heavy changes are in the move. Things may not work right now...
Modified: initng-gui/initng-gnome/src/callbacks.c
==============================================================================
--- initng-gui/initng-gnome/src/callbacks.c (original)
+++ initng-gui/initng-gnome/src/callbacks.c Thu Apr 13 11:44:36 2006
@@ -281,7 +281,7 @@
}
void on_ok_edit_service_button_clicked(GtkButton *button, gpointer user_data) {
- GtkWidget *textview = glade_xml_get_widget(xml_show_service, "service_textview");
+ /* GtkWidget *textview = glade_xml_get_widget(xml_show_service, "service_textview");
GtkTreeSelection *selected;
GtkTreeIter iter;
GtkTreeModel *model;
@@ -296,14 +296,14 @@
gtk_tree_selection_get_selected(selected, &model, &iter);
struct s_info *serviceinfo;
gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
- serviceinfo->needs_saving = TRUE;
+ serviceinfo->file_content->needs_saving = TRUE;
gtk_text_buffer_get_bounds(buffer, &start, &end);
serviceinfo->data = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
gtk_widget_set_sensitive(save_button, TRUE);
gtk_widget_set_sensitive(save1, TRUE);
- gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(button)));
+ gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(button)));*/
}
void on_show_runlevel_editor_activate (GtkMenuItem *menuitem, gpointer user_data)
Modified: initng-gui/initng-gnome/src/ngehandler.c
==============================================================================
--- initng-gui/initng-gnome/src/ngehandler.c (original)
+++ initng-gui/initng-gnome/src/ngehandler.c Thu Apr 13 11:44:36 2006
@@ -54,7 +54,7 @@
2, NULL, 4, serviceinfo, -1);
serviceinfo->name = service;
serviceinfo->type = UNKNOWN;
- serviceinfo->path = NULL;
+ serviceinfo->file_content = NULL;
}
struct s_info *serviceinfo;
Modified: initng-gui/initng-gnome/src/serviceparser.c
==============================================================================
--- initng-gui/initng-gnome/src/serviceparser.c (original)
+++ initng-gui/initng-gnome/src/serviceparser.c Thu Apr 13 11:44:36 2006
@@ -77,7 +77,7 @@
}
void servicelist_cleanup() {
- GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
+ /*GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
GtkTreeModelSort *sortmodel = GTK_TREE_MODEL_SORT(gtk_tree_view_get_model(service_list));
GtkTreeModelFilter *filtermodel = GTK_TREE_MODEL_FILTER(gtk_tree_model_sort_get_model(sortmodel));
GtkTreeModel *model = gtk_tree_model_filter_get_model(filtermodel);
@@ -92,36 +92,48 @@
g_free(serviceinfo->name);
g_free(serviceinfo->path);
g_free(serviceinfo->startline);
+ //FIXME: Can't just free memory, since more serviceinfo's may point at same filecontents
+ //if(serviceinfo->filecontents)
+ //g_free(serviceinfo->file_contents);
g_free(serviceinfo);
valid = gtk_tree_model_iter_next(model, &iter);
- }
+ }*/
}
void recursive_scan(char* path, GtkListStore *store) {
GtkTreeIter iter;
struct s_info *serviceinfo;
+ struct s_file_content *file_content;
struct dirent **namelist;
int n = scandir(path, &namelist, &filefilter, alphasort);
if(n < 0)
perror("Unable to read directory");
else {
+ FILE *file, *stream;
while(n--) {
struct stat buff;
char *fullpath = malloc(strlen(path) + strlen(namelist[n]->d_name) + 2);
sprintf(fullpath, "%s/%s", path, namelist[n]->d_name);
+ fprintf(stderr, "Opening file %s\n", fullpath);
if(lstat(fullpath, &buff)<0)
- perror("Strange fault!");
- if(S_ISDIR(buff.st_mode))
+ break;
+ if(S_ISDIR(buff.st_mode)) {
recursive_scan(fullpath, store);
- else if(!fnmatch("*.i", namelist[n]->d_name, 0)) {
- FILE *file = fopen(fullpath, "rt"); /* Open file. */
-
- if (file == NULL)
+ free(fullpath);
+ } else if(!fnmatch("*.i", namelist[n]->d_name, 0)) {
+ file_content = malloc(sizeof(struct s_file_content));
+ file_content->data = malloc(buff.st_size + 1);
+ file = fopen(fullpath, "rt"); /* Open file. */
+ if (file == NULL)
continue;
-
+ fread(file_content->data, buff.st_size, 1, file);
+ file_content->data[buff.st_size] = 0;
+ file_content->needs_saving = FALSE;
+ file_content->path = fullpath;
+ stream = (FILE*)fmemopen(file_content->data, strlen(file_content->data), "r");
char* buffer = malloc(255); //UGLY!
- while(fgets(buffer, 255, file) > 0) {
+ while(fgets(buffer, 255, stream) > 0) {
if(strstr(buffer, "daemon") == buffer) {
serviceinfo = malloc(sizeof(struct s_info));
serviceinfo->startline = malloc(strlen(buffer) + 1);
@@ -132,9 +144,7 @@
gtk_list_store_set (store, &iter, 0, tok, 1, "daemon", 2, NULL, 4, serviceinfo, -1);
serviceinfo->name = tok;
serviceinfo->type = DAEMON;
- serviceinfo->path = fullpath;
- serviceinfo->needs_saving = FALSE;
- serviceinfo->data = NULL;
+ serviceinfo->file_content = file_content;
} else if(strstr(buffer, "service") == buffer) {
serviceinfo = malloc(sizeof(struct s_info));
serviceinfo->startline = malloc(strlen(buffer) + 1);
@@ -145,9 +155,7 @@
gtk_list_store_set (store, &iter, 0, tok, 1, "service", 2, NULL, 4, serviceinfo, -1);
serviceinfo->name = tok;
serviceinfo->type = SERVICE;
- serviceinfo->path = fullpath;
- serviceinfo->needs_saving = FALSE;
- serviceinfo->data = NULL;
+ serviceinfo->file_content = file_content;
} else if(strstr(buffer, "virtual") == buffer) {
serviceinfo = malloc(sizeof(struct s_info));
serviceinfo->startline = malloc(strlen(buffer) + 1);
@@ -158,14 +166,21 @@
gtk_list_store_set (store, &iter, 0, tok, 1, "virtual", 2, NULL, 4, serviceinfo, -1);
serviceinfo->name = tok;
serviceinfo->type = VIRTUAL;
- serviceinfo->path = fullpath;
- serviceinfo->needs_saving = FALSE;
- serviceinfo->data = NULL;
+ serviceinfo->file_content = file_content;
}
}
fclose(file);
free(buffer);
} else if(!fnmatch("*.runlevel", namelist[n]->d_name, 0)) {
+ file_content = malloc(sizeof(struct s_file_content));
+ file_content->data = malloc(buff.st_size + 1);
+ file = fopen(fullpath, "rt"); /* Open file. */
+ if (file == NULL)
+ continue;
+ fread(file_content->data, buff.st_size, 1, file);
+ file_content->data[buff.st_size] = 0;
+ file_content->needs_saving = FALSE;
+ file_content->path = fullpath;
serviceinfo = malloc(sizeof(struct s_info));
namelist[n]->d_name[strlen(namelist[n]->d_name)-9] = 0;
gtk_list_store_prepend (store, &iter);
@@ -173,11 +188,18 @@
2, NULL, 4, serviceinfo, -1);
serviceinfo->name = namelist[n]->d_name;
serviceinfo->type = RUNLEVEL;
- serviceinfo->path = fullpath;
serviceinfo->startline = NULL;
- serviceinfo->needs_saving = FALSE;
- serviceinfo->data = NULL;
+ serviceinfo->file_content = file_content;
} else if(!fnmatch("*.virtual", namelist[n]->d_name, 0)) {
+ file_content = malloc(sizeof(struct s_file_content));
+ file_content->data = malloc(buff.st_size + 1);
+ file = fopen(fullpath, "rt"); /* Open file. */
+ if (file == NULL)
+ continue;
+ fread(file_content->data, buff.st_size, 1, file);
+ file_content->data[buff.st_size] = 0;
+ file_content->needs_saving = FALSE;
+ file_content->path = fullpath;
serviceinfo = malloc(sizeof(struct s_info));
namelist[n]->d_name[strlen(namelist[n]->d_name)-8] = 0;
gtk_list_store_prepend (store, &iter);
@@ -185,10 +207,10 @@
2, NULL, 4, serviceinfo, -1);
serviceinfo->name = namelist[n]->d_name;
serviceinfo->type = VIRTUALFILE;
- serviceinfo->path = fullpath;
serviceinfo->startline = NULL;
- serviceinfo->needs_saving = FALSE;
- serviceinfo->data = NULL;
+ serviceinfo->file_content = file_content;
+ } else {
+ free(fullpath);
}
free(namelist[n]);
}
@@ -197,36 +219,34 @@
}
void load_service(GtkWidget *treeview) {
- GtkWidget *service_textview;
- GtkTreeSelection *selected;
- GtkTextBuffer *buffer;
+ GtkWidget *service_textview = glade_xml_get_widget(xml_show_service, "service_textview");
+ GtkTreeSelection *selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(service_textview));
GtkTreeIter iter;
GtkTreeModel *model;
gchar *servicename;
struct stat buff;
- FILE *file;
+ FILE *stream;
gchar res;
int depth = 1;
GtkTextIter start, end;
- service_textview = glade_xml_get_widget(xml_show_service, "service_textview");
- buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(service_textview));
- selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-
gtk_tree_selection_get_selected(selected, &model, &iter);
struct s_info *serviceinfo;
gtk_tree_model_get(model, &iter, 0, &servicename, 4, &serviceinfo, -1);
+ struct s_file_content *file_content = serviceinfo->file_content;
- if(lstat(serviceinfo->path, &buff)<0)
+ if(lstat(file_content->path, &buff)<0)
perror("Strange fault!");
- file = fopen(serviceinfo->path, "rt");
- if (file == NULL)
+ //file = fopen(serviceinfo->path, "rt");
+ stream = (FILE*)fmemopen(file_content->data, strlen(file_content->data), "r");
+ if (stream == NULL)
return;
if(serviceinfo->type != RUNLEVEL && serviceinfo->type != VIRTUALFILE) {
char* temp = malloc(255); //UGLY!
- while(fgets(temp, 255, file) > 0) {
+ while(fgets(temp, 255, stream) > 0) {
if(strcmp(temp, serviceinfo->startline) == 0) {
break;
}
@@ -236,30 +256,25 @@
gtk_text_buffer_set_text(buffer, "", 0);
- if(!serviceinfo->data) {
- fprintf(stderr, "Loading service\n");
- do {
- res = fgetc(file);
- if(res == '{') {
- depth++;
- } else if(res == '}') {
- depth--;
- }
- if(depth <= 0 || res == EOF)
- break;
- gtk_text_buffer_insert_at_cursor(buffer, &res, 1);
- } while(TRUE);
- gtk_text_buffer_get_bounds(buffer, &start, &end);
- serviceinfo->data = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
- } else {
- gtk_text_buffer_insert_at_cursor(buffer, serviceinfo->data, strlen(serviceinfo->data));
- }
+ fprintf(stderr, "Loading service\n");
+ do {
+ res = fgetc(stream);
+ if(res == '{') {
+ depth++;
+ } else if(res == '}') {
+ depth--;
+ }
+ if(depth <= 0 || res == EOF)
+ break;
+ gtk_text_buffer_insert_at_cursor(buffer, &res, 1);
+ } while(TRUE);
+ gtk_text_buffer_get_bounds(buffer, &start, &end);
g_free(servicename);
}
void save_all_services() {
- GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
+ /*GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
GtkTreeModelSort *sortmodel = GTK_TREE_MODEL_SORT(gtk_tree_view_get_model(service_list));
GtkTreeModelFilter *filtermodel = GTK_TREE_MODEL_FILTER(gtk_tree_model_sort_get_model(sortmodel));
GtkTreeModel *model = gtk_tree_model_filter_get_model(filtermodel);
@@ -277,7 +292,7 @@
fputs(serviceinfo->data, file);
}
valid = gtk_tree_model_iter_next(model, &iter);
- }
+ }*/
}
gint service_sorter(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) {
Modified: initng-gui/initng-gnome/src/serviceparser.h
==============================================================================
--- initng-gui/initng-gnome/src/serviceparser.h (original)
+++ initng-gui/initng-gnome/src/serviceparser.h Thu Apr 13 11:44:36 2006
@@ -40,14 +40,24 @@
UNKNOWN
};
-struct s_info {
+struct s_file_content {
+ char *data;
+ gboolean needs_saving;
char *path;
+};
+
+struct s_info {
+ //char *path;
char *name;
char type;
char *startline;
e_is status_id;
- gboolean needs_saving;
- gchar *data;
+ //gboolean needs_saving;
+ //char *file_contents;
+ //gchar *data;
+ struct s_file_content *file_content;
};
+
+
#endif
More information about the Initng-svn
mailing list