I''m trying to use some functions from the Gnome GIO library to get extended file attributes. I''m doing this by writing a C extension using the wonderful directions in http://www.rubycentral.com/pickaxe/ext_ruby.html. All that being said, I don''t really know Gnome or GTK+ at all, but I thought my little code would be OK. So I have the library built (rubygio.so) and the code all executes fine. Problem is the gio api calls don''t return any info when I think they should. I''m guessing there is some initialization stuff I''m missing or maybe I have to have a window going or something. Any help would be appreciated. The C code to get the attributes looks like this: static VALUE rbgio_load_attributes(VALUE self) { VALUE arr = rb_iv_get(self, "@attribute_array"); VALUE names = rb_iv_get(self, "@name_array"); VALUE path = rb_iv_get(self, "@path"); GFile *ptr = g_file_new_for_path(STR2CSTR(path)); GError *gerror = NULL; GFileInfo *finfo = g_file_query_info(ptr, "*", 0, NULL, &gerror); if (finfo == NULL) { return INT2NUM(0); } char **attributes = g_file_info_list_attributes(finfo, "*"); int i = 0; while (attributes[i] != NULL) { rb_ary_push(names, rb_str_new2(attributes[i])); rb_ary_push(arr, rb_str_new2(g_file_info_get_attribute_as_string (finfo, attributes[i]))); i++; } return INT2NUM(1) } Again it all runs (i''ve run it in gdb and examined variables). The GFile *ptr is a real address, the GFileInfo *finfo is a real thing and the char** attributes is a valid list with no entries. Any clues would be greatly appreciated. I will put the extension out there once completed. Mike --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I see gets but no sets on those ivars you''re trying to manipulate. I wouldn''t assume that you''re editing the values in-place instead of a copy of what the ivars contained unless you''ve proven that''s what you''ve got (I think that sentence makes sense ...). Given that you''re saying the code doesn''t work, try adding the following 3 lines to the end of the method: rb_iv_set(self, "@attributes_array", arr); rb_iv_set(self, "@name_array", names); rb_iv_set(self, "@path", path); Jason On Thu, Mar 12, 2009 at 10:58 AM, mvargo <mfvargo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > I''m trying to use some functions from the Gnome GIO library to get > extended file attributes. I''m doing this by writing a C extension > using the wonderful directions in http://www.rubycentral.com/pickaxe/ext_ruby.html. > All that being said, I don''t really know Gnome or GTK+ at all, but I > thought my little code would be OK. > > So I have the library built (rubygio.so) and the code all executes > fine. Problem is the gio api calls don''t return any info when I think > they should. I''m guessing there is some initialization stuff I''m > missing or maybe I have to have a window going or something. Any help > would be appreciated. > > The C code to get the attributes looks like this: > > static VALUE rbgio_load_attributes(VALUE self) > { > VALUE arr = rb_iv_get(self, "@attribute_array"); > VALUE names = rb_iv_get(self, "@name_array"); > VALUE path = rb_iv_get(self, "@path"); > > GFile *ptr = g_file_new_for_path(STR2CSTR(path)); > GError *gerror = NULL; > GFileInfo *finfo = g_file_query_info(ptr, "*", 0, NULL, &gerror); > if (finfo == NULL) { > return INT2NUM(0); > } > char **attributes = g_file_info_list_attributes(finfo, "*"); > int i = 0; > while (attributes[i] != NULL) { > rb_ary_push(names, rb_str_new2(attributes[i])); > rb_ary_push(arr, rb_str_new2(g_file_info_get_attribute_as_string > (finfo, attributes[i]))); > i++; > } > return INT2NUM(1) > } > > Again it all runs (i''ve run it in gdb and examined variables). The > GFile *ptr is a real address, the GFileInfo *finfo is a real thing and > the char** attributes is a valid list with no entries. > > Any clues would be greatly appreciated. I will put the extension out > there once completed. > > Mike > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Sorry, I did not put the whole file in the post. Those are in the init module. static VALUE rbgio_init(VALUE self, VALUE path) { VALUE arr, names; rb_iv_set(self, "@path", path); arr = rb_ary_new(); names = rb_ary_new(); rb_iv_set(self, "@attribute_array", arr); rb_iv_set(self, "@name_array", names); return self; } Thanks for looking. I''m starting to suspect I have to do something to initialize the library. I have a call to gdk_init(argc, argv) in the module initialization, but maybe there is something more? Maybe I can''t use the library without creating a window? Not sure. Mike On Mar 12, 8:06 am, Jason Roelofs <jameskil...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I see gets but no sets on those ivars you''re trying to manipulate. I > wouldn''t assume that you''re editing the values in-place instead of a > copy of what the ivars contained unless you''ve proven that''s what > you''ve got (I think that sentence makes sense ...). > > Given that you''re saying the code doesn''t work, try adding the > following 3 lines to the end of the method: > > rb_iv_set(self, "@attributes_array", arr); > rb_iv_set(self, "@name_array", names); > rb_iv_set(self, "@path", path); > > Jason > > On Thu, Mar 12, 2009 at 10:58 AM, mvargo <mfva...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > I''m trying to use some functions from the Gnome GIO library to get > > extended file attributes. I''m doing this by writing a C extension > > using the wonderful directions inhttp://www.rubycentral.com/pickaxe/ext_ruby.html. > > All that being said, I don''t really know Gnome or GTK+ at all, but I > > thought my little code would be OK. > > > So I have the library built (rubygio.so) and the code all executes > > fine. Problem is the gio api calls don''t return any info when I think > > they should. I''m guessing there is some initialization stuff I''m > > missing or maybe I have to have a window going or something. Any help > > would be appreciated. > > > The C code to get the attributes looks like this: > > > static VALUE rbgio_load_attributes(VALUE self) > > { > > VALUE arr = rb_iv_get(self, "@attribute_array"); > > VALUE names = rb_iv_get(self, "@name_array"); > > VALUE path = rb_iv_get(self, "@path"); > > > GFile *ptr = g_file_new_for_path(STR2CSTR(path)); > > GError *gerror = NULL; > > GFileInfo *finfo = g_file_query_info(ptr, "*", 0, NULL, &gerror); > > if (finfo == NULL) { > > return INT2NUM(0); > > } > > char **attributes = g_file_info_list_attributes(finfo, "*"); > > int i = 0; > > while (attributes[i] != NULL) { > > rb_ary_push(names, rb_str_new2(attributes[i])); > > rb_ary_push(arr, rb_str_new2(g_file_info_get_attribute_as_string > > (finfo, attributes[i]))); > > i++; > > } > > return INT2NUM(1) > > } > > > Again it all runs (i''ve run it in gdb and examined variables). The > > GFile *ptr is a real address, the GFileInfo *finfo is a real thing and > > the char** attributes is a valid list with no entries. > > > Any clues would be greatly appreciated. I will put the extension out > > there once completed. > > > Mike--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---