Muktha Narayan muktha.nara...@sun.com writes:
Kalle Olavi Niemitalo wrote:
Because ELinks is violating a C99 requirement, rather than
something specific to Sun, I don't think it's right to make an
exception for the Sun compiler. Instead, we should make the
functions not inline and measure how that affects the speed.
If it hurts too much, then define e.g. static inline int
inline_elinks_ulongcat() and make both int elinks_ulongcat()
and int elinks_longcat() call that. GCC should generate from
that approximately the same code as from the current sources.
Attached is the modified patch incorporating the above
comments. Please confirm if the patch is acceptable.
Actually I hoped to see some numbers about how much slower
ELinks gets if you just drop the inline specifiers. If the
difference is negligible, then it is better not to complicate
the source code with wrappers.
However I've now looked at C99 6.7.4p3 and it specifically
mentions modifiable objects. So I wonder if we could just put
some const in elinks_ulongcat to make the objects unmodifiable.
diff --git a/src/session/session.c b/src/session/session.c
index 3cd9b5a..73459f2 100644
--- a/src/session/session.c
+++ b/src/session/session.c
@@ -423,7 +423,9 @@ load_ecmascript_imports(struct session *ses, struct
document_view *doc_view)
#define load_ecmascript_imports(ses, doc_view)
#endif
-inline void
+/* can't be inline according to C99 6.7.4p3 because it uses static
+ * request_frameset() and is not itself static */
+void
load_frames(struct session *ses, struct document_view *doc_view)
{
struct document *document = doc_view-document;
diff --git a/src/util/conv.c b/src/util/conv.c
index 68ae545..d29a61d 100644
--- a/src/util/conv.c
+++ b/src/util/conv.c
@@ -52,9 +52,9 @@ elinks_ulongcat(unsigned char *s, unsigned int *slen,
unsigned char fillchar, unsigned int base,
unsigned int upper)
{
- static unsigned char unum[]= 0123456789ABCDEF;
- static unsigned char lnum[]= 0123456789abcdef;
- unsigned char *to_num = (unsigned char *) (upper ? unum : lnum);
+ static const unsigned char unum[]= 0123456789ABCDEF;
+ static const unsigned char lnum[]= 0123456789abcdef;
+ const unsigned char *to_num = (upper ? unum : lnum);
unsigned int start = slen ? *slen : 0;
unsigned int nlen = 1; /* '0' is one char, we can't have less. */
unsigned int pos = start; /* starting position of the number */
pgpAfuS5pv5di.pgp
Description: PGP signature
___
elinks-dev mailing list
elinks-dev@linuxfromscratch.org
http://linuxfromscratch.org/mailman/listinfo/elinks-dev