Matthias Clasen [Mon, 19 Mar 2012 18:27:20 +0000 (14:27 -0400)]
2.31.22
Matthias Clasen [Mon, 19 Mar 2012 17:43:31 +0000 (13:43 -0400)]
Updates
Matthias Clasen [Mon, 19 Mar 2012 17:28:14 +0000 (13:28 -0400)]
Don't return from a void function
Matthias Clasen [Mon, 19 Mar 2012 17:26:19 +0000 (13:26 -0400)]
Fix a C99ism
Matthias Clasen [Mon, 19 Mar 2012 17:22:04 +0000 (13:22 -0400)]
Silence a compiler warning
Ryan Lortie [Fri, 16 Mar 2012 17:32:38 +0000 (13:32 -0400)]
GDBus: set no-reply flag on calls with no callback
If g_dbus_connection_call() or g_dbus_proxy_call() are given a NULL
callback then set the no-reply flag on the outgoing D-Bus message.
https://bugzilla.gnome.org/show_bug.cgi?id=672239
Ryan Lortie [Fri, 16 Mar 2012 17:15:46 +0000 (13:15 -0400)]
GDBusProxy: report an error instead of leaking it
GDBusProxy sets an error on a GSimpleAsyncResult and then returns
without dispatching the result for completion (and leaks the result in
the process). Fix that.
Also add a testcase. Unfortunately, adding the testcase uncovered
bug #672248. We can work around that by reordering the tests.
https://bugzilla.gnome.org/show_bug.cgi?id=672249
Chun-wei Fan [Mon, 19 Mar 2012 08:02:37 +0000 (16:02 +0800)]
Update config.h.win32(.in)
Make it more like the one that is generated by autotools.
It is true that Visual C++ has sig_atomic_t, at least for Visual C++ 2008
and later, but this is currently only used for UNIX builds of GLib, as a
point of note here.
Chun-wei Fan [Mon, 19 Mar 2012 07:55:20 +0000 (15:55 +0800)]
Update glibconfig.h.win32(.in)
Added the definitions below, as these #defines are needed for gqsort.c
#define ALIGNOF_GUINT32 4
#define ALIGNOF_GUINT64 8
#define ALIGNOF_UNSIGNED_LONG 4
Bruno Brouard [Sun, 18 Mar 2012 09:34:15 +0000 (10:34 +0100)]
Updated French translation
Matthias Clasen [Sun, 18 Mar 2012 03:43:52 +0000 (23:43 -0400)]
Make inf testcase more forgiving
printf may produce "infinity" instead of "inf".
https://bugzilla.gnome.org/show_bug.cgi?id=668973
Sebastian Dröge [Sun, 18 Mar 2012 03:28:48 +0000 (23:28 -0400)]
Use __builtin_bswap* for GUINT*_SWAP_LE_BE if building with GCC
https://bugzilla.gnome.org/show_bug.cgi?id=531901
Dieter Verfaillie [Sun, 18 Mar 2012 03:10:01 +0000 (23:10 -0400)]
Fix out of tree build for MinGW/MSYS
When building with MinGW/MSYS with srcdir != builddir the build fails:
- to locate the generated .def files
- creating libglib-gdb.py
- creating libgobject-gdb.py
Solved this by explicitly instructing these files to be generated
in $(builddir)/...
https://bugzilla.gnome.org/show_bug.cgi?id=653167
Duarte Loreto [Sun, 18 Mar 2012 00:45:43 +0000 (00:45 +0000)]
Updated Portuguese translation
Aurimas Černius [Sat, 17 Mar 2012 16:49:25 +0000 (18:49 +0200)]
Updated Lithuanian translation
Ryan Lortie [Sat, 17 Mar 2012 16:39:23 +0000 (12:39 -0400)]
man pages: document the order of schema overrides
GSettings overrides are processed in such a way that
alphabetically-later files have precedence over earlier files (eg: 20_
will beat 10_). Document that fact.
Yuri Kozlov [Sat, 17 Mar 2012 08:57:44 +0000 (12:57 +0400)]
Updated Russian translation
Colin Walters [Tue, 13 Mar 2012 18:49:04 +0000 (14:49 -0400)]
gmain: Use sig_atomic_t for list of pending Unix signals
Pointed out by: Simon McVittie <simon.mcvittie@collabora.co.uk>
https://bugzilla.gnome.org/show_bug.cgi?id=671997
Tomas Bzatek [Fri, 16 Mar 2012 17:54:09 +0000 (18:54 +0100)]
gio: Only show mounts in /run/media/$USER
And reflect the recent changes + sync with gvfs+udisks2 rules.
https://bugzilla.gnome.org/show_bug.cgi?id=669797
David Benjamin [Thu, 15 Mar 2012 23:16:02 +0000 (19:16 -0400)]
Continue searching in PATH on ENODEV and ETIMEDOUT
Synchronize the error-handling logic from glibc. Users with networked
filesystems in their PATH may hit ETIMEDOUT.
https://bugzilla.gnome.org/show_bug.cgi?id=672201
Colin Walters [Thu, 15 Mar 2012 21:59:01 +0000 (17:59 -0400)]
gtype: Note idempotency of g_type_init()
Alexander Larsson [Fri, 16 Mar 2012 11:51:33 +0000 (12:51 +0100)]
Remove now unused qsort_r checks
https://bugzilla.gnome.org/show_bug.cgi?id=672095
Alexander Larsson [Wed, 14 Mar 2012 20:17:47 +0000 (21:17 +0100)]
Make g_array_sort* methods use a stable sort
Also, remove previous comments about sort stability in g_array_sort docs,
as the method that was explained does not work. Adds a new comment
about this.
https://bugzilla.gnome.org/show_bug.cgi?id=672095
Alexander Larsson [Wed, 14 Mar 2012 20:17:23 +0000 (21:17 +0100)]
Make g_qsort_with_data stable, based on glibc msort
We need a stable sort, and we might as well always use it rather
than have multiple sort versions. This picks up the glibc
merge sort implementation which it uses by default for qsort,
except we don't fall back to non-stable quicksort in some cases
like glibc
https://bugzilla.gnome.org/show_bug.cgi?id=672095
Gabor Kelemen [Fri, 16 Mar 2012 10:12:56 +0000 (11:12 +0100)]
Updated Hungarian translation
Carles Ferrando [Thu, 15 Mar 2012 22:33:50 +0000 (23:33 +0100)]
[l10n]Updated Catalan (Valencian) translation
Gil Forcada [Thu, 15 Mar 2012 22:33:43 +0000 (23:33 +0100)]
[l10n]Updated Catalan translation
David Zeuthen [Thu, 15 Mar 2012 18:04:39 +0000 (14:04 -0400)]
GDBusConnection: Don't store GCancellable in qdata
Now that we're using g_simple_async_result_set_check_cancellable() we
no longer need this terrible hack of carrying the GCancellable on the
GSimpleAsyncResult using qdata. See bug 672013 for more details.
https://bugzilla.gnome.org/show_bug.cgi?id=672013
Signed-off-by: David Zeuthen <davidz@redhat.com>
Ryan Lortie [Tue, 13 Mar 2012 20:41:57 +0000 (16:41 -0400)]
GDBus: make use of reliable async cancellation
Call g_simple_async_result_set_check_cancellable() after all
GSimpleAsyncResult creation in order to take advantage of the new
reliable cancellation feature.
The guarantee of reliable cancellation fixes a bug in dbusmenu (which
was already assuming that cancellation was reliable). See this bug:
https://bugs.launchpad.net/ubuntu/+source/libdbusmenu/+bug/953562
https://bugzilla.gnome.org/show_bug.cgi?id=672013
Signed-off-by: David Zeuthen <davidz@redhat.com>
Chun-wei Fan [Thu, 15 Mar 2012 08:39:52 +0000 (16:39 +0800)]
Fix "install" paths in VS property sheets
...and cleanup the VS2010 property sheets a little bit
Mario Blättermann [Wed, 14 Mar 2012 21:27:33 +0000 (22:27 +0100)]
[l10n] Updated German translation
Ryan Lortie [Tue, 13 Mar 2012 20:09:01 +0000 (16:09 -0400)]
GSimpleAsyncResult: support reliable cancellation
Add a function g_simple_async_result_set_check_cancellable() to provide
a GCancellable that is checked for being cancelled during the call to
g_simple_async_result_propagate_error().
This gives asynchronous operation implementations an easy way to
provide reliable cancellation of those operations -- even in the case
that a positive result has occured and is pending dispatch at the time
the operation is cancelled.
https://bugzilla.gnome.org/show_bug.cgi?id=672013
Mike Gorse [Tue, 13 Mar 2012 21:02:30 +0000 (16:02 -0500)]
Invalidate single_va_closure when adding an emission hook
If the optimization is used for only having one closure handling a
signal emission, then hooks will not be run, so it should be disabled
when an emission hook is added.
https://bugzilla.gnome.org/show_bug.cgi?id=671918
Ryan Lortie [Wed, 14 Mar 2012 00:10:39 +0000 (20:10 -0400)]
g_log: mask log level before checking prefix flags
We check if the log level is in the "prefixed" list by checking it
against the g_log_msg_prefix bitfield.
Unfortunately we were failing to mask by G_LOG_LEVEL_MASK first, so if
the FATAL bit was set (for example) then it would never match. This was
the case for g_error().
https://bugzilla.gnome.org/show_bug.cgi?id=672026
Ryan Lortie [Wed, 14 Mar 2012 00:08:27 +0000 (20:08 -0400)]
glib-init: restore default for G_MESSAGES_PREFIXED
In the glib-init shuffle this ended up being set to no messages prefixed
by default. Fix that so that we have prefixes back.
https://bugzilla.gnome.org/show_bug.cgi?id=672026
Ryan Lortie [Wed, 14 Mar 2012 00:08:01 +0000 (20:08 -0400)]
glib-init: fix obvious buffer size mismatch
Bruce Cowan [Tue, 13 Mar 2012 13:48:15 +0000 (13:48 +0000)]
Updated British English translation
Kenneth Nielsen [Tue, 13 Mar 2012 08:11:21 +0000 (09:11 +0100)]
Updated Danish translation
Ryan Lortie [Mon, 12 Mar 2012 20:43:15 +0000 (16:43 -0400)]
GSocketMsgFlags: annotate as a flags
This was being incorrectly guessed as an enum. Fix that.
https://bugzilla.gnome.org/show_bug.cgi?id=671942
Kjartan Maraas [Mon, 12 Mar 2012 17:18:55 +0000 (18:18 +0100)]
Updated Norwegian bokmål translation
Timo Jyrinki [Mon, 12 Mar 2012 09:02:04 +0000 (11:02 +0200)]
Finnish translation update from l10n.laxstrom.name/wiki/Gnome_3.4 translation sprint
Kristjan SCHMIDT [Sun, 11 Mar 2012 11:02:28 +0000 (12:02 +0100)]
Updated Esperanto translation
Piotr Drąg [Fri, 9 Mar 2012 21:18:45 +0000 (22:18 +0100)]
Updated Polish translation
Ryan Lortie [Fri, 9 Mar 2012 15:29:32 +0000 (10:29 -0500)]
logging test: unset G_MESSAGES_DEBUG
Having G_MESSAGES_DEBUG=all in the environment will fail this testcase.
Mark Janossy [Fri, 9 Mar 2012 14:54:23 +0000 (09:54 -0500)]
deprecated threads: fix race in GStaticRecMutex
The very last access to the 'depth' field of GStaticRecMutex in
g_static_rec_mutex_unlock_full() was being performed after dropping the
implementation mutex for the last time.
This allowed the lock to be dropped an additional time if it was
acquired in another thread right at that instant (which is somewhat
likely, since another thread could have just been woken up by the lock
being released).
https://bugzilla.gnome.org/show_bug.cgi?id=670846
Alexander Larsson [Fri, 9 Mar 2012 10:32:45 +0000 (11:32 +0100)]
Fix crash in signal emission optimization
The trace of the signal emission of the was calculating the instance
type after the instance was unrefed. Fix this by keeping the instance type around.
Alexander Larsson [Fri, 9 Mar 2012 08:32:06 +0000 (09:32 +0100)]
signal emission: Allocate instance_and_param with alloca
This Gives a 5% performance increase in e.g. the emit-handled test.
Erik van Pienbroek [Thu, 8 Mar 2012 19:29:18 +0000 (20:29 +0100)]
Use native glib-genmarshal when cross-compiling
The ability to cross-compile glib got broken after the
merge of the 'signal-performance' branch as the assumption
was made that the generated glib-genmarshal can be executed
on the host (which isn't valid when cross-compiling).
Fixed this by using the just-built glib-genmarshal for normal
compilations and the native (host) glib-genmarshal when doing a
cross-compilation as was also done in several other areas of GLib
Tested for host=x86_64-unknown-linux-gnu, target=x86_64-unknown-linux-gnu
and host=x86_64-unknown-linux-gnu, target=i686-w64-mingw32
https://bugzilla.gnome.org/show_bug.cgi?id=671676
Ryan Lortie [Thu, 8 Mar 2012 16:55:09 +0000 (11:55 -0500)]
gio-querymodules: unlink instead of writing empty cache
If there are no modules installed then the most appropriate thing is to
have no cachefile instead of an empty one. This unbreaks the "clean
directory after 'make uninstall'" check that automake does.
https://bugzilla.gnome.org/show_bug.cgi?id=671664
Chun-wei Fan [Thu, 8 Mar 2012 09:18:43 +0000 (17:18 +0800)]
msvc_recommended_pragmas.h: Silence C4819 warnings
This warning appears when unicode chars that cannot be displayed in the
current Windows code page is used anywhere in the file, including comment
blocks. We probably don't need to see these, especially as problems
caused by such characters are manifested as other warnings or errors,
for example, the need to add BOM to a file when compiling code with
complex script on Windows.
Nilamdyuti Goswami [Thu, 8 Mar 2012 08:38:11 +0000 (14:08 +0530)]
Assamese translation completed
Chao-Hsiung Liao [Thu, 8 Mar 2012 07:56:14 +0000 (15:56 +0800)]
Updated Traditional Chinese translation(Hong Kong and Taiwan)
Chun-wei Fan [Thu, 8 Mar 2012 07:34:39 +0000 (15:34 +0800)]
Update config.h.win32(.in)
Remove the config for ENABLE_REGEX, as GRegex is now included in all builds.
Chun-wei Fan [Thu, 8 Mar 2012 07:04:17 +0000 (15:04 +0800)]
glib-genmarshal.c: Use G_VA_COPY instead of va_copy()
In the code generation portion, va_copy() is not universally available,
so use the existing G_VA_COPY macro that in turn calls va_copy() if it
is available or call an appropriate emulation otherwise.
Chun-wei Fan [Thu, 8 Mar 2012 06:51:22 +0000 (14:51 +0800)]
Use G_VA_COPY instead of va_copy()
va_vopy() is not universally available in all compilers, so make use of
the existing G_VA_COPY macro which either calls va_copy() if it is
available, or emulates it if otherwise.
Emmanuele Bassi [Wed, 7 Mar 2012 12:53:14 +0000 (12:53 +0000)]
gobject: Fix a compiler warning
Shuffle the parenthesis around.
Cosimo Cecchi [Wed, 7 Mar 2012 03:10:53 +0000 (22:10 -0500)]
tests: fix GAction test for headless run
Nilamdyuti Goswami [Tue, 6 Mar 2012 16:13:24 +0000 (21:43 +0530)]
Assamese translation completed
Seong-ho Cho [Tue, 6 Mar 2012 14:50:59 +0000 (23:50 +0900)]
Updated Korean translation
Alexander Larsson [Tue, 6 Mar 2012 10:35:17 +0000 (11:35 +0100)]
Fix unused variable warning
David Zeuthen [Mon, 5 Mar 2012 17:57:32 +0000 (12:57 -0500)]
GUnix{Input,Output}Stream: Only release cancelable poll-fd if we allocated it
Otherwise we get criticals a'la
GLib-GIO-CRITICAL **: g_cancellable_release_fd: assertion `cancellable->priv->fd_refcount > 0' failed
when reading/writing to certain kinds of file descriptors.
Patch reviewed by Dan Winship on IRC.
Signed-off-by: David Zeuthen <davidz@redhat.com>
Matthias Clasen [Mon, 5 Mar 2012 16:43:20 +0000 (11:43 -0500)]
bump version
Alexander Larsson [Mon, 5 Mar 2012 14:05:07 +0000 (15:05 +0100)]
Use G_DEFINE_CONSTRUCTOR for the glib_init constructor
No need to hand-roll this when we have a macro version.
Matthias Clasen [Mon, 5 Mar 2012 14:01:20 +0000 (09:01 -0500)]
2.31.20
Matthias Clasen [Mon, 5 Mar 2012 13:32:07 +0000 (08:32 -0500)]
Update glib-genmarshal docs
A bunch of new commandline options sneaked in without docs...
Matthias Clasen [Mon, 5 Mar 2012 12:54:47 +0000 (07:54 -0500)]
Fix a compiler warning
Matthias Clasen [Mon, 5 Mar 2012 12:34:58 +0000 (07:34 -0500)]
gobject: Fix symbol lists
Matthias Clasen [Mon, 5 Mar 2012 12:02:53 +0000 (07:02 -0500)]
More updates
Alexander Larsson [Mon, 5 Mar 2012 11:29:45 +0000 (12:29 +0100)]
Merge branch 'signal-performance'
Matthias Clasen [Mon, 5 Mar 2012 04:42:45 +0000 (23:42 -0500)]
Fix distcheck
YunQiang Su [Mon, 5 Mar 2012 09:44:58 +0000 (17:44 +0800)]
update Simplified Chinese (zh_CN) translation
Matthias Clasen [Mon, 5 Mar 2012 03:25:50 +0000 (22:25 -0500)]
Fix distcheck
Matthias Clasen [Mon, 5 Mar 2012 02:48:26 +0000 (21:48 -0500)]
Updates for 2.31.20
Matthias Clasen [Mon, 5 Mar 2012 01:49:04 +0000 (20:49 -0500)]
Fix binding properties of the same object
This problem was pointed out in bug 639873.
The patch here is based on Matt Barnes patch,
I've added a testcase as well.
Nirbheek Chauhan [Tue, 21 Feb 2012 14:12:22 +0000 (19:42 +0530)]
Run gdb under libtool so that local libraries are used
If this isn't done, the system-wide glib is used for this test,
and that can cause test failures.
https://bugzilla.gnome.org/621368
Matej Urbančič [Sun, 4 Mar 2012 20:23:29 +0000 (21:23 +0100)]
Updated Slovenian translation
Martin Srebotnjak [Sun, 4 Mar 2012 20:20:59 +0000 (21:20 +0100)]
Updated Slovenian translation
Michael Biebl [Sat, 3 Mar 2012 23:26:10 +0000 (00:26 +0100)]
build: include glib-compile-resources.xml in the dist tarball
https://bugzilla.gnome.org/show_bug.cgi?id=671281
Michael Biebl [Sat, 3 Mar 2012 20:39:35 +0000 (21:39 +0100)]
build: Fix failure on "make distclean"
https://bugzilla.gnome.org/show_bug.cgi?id=671270
Alexander Larsson [Sat, 3 Mar 2012 20:36:10 +0000 (21:36 +0100)]
fastpath: Do allow NO_RECURSE fastpath for NOP emissions
This fixes a performance regression wrt the old NOP emission
handler.
Shota Akiyama [Thu, 23 Feb 2012 10:52:12 +0000 (11:52 +0100)]
glib/gmacros.h: Fix up attribute to avoid namespace collisions
https://bugzilla.gnome.org/show_bug.cgi?id=670751
Dan Winship [Fri, 2 Mar 2012 15:22:11 +0000 (10:22 -0500)]
gspawn: rename G_SPAWN_ERROR_2BIG to be more bindings-friendly
Rename G_SPAWN_ERROR_2BIG to G_SPAWN_ERROR_TOO_BIG (while keeping the
old name for compatibility), to fix problems with language bindings
where the old name translates into something that would be
syntactically invalid due to starting with a digit.
https://bugzilla.gnome.org/show_bug.cgi?id=671025
Ryan Lortie [Sat, 3 Mar 2012 16:40:51 +0000 (11:40 -0500)]
GApplication: fix name unregister logic
We were attempting to unregister our ownership of our D-Bus name even in
the case that we were non-unique (ie: we didn't actually own the name).
Rework the logic a bit to prevent that: for non-unique, we leave
impl->bus_name as NULL and we only register/unregister if it is
non-NULL.
Nguyễn Thái Ngọc Duy [Sat, 3 Mar 2012 15:49:18 +0000 (22:49 +0700)]
Updated Vietnamese translation
Nguyễn Thái Ngọc Duy [Sat, 3 Mar 2012 15:35:16 +0000 (22:35 +0700)]
po/vi: import from Damned Lies
Inaki Larranaga Murgoitio [Sat, 3 Mar 2012 13:43:05 +0000 (14:43 +0100)]
Updated Basque language
Peter O'Gorman [Fri, 2 Mar 2012 21:36:27 +0000 (13:36 -0800)]
Bug 640202 Impossible to build multi-architecture libraries
Hides ELF-only linker flag -export-dynamic from non-ELF linkers.
Alexander Larsson [Fri, 2 Mar 2012 19:22:29 +0000 (20:22 +0100)]
Mask out G_SIGNAL_TYPE_STATIC_SCOPE when comparing types
Emmanuele Bassi [Fri, 2 Mar 2012 17:06:36 +0000 (17:06 +0000)]
build: Fix rules for marshalers.[ch]
Alexander Larsson [Fri, 2 Mar 2012 15:16:17 +0000 (16:16 +0100)]
Add more tests for signal emissions
Alexander Larsson [Wed, 22 Feb 2012 18:36:05 +0000 (19:36 +0100)]
Optimize single-handler va_marshaller case
When there is only one closure handling a signal emission and
it doesn't have a bunch of complicated features enabled we
can short circuit the va_args collection into GValues and call the
callback via the va_marshaller directly.
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Alexander Larsson [Fri, 2 Mar 2012 10:20:45 +0000 (11:20 +0100)]
Use builtin marshallers and va_marshallers if possible
If the signal argumment types matches a built in standard
marshaller we use the va_marshaller for that, and also the
normal marshaller if NULL was specified (as its faster than
the generic one).
Alexander Larsson [Wed, 22 Feb 2012 18:34:05 +0000 (19:34 +0100)]
Add g_signal_set_va_marshaller
This lets you set a va_marshaller on your signal which will be
propagated to all closures for the signal. Also, automatically
uses the generica va_marshaller if you specify a NULL c_marshaller.
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Alexander Larsson [Tue, 28 Feb 2012 14:48:20 +0000 (15:48 +0100)]
Add _g_closure_is_void to check for NULL vfuncs
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Alexander Larsson [Wed, 22 Feb 2012 18:32:36 +0000 (19:32 +0100)]
Support generating va marshallers in glib-genmarshal
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Alexander Larsson [Wed, 22 Feb 2012 18:29:14 +0000 (19:29 +0100)]
Add optional support for varargs marshallers to GClosure
These closures support being invoked on a va_args which can
be useful as you can then avoid boxing the va_args into
GValues in certain cases.
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Alexander Larsson [Wed, 22 Feb 2012 16:46:21 +0000 (17:46 +0100)]
Add GRealClosure and move meta_marshallers there
This means we're not abusing the notifiers for meta_marshallres,
and we're able to later cleanly add other fields to GClosure.
We still have to leave the ABI intact for the GClosure->meta_marshal
bit, as old G_CLOSURE_N_NOTIFIERS macro instances still accesses it.
However, we always set it to zero to keep those macros working.
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Alexander Larsson [Wed, 22 Feb 2012 18:44:24 +0000 (19:44 +0100)]
tests: Add generic and empty signal emission performace tests
generic means it uses the generic marshaller
empty means the vfunc pointer is NULL
https://bugzilla.gnome.org/show_bug.cgi?id=661140
Lionel Landwerlin [Tue, 27 Sep 2011 08:15:17 +0000 (09:15 +0100)]
tests: performance: add emit-handled/emit-unhandled tests
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@linux.intel.com>
Jörn Magens [Wed, 29 Feb 2012 17:29:50 +0000 (12:29 -0500)]
GSequence: add note about lookup requiring sorting
g_sequence_lookup() only works on sorted sequences, but it's quite easy
to create unsorted sequences. Add a note to the documentation that the
sequence must be sorted in order for g_sequence_lookup() to work.
https://bugzilla.gnome.org/show_bug.cgi?id=670969