Hello,

Le 25/01/2013, Rudra Banerjee <rudra.baner...@aol.co.uk> a écrit :
> What I have ended up with is something like:
>   FILE *fopf = fopen(filename, "a" );
>   if (!fopf){
>     filename="Untitled.bib";
>     fopf= fopen(filename,"a");
>   }
>   char buffer[]="Hello World";
>   int buf_size= strlen(buffer)+1;
>   fwrite(buffer,buf_size,1,fopf);
>   if(!buffer){
>     printf("failed");
>   }
> //  fclose(fopf);
I guess this part is first try, it's unnecessary when using
g_file_set_contents().

>   GString *fop=g_string_new(NULL);
>   g_string_append_printf( fop,buffer);
> 
>   gtk_label_set_text(GTK_LABEL(flabel), filename);
>     g_string_append_printf( fop, "@%s{%s,\n", strcombo, strkey );
>   if( strlen(strAuth)!=0)
>     g_string_append_printf( fop, "\tAuthor=\"%s\",\n", strAuth);
>   if( strlen(strEditor)!=0)
>     g_string_append_printf( fop, "\tEditor=\"%s\",\n", strEditor);
>   if( strlen(strSchool)!=0)
>     g_string_append_printf( fop, "\tSchool=\"%s\",\n", strSchool);
>     g_string_append_printf( fop, "}\n");
> //  fclose(fop);
Up to here, I'm OK.

>     g_file_set_contents(filename,
>       fop,
>       1026,
>       NULL);
The issue is here, have a look to the API of GString. GString struct is
a wrapper on a string for it to auto expand. So fop is *not* the string
but the wrapper. So the call should be
success = g_file_set_contents(filename, fop->str, -1, &error);
the actual string contained in the GString wrapper is the ->str
attribute. The length is autmatic with -1 (because ->str is a zero
terminated char array) and you can catchup error if any (or not by
passing NULL as you did).

Remember to free the GString *and* the char array buffer by calling
g_string_free(fop, TRUE); (see the doc on the API page for the meaning
of TRUE).

Have a nice day,

Damien.
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to