Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[BZ #266]
Update.
2004-07-14  Jakub Jelinek  <jakub@redhat.com>

	[BZ #266]
	* manual/string.texi (l64a): Note that the static buffer is 7 bytes
	long.  Rewrite example code so that it takes account l64a output
	shorter than 6 characters.
	Reported by Julian Graham <julian.graham@aya.yale.edu>.
  • Loading branch information
Ulrich Drepper committed Jul 14, 2004
1 parent 6c1232e commit 290639c
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 13 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
@@ -1,3 +1,11 @@
2004-07-14 Jakub Jelinek <jakub@redhat.com>

[BZ #266]
* manual/string.texi (l64a): Note that the static buffer is 7 bytes
long. Rewrite example code so that it takes account l64a output
shorter than 6 characters.
Reported by Julian Graham <julian.graham@aya.yale.edu>.

2004-07-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>

* sysdeps/sh/dl-machine.h: Don't reset _dl_starting_up here.
Expand Down
6 changes: 6 additions & 0 deletions linuxthreads/ChangeLog
@@ -1,3 +1,9 @@
2004-07-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>

* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
(__local_multiple_threads): Define for librt.
(SINGLE_THREAD_P): Likewise.

2004-07-07 Jakub Jelinek <jakub@redhat.com>

* sysdeps/pthread/getcpuclockid.c (pthread_getcpuclockid): Allow
Expand Down
21 changes: 20 additions & 1 deletion linuxthreads/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
Expand Up @@ -99,6 +99,7 @@
# else
# define __local_enable_asynccancel __librt_enable_asynccancel
# define __local_disable_asynccancel __librt_disable_asynccancel
# define __local_multiple_threads __librt_multiple_threads
# endif

# if defined IS_IN_librt && defined PIC
Expand Down Expand Up @@ -183,7 +184,8 @@ extern int __local_multiple_threads attribute_hidden;
1:

# else
# define SINGLE_THREAD_P \
# if !defined NOT_IN_libc || defined IS_IN_libpthread
# define SINGLE_THREAD_P \
mov r12,r2; \
mov.l 0f,r12; \
mova 0f,r0; \
Expand All @@ -197,6 +199,23 @@ extern int __local_multiple_threads attribute_hidden;
0: .long _GLOBAL_OFFSET_TABLE_; \
1: .long __local_multiple_threads@GOTOFF; \
2:
# else
# define SINGLE_THREAD_P \
mov r12,r2; \
mov.l 0f,r12; \
mova 0f,r0; \
add r0,r12; \
mov.l 1f,r0; \
mov.l @(r0,r12),r0; \
mov.l @r0,r0; \
mov r2,r12; \
bra 2f; \
tst r0,r0; \
.align 2; \
0: .long _GLOBAL_OFFSET_TABLE_; \
1: .long __local_multiple_threads@GOT; \
2:
# endif
# endif
# endif

Expand Down
23 changes: 11 additions & 12 deletions manual/string.texi
Expand Up @@ -2296,7 +2296,7 @@ this task.
@comment XPG
@deftypefun {char *} l64a (long int @var{n})
This function encodes a 32-bit input value using characters from the
basic character set. It returns a pointer to a 6 character buffer which
basic character set. It returns a pointer to a 7 character buffer which
contains an encoded version of @var{n}. To encode a series of bytes the
user must copy the returned string to a destination buffer. It returns
the empty string if @var{n} is zero, which is somewhat bizarre but
Expand All @@ -2321,13 +2321,17 @@ encode (const void *buf, size_t len)
/* @r{We know in advance how long the buffer has to be.} */
unsigned char *in = (unsigned char *) buf;
char *out = malloc (6 + ((len + 3) / 4) * 6 + 1);
char *cp = out;
char *cp = out, *p;
/* @r{Encode the length.} */
/* @r{Using `htonl' is necessary so that the data can be}
@r{decoded even on machines with different byte order.} */
@r{decoded even on machines with different byte order.}
@r{`l64a' can return a string shorter than 6 bytes, so }
@r{we pad it with encoding of 0 (}'.'@r{) at the end by }
@r{hand.} */
cp = mempcpy (cp, l64a (htonl (len)), 6);
p = stpcpy (cp, l64a (htonl (len)));
cp = mempcpy (p, "......", 6 - (p - cp));
while (len > 3)
@{
Expand All @@ -2336,12 +2340,8 @@ encode (const void *buf, size_t len)
n = (n << 8) | *in++;
n = (n << 8) | *in++;
len -= 4;
if (n)
cp = mempcpy (cp, l64a (htonl (n)), 6);
else
/* @r{`l64a' returns the empty string for n==0, so we }
@r{must generate its encoding (}"......"@r{) by hand.} */
cp = stpcpy (cp, "......");
p = stpcpy (cp, l64a (htonl (n)));
cp = mempcpy (p, "......", 6 - (p - cp));
@}
if (len > 0)
@{
Expand All @@ -2352,8 +2352,7 @@ encode (const void *buf, size_t len)
if (--len > 0)
n = (n << 8) | *in;
@}
memcpy (cp, l64a (htonl (n)), 6);
cp += 6;
cp = stpcpy (cp, l64a (htonl (n)));
@}
*cp = '\0';
return out;
Expand Down
6 changes: 6 additions & 0 deletions nptl/ChangeLog
@@ -1,3 +1,9 @@
2004-07-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>

* sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
(__pthread_cond_timedwait): Check for invalid nanosecond in
timeout value.

2004-07-07 Ulrich Drepper <drepper@redhat.com>

* Makefile: Add rules to build and run tst-fini1.
Expand Down

0 comments on commit 290639c

Please sign in to comment.