From: auroux
Date: Sun, 6 Aug 2006 21:38:12 +0000 (+0000)
Subject: Update to 0.3.1 (fix bug with LC_NUMERIC)
X-Git-Url: https://git.donarmstrong.com/?p=xournal.git;a=commitdiff_plain;h=3d2aca5e4781cf52291afc063e37b65f61638df8
Update to 0.3.1 (fix bug with LC_NUMERIC)
---
diff --git a/ChangeLog b/ChangeLog
index b0cec9e..77b7739 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+Version 0.3.1 (Aug 3, 2006):
+ - fixed a file format bug on systems with non-standard numeric locale
+
Version 0.3 (Jul 23, 2006):
- new PDF rendering engine: export to PDF generates optimized files
(smaller and more accurate)
diff --git a/NEWS b/NEWS
index f48165a..59b1c49 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-Version 0.3 (July 23, 2006)
+Version 0.3.1 (August 3, 2006)
Installation: see INSTALL
User's manual: see html-doc/manual.html
diff --git a/README b/README
index f48165a..59b1c49 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Version 0.3 (July 23, 2006)
+Version 0.3.1 (August 3, 2006)
Installation: see INSTALL
User's manual: see html-doc/manual.html
diff --git a/configure.in b/configure.in
index e16b40f..a898e98 100644
--- a/configure.in
+++ b/configure.in
@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(configure.in)
-AM_INIT_AUTOMAKE(xournal, 0.3)
+AM_INIT_AUTOMAKE(xournal, 0.3.1)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
diff --git a/html-doc/manual.html b/html-doc/manual.html
index 5ed2718..be75dea 100644
--- a/html-doc/manual.html
+++ b/html-doc/manual.html
@@ -24,7 +24,7 @@
Xournal User's Manual
- Version 0.3
+ Version 0.3.1
@@ -499,6 +499,11 @@ Bug reports and suggestions can also be submitted on Xournal's
Version history
+Version 0.3.1 (August 3, 2006):
+
+ - fixed a file format bug on systems with non-standard numeric locale
+
+
Version 0.3 (July 23, 2006):
- new PDF rendering engine: export to PDF generates optimized files
diff --git a/src/xo-file.c b/src/xo-file.c
index 1afcd18..04992f9 100644
--- a/src/xo-file.c
+++ b/src/xo-file.c
@@ -13,6 +13,7 @@
#include
#include
#include
+#include
#include "xournal.h"
#include "xo-interface.h"
@@ -81,6 +82,8 @@ gboolean save_journal(const char *filename)
f = gzopen(filename, "w");
if (f==NULL) return FALSE;
chk_attach_names();
+
+ setlocale(LC_NUMERIC, "C");
gzprintf(f, "\n"
"Xournal document - see http://math.mit.edu/~auroux/software/xournal/\n"
@@ -179,6 +182,8 @@ gboolean save_journal(const char *filename)
gzprintf(f, "\n");
}
gzclose(f);
+ setlocale(LC_NUMERIC, "");
+
return TRUE;
}
@@ -201,6 +206,13 @@ gboolean close_journal(void)
use new_journal() to reinitialize them */
}
+// sanitize a string containing floats, in case it may have , instead of .
+
+void cleanup_numeric(char *s)
+{
+ while (*s!=0) { if (*s==',') *s='.'; s++; }
+}
+
// the XML parser functions for open_journal()
struct Journal tmpJournal;
@@ -253,13 +265,15 @@ void xoj_parser_start_element(GMarkupParseContext *context,
while (*attribute_names!=NULL) {
if (!strcmp(*attribute_names, "width")) {
if (has_attr & 1) *error = xoj_invalid();
- tmpPage->width = strtod(*attribute_values, &ptr);
+ cleanup_numeric((gchar *)*attribute_values);
+ tmpPage->width = g_ascii_strtod(*attribute_values, &ptr);
if (ptr == *attribute_values) *error = xoj_invalid();
has_attr |= 1;
}
else if (!strcmp(*attribute_names, "height")) {
if (has_attr & 2) *error = xoj_invalid();
- tmpPage->height = strtod(*attribute_values, &ptr);
+ cleanup_numeric((gchar *)*attribute_values);
+ tmpPage->height = g_ascii_strtod(*attribute_values, &ptr);
if (ptr == *attribute_values) *error = xoj_invalid();
has_attr |= 2;
}
@@ -374,7 +388,7 @@ void xoj_parser_start_element(GMarkupParseContext *context,
else if (!strcmp(*attribute_names, "pageno")) {
if (tmpPage->bg->type != BG_PDF || (has_attr & 32))
{ *error = xoj_invalid(); return; }
- tmpPage->bg->file_page_seq = strtod(*attribute_values, &ptr);
+ tmpPage->bg->file_page_seq = strtol(*attribute_values, &ptr, 10);
if (ptr == *attribute_values) *error = xoj_invalid();
has_attr |= 32;
}
@@ -415,7 +429,8 @@ void xoj_parser_start_element(GMarkupParseContext *context,
while (*attribute_names!=NULL) {
if (!strcmp(*attribute_names, "width")) {
if (has_attr & 1) *error = xoj_invalid();
- tmpItem->brush.thickness = strtod(*attribute_values, &ptr);
+ cleanup_numeric((gchar *)*attribute_values);
+ tmpItem->brush.thickness = g_ascii_strtod(*attribute_values, &ptr);
if (ptr == *attribute_values) *error = xoj_invalid();
has_attr |= 1;
}
@@ -496,11 +511,12 @@ void xoj_parser_text(GMarkupParseContext *context,
element_name = g_markup_parse_context_get_element(context);
if (element_name == NULL) return;
if (!strcmp(element_name, "stroke")) {
+ cleanup_numeric((gchar *)text);
ptr = text;
n = 0;
while (text_len > 0) {
realloc_cur_path(n/2 + 1);
- ui.cur_path.coords[n] = strtod(text, (char **)(&ptr));
+ ui.cur_path.coords[n] = g_ascii_strtod(text, (char **)(&ptr));
if (ptr == text) break;
text_len -= (ptr - text);
text = ptr;
diff --git a/src/xo-print.c b/src/xo-print.c
index 04493c9..2050f85 100644
--- a/src/xo-print.c
+++ b/src/xo-print.c
@@ -7,6 +7,7 @@
#include
#include
#include
+#include
#include "xournal.h"
#include "xo-misc.h"
@@ -182,7 +183,7 @@ struct PdfObj *parse_pdf_object(char **ptr, char *eof)
if (q!=p) {
if (*q == '.') {
obj->type = PDFTYPE_REAL;
- obj->realval = strtod(p, ptr);
+ obj->realval = g_ascii_strtod(p, ptr);
return obj;
}
if (ispdfspace(*q)) {
@@ -820,6 +821,7 @@ gboolean print_to_pdf(char *filename)
f = fopen(filename, "w");
if (f == NULL) return FALSE;
+ setlocale(LC_NUMERIC, "C");
annot = FALSE;
xref.data = NULL;
uses_pdf = FALSE;
@@ -992,9 +994,15 @@ gboolean print_to_pdf(char *filename)
g_free(xref.data);
if (annot) {
free_pdfobj(pdfinfo.trailerdict);
- // ...
+ if (pdfinfo.pages!=NULL)
+ for (i=0; istr, 1, pdfbuf->len, f) < pdfbuf->len) {
fclose(f);
g_string_free(pdfbuf, TRUE);