Peter Wehrfritz ha scritto:
> Gustavo Sverzut Barbieri schrieb:
>   
>> On Nov 23, 2007 3:45 AM, Dave <[EMAIL PROTECTED]> wrote:
>>   
>>     
>>> Hi all,
>>> I recently have a strange bug in the editor that prevent from saving all
>>> the file.
>>> The problem is that engrave write out an edc with all the floating numbers
>>> having the wrong separator-char ( 0,0 instead of 0.0 ).
>>> The strange think is that engrave_test seems to work well
>>> Someone else have this error?
>>> To try simply create a new group,a new rectangle and save the file.
>>> I have this error:
>>>
>>> Executing: edje_cc -v   /tmp/edje_editor_tmp.edc-pQu69c "/home/dave/as"
>>> edje_cc: Error. parse error :22. , marker before ; marker
>>> Error in edje_cc, exit code:  25
>>>
>>> and in fact the tmp file have ( , ) instead of ( . ) in numbers
>>>
>>>
>>> The tmp file is generated by engrave_edc_output() that write the value
>>> with this function:
>>>
>>> static void
>>> engrave_out_data(FILE *out, char *name, char *fmt, ...)
>>> {
>>>     va_list ap;
>>>     char *fmt_new = (char *)calloc(strlen(fmt) + strlen(name) + level +
>>> 5, sizeof(char));
>>>     char *buf = engrave_output_mk_tabs();
>>>
>>>     sprintf(fmt_new, "%s%s: %s;\n", buf, name, fmt);
>>>     va_start(ap, fmt);
>>>     vfprintf(out, fmt_new, ap);
>>>     va_end(ap);
>>>     FREE(fmt_new);
>>>     FREE(buf);
>>> }
>>>
>>>
>>> So seems that vfprintf() write the %.2f param wrong. Is this possible?
>>> is vfprintf()  l18n?
>>>     
>>>       
>> yes, it is. I'm not sure how to disable it just for some functions
>> tough. A quick look at its man page says that every format would use
>> the locale to format, but maybe there is some that I missed.
>>   
>>     
> Don't think there is a really nice way to do this. The only way I know 
> is this:
>     char prev[128];
>
>     strncpy(prev, setlocale(LC_NUMERIC, NULL), sizeof(prev));
>
>     setlocale(LC_NUMERIC, "C");
>     printf("%f\n", 123.3);
>     setlocale(LC_NUMERIC, prev);
>
>   
Yes thanks, this works !!
This is the patch for engrave, can I commit it?(my editor is badly broken
without) or someone know a better way?

Index: src/lib/engrave_out.c
===================================================================
RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_out.c,v
retrieving revision 1.47
diff -u -r1.47 engrave_out.c
--- src/lib/engrave_out.c       9 Nov 2007 09:15:19 -0000       1.47
+++ src/lib/engrave_out.c       24 Nov 2007 15:27:34 -0000
@@ -1,6 +1,7 @@
 #include <errno.h>
 #include <unistd.h>
 #include <stdio.h>
+#include <locale.h>
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
@@ -191,6 +192,7 @@
 engrave_edc_output(Engrave_File *engrave_file, const char *path)
 {
   FILE *out = NULL;
+  char locale[128];

   if (!engrave_file) return 0;

@@ -201,6 +203,10 @@
     return 0;
   }

+  /* set locale posix compliant*/
+  strncpy(locale, setlocale(LC_NUMERIC, NULL), sizeof(locale));
+  setlocale(LC_NUMERIC, "C");
+
   /* fonts */
   engrave_out_start(out, "fonts");
   engrave_file_font_foreach(engrave_file, _engrave_output_font, out);
@@ -237,6 +243,10 @@
   engrave_out_end(out);

   fclose(out);
+ 
+  /* reset locale to system default*/
+  setlocale(LC_NUMERIC, locale);
+ 
   return 1;
 }





-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to