diff options
author | Akira TAGOH <akira@tagoh.org> | 2006-11-13 02:34:28 +0000 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2006-11-13 02:34:28 +0000 |
commit | 805ca4c1bf8d2bb29eba311dfad4bfca9f4cf5b9 (patch) | |
tree | 68b23f39b44bb8bfe0c7e6c0dfedb1ef184794b5 | |
parent | c167021975803379e5612d9cd47f943dd7fc3e4b (diff) |
* hieroglyph/hgfile.c (hg_file_object_ungetc): improve dealing with
ungetc.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | hieroglyph/hgfile.c | 23 | ||||
-rw-r--r-- | hieroglyph/version.h.in | 2 |
3 files changed, 25 insertions, 3 deletions
@@ -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$"; |