Muktha Narayan <> 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)
-inline void
+/* can't be inline according to C99 6.7.4p3 because it uses static
+ * request_frameset() and is not itself static */
 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 */

Attachment: pgpAfuS5pv5di.pgp
Description: PGP signature

elinks-dev mailing list

Reply via email to