From 0a70515e2ebc0060ab53b83cd9c0a379706da986 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 16 Dec 2000 18:25:45 +0000 Subject: [PATCH] Update. 2000-12-16 Jakub Jelinek * catgets/gencat.c (read_input_file): Avoid calling obstack_free with a pointer not returned by obstack_ functions. * sysdeps/unix/sysv/aix/bits/stat.h (struct stat): Align with AIX version. (struct stat64): Likewise. Reported by Michael Keezer . --- ChangeLog | 10 ++++++++++ catgets/gencat.c | 29 ++++++++++++++++------------- sysdeps/unix/sysv/aix/bits/stat.h | 12 ++---------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index e34457a..9ffa26d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ +2000-12-16 Jakub Jelinek + + * catgets/gencat.c (read_input_file): Avoid calling obstack_free + with a pointer not returned by obstack_ functions. + 2000-12-16 Ulrich Drepper + * sysdeps/unix/sysv/aix/bits/stat.h (struct stat): Align with AIX + version. + (struct stat64): Likewise. + Reported by Michael Keezer . + * timezone/asia: Update from tzdata2000h. * timezone/australasia: Likewise. * timezone/backward: Likewise. diff --git a/catgets/gencat.c b/catgets/gencat.c index 49b6336..43988e7 100644 --- a/catgets/gencat.c +++ b/catgets/gencat.c @@ -566,13 +566,14 @@ this is the first definition")); else if (isalnum (this_line[0]) || this_line[0] == '_') { const char *ident = this_line; + char *line = this_line; int message_number; do - ++this_line; - while (this_line[0] != '\0' && !isspace (this_line[0])); - if (this_line[0] != '\0') - *this_line++ = '\0'; /* Terminate the identifier. */ + ++line; + while (line[0] != '\0' && !isspace (line[0])); + if (line[0] != '\0') + *line++ = '\0'; /* Terminate the identifier. */ /* Now we found the beginning of the message itself. */ @@ -647,7 +648,7 @@ duplicated message identifier")); char *outbuf; size_t outlen; struct message_list *newp; - size_t this_line_len = strlen (this_line) + 1; + size_t line_len = strlen (line) + 1; /* We need the conversion. */ if (cd_towc == (iconv_t) -1 @@ -662,8 +663,8 @@ duplicated message identifier")); message is stateful. */ while (1) { - inbuf = this_line; - inlen = this_line_len; + inbuf = line; + inlen = line_len; outbuf = (char *) wbuf; outlen = wbufsize; @@ -693,8 +694,6 @@ invalid character: message ignored")); wbuf = (wchar_t *) xrealloc (wbuf, wbufsize); } - used = 1; /* Yes, we use the line. */ - /* Strip quote characters, change escape sequences into correct characters etc. */ normalize_line (fname, start_line, cd_towc, wbuf, @@ -705,14 +704,17 @@ invalid character: message ignored")); memory allocated for the original string. */ obstack_free (¤t->mem_pool, this_line); + used = 1; /* Yes, we use the line. */ + /* Now fill in the new string. It should never happen that the replaced string is longer than the original. */ inbuf = (char *) wbuf; inlen = (wcslen (wbuf) + 1) * sizeof (wchar_t); outlen = obstack_room (¤t->mem_pool); - start_line = (char *) obstack_alloc (¤t->mem_pool, outlen); - outbuf = start_line; + obstack_blank (¤t->mem_pool, outlen); + this_line = (char *) obstack_base (¤t->mem_pool); + outbuf = this_line; /* Flush the state. */ iconv (cd_tomb, NULL, NULL, NULL, NULL); @@ -727,11 +729,12 @@ invalid character: message ignored")); assert (outbuf[-1] == '\0'); /* Free the memory in the obstack we don't use. */ - obstack_free (¤t->mem_pool, outbuf); + obstack_blank (¤t->mem_pool, -(int) outlen); + line = obstack_finish (¤t->mem_pool); newp = (struct message_list *) xmalloc (sizeof (*newp)); newp->number = message_number; - newp->message = this_line; + newp->message = line; /* Remember symbolic name; is NULL if no is given. */ newp->symbol = ident; /* Remember where we found the character. */ diff --git a/sysdeps/unix/sysv/aix/bits/stat.h b/sysdeps/unix/sysv/aix/bits/stat.h index 2d5585d..0b81879 100644 --- a/sysdeps/unix/sysv/aix/bits/stat.h +++ b/sysdeps/unix/sysv/aix/bits/stat.h @@ -23,11 +23,7 @@ struct stat { __dev_t st_dev; /* Device. */ -#ifndef __USE_FILE_OFFSET64 __ino_t st_ino; /* File serial number. */ -#else - __ino64_t st_ino; /* File serial number. */ -#endif __mode_t st_mode; /* File mode. */ __nlink_t st_nlink; /* Link count. */ unsigned short int st_flag; /* Flag word. */ @@ -46,11 +42,7 @@ struct stat __time_t st_ctime; /* Time of last status change. */ unsigned long int __unused3; __blksize_t st_blksize; /* Optimal block size for I/O. */ -#ifndef __USE_FILE_OFFSET64 __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#endif int st_vfstype; /* Type of the filesystem. */ unsigned int st_vfs; /* Vfs number. */ unsigned int st_type; /* Vnode type. */ @@ -69,7 +61,7 @@ struct stat struct stat64 { __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ + __ino_t st_ino; /* File serial number. */ __mode_t st_mode; /* File mode. */ __nlink_t st_nlink; /* Link count. */ unsigned short int st_flag; /* Flag word. */ @@ -84,7 +76,7 @@ struct stat64 __time_t st_ctime; /* Time of last status change. */ unsigned long int __unused3; __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ + __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ int st_vfstype; /* Type of the filesystem. */ unsigned int st_vfs; /* Vfs number. */ unsigned int st_type; /* Vnode type. */ -- 2.7.4