summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog3
-rw-r--r--src/callproc.c6
-rw-r--r--src/lisp.h11
3 files changed, 16 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 2de909ef800..3ce27b1ce19 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -3,6 +3,9 @@
* fileio.c (CHECK_LENGTH): New macro.
(Fexpand_file_name): Use it and get rid of a few more calls
to strlen and strcat.
+ * callproc.c (egetenv_internal): Add arg and rename from egetenv ...
+ * lisp.h (egetenv): ... because of a new inline function used to
+ avoid calls to strlen for a compile-time constants.
2014-09-01 Dmitry Antipov <dmantipov@yandex.ru>
diff --git a/src/callproc.c b/src/callproc.c
index 01008312155..e8b61b9f01f 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1488,14 +1488,14 @@ If optional parameter ENV is a list, then search this list instead of
}
/* A version of getenv that consults the Lisp environment lists,
- easily callable from C. */
+ easily callable from C. This is usually called from egetenv. */
char *
-egetenv (const char *var)
+egetenv_internal (const char *var, ptrdiff_t len)
{
char *value;
ptrdiff_t valuelen;
- if (getenv_internal (var, strlen (var), &value, &valuelen, Qnil))
+ if (getenv_internal (var, len, &value, &valuelen, Qnil))
return value;
else
return 0;
diff --git a/src/lisp.h b/src/lisp.h
index 05b27ab9f00..cac536943a5 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4442,7 +4442,16 @@ extern char *xlispstrdup (Lisp_Object) ATTRIBUTE_MALLOC;
extern void dupstring (char **, char const *);
extern void xputenv (const char *);
-extern char *egetenv (const char *);
+extern char *egetenv_internal (const char *, ptrdiff_t);
+
+/* VAR is usually a compile-time constant, so the
+ call to strlen is likely to be optimized away. */
+
+INLINE char *
+egetenv(const char *var)
+{
+ return egetenv_internal (var, strlen (var));
+}
/* Copy Lisp string to temporary (allocated on stack) C string. */