summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira TAGOH <akira@tagoh.org>2006-11-13 02:34:28 +0000
committerAkira TAGOH <akira@tagoh.org>2006-11-13 02:34:28 +0000
commit805ca4c1bf8d2bb29eba311dfad4bfca9f4cf5b9 (patch)
tree68b23f39b44bb8bfe0c7e6c0dfedb1ef184794b5
parentc167021975803379e5612d9cd47f943dd7fc3e4b (diff)
* hieroglyph/hgfile.c (hg_file_object_ungetc): improve dealing with
ungetc.
-rw-r--r--ChangeLog3
-rw-r--r--hieroglyph/hgfile.c23
-rw-r--r--hieroglyph/version.h.in2
3 files changed, 25 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index bfca83c..38432d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2006-11-13 Akira TAGOH <at@gclab.org>
+ * hieroglyph/hgfile.c (hg_file_object_ungetc): improve dealing with
+ ungetc.
+
* hieroglyph/vm.c (hg_vm_get_save_level): just ask HgMemPool instead of
managing snapshot in VM.
diff --git a/hieroglyph/hgfile.c b/hieroglyph/hgfile.c
index 1735049..9bc00f8 100644
--- a/hieroglyph/hgfile.c
+++ b/hieroglyph/hgfile.c
@@ -712,14 +712,33 @@ void
hg_file_object_ungetc(HgFileObject *object,
gchar c)
{
+ gssize retval;
+
g_return_if_fail (object != NULL);
g_return_if_fail ((object->access_mode & HG_FILE_MODE_READ) != 0);
g_return_if_fail (object->ungetc == 0);
g_return_if_fail (hg_object_is_readable((HgObject *)object));
g_return_if_fail (hg_object_is_writable((HgObject *)object));
- object->is_eof = FALSE;
- object->ungetc = c;
+ switch (HG_FILE_GET_FILE_TYPE (object)) {
+ case HG_FILE_TYPE_FILE:
+ case HG_FILE_TYPE_BUFFER:
+ case HG_FILE_TYPE_STATEMENT_EDIT:
+ case HG_FILE_TYPE_LINE_EDIT:
+ case HG_FILE_TYPE_BUFFER_WITH_CALLBACK:
+ object->is_eof = FALSE;
+ retval = hg_file_object_seek(object, -1, HG_FILE_POS_CURRENT);
+ if (retval > 0)
+ break;
+ hg_log_debug(DEBUG_FILE, "Failed to push back a character to a file stream.");
+ case HG_FILE_TYPE_STDIN:
+ object->is_eof = FALSE;
+ object->ungetc = c;
+ break;
+ default:
+ hg_log_warning("[BUG] Invalid file type %d was given to be unget a character.", HG_FILE_GET_FILE_TYPE (object));
+ break;
+ }
}
gboolean
diff --git a/hieroglyph/version.h.in b/hieroglyph/version.h.in
index 560975e..487f3f4 100644
--- a/hieroglyph/version.h.in
+++ b/hieroglyph/version.h.in
@@ -29,7 +29,7 @@
G_BEGIN_DECLS
#define HIEROGLYPH_VERSION "@VERSION@"
-#define HIEROGLYPH_UUID "b4b5e745-6c80-4f4b-b1e2-35cc9fde754c"
+#define HIEROGLYPH_UUID "52e32977-ae10-4783-96d7-88ff92aa1308"
const char *__hg_rcsid G_GNUC_UNUSED = "$Rev$";