further optimisation attempts in the str_save() and str_nsave() area
This commit is contained in:
44
misc.c
44
misc.c
@ -6,7 +6,7 @@
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.80 2008/07/12 16:26:58 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.81 2008/07/12 17:23:00 tg Exp $");
|
||||||
|
|
||||||
#undef USE_CHVT
|
#undef USE_CHVT
|
||||||
#if defined(TIOCSCTTY) && !defined(MKSH_SMALL)
|
#if defined(TIOCSCTTY) && !defined(MKSH_SMALL)
|
||||||
@ -63,25 +63,35 @@ initctypes(void)
|
|||||||
setctypes(" \n\t\"#$&'()*;<>?[]\\`|", C_QUOTE);
|
setctypes(" \n\t\"#$&'()*;<>?[]\\`|", C_QUOTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate a string of size n+1 and copy upto n characters from the possibly
|
|
||||||
* NUL terminated string s into it. Always returns a NUL terminated string
|
|
||||||
* (unless n < 0).
|
|
||||||
*/
|
|
||||||
char *
|
|
||||||
str_nsave(const char *s, int n, Area *ap)
|
|
||||||
{
|
|
||||||
char *ns = NULL;
|
|
||||||
|
|
||||||
if (n >= 0 && s)
|
|
||||||
strlcpy(ns = alloc(n + 1, ap), s, n + 1);
|
|
||||||
return (ns);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MKSH_SMALL
|
#ifdef MKSH_SMALL
|
||||||
char *
|
char *
|
||||||
str_save(const char *s, Area *ap)
|
str_save_s(const char *s, Area *ap)
|
||||||
{
|
{
|
||||||
return (s ? str_nsave(s, strlen(s), ap) : NULL);
|
char *rv;
|
||||||
|
size_t sz;
|
||||||
|
|
||||||
|
sz = strlen(s) + 1;
|
||||||
|
strlcpy(rv = alloc(sz, ap), s, sz);
|
||||||
|
return (rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
str_nsave_s(const char *s, int n, Area *ap)
|
||||||
|
{
|
||||||
|
char *rv = NULL;
|
||||||
|
|
||||||
|
if (n >= 0)
|
||||||
|
strlcpy(rv = alloc(n + 1, ap), s, n + 1);
|
||||||
|
return (rv);
|
||||||
|
}
|
||||||
|
#elif !HAVE_EXPSTMT
|
||||||
|
char *
|
||||||
|
str_nsave_ns(const char *s, unsigned int sz, Area *ap)
|
||||||
|
{
|
||||||
|
char *rv;
|
||||||
|
|
||||||
|
strlcpy(rv = alloc(sz, ap), s, sz);
|
||||||
|
return (rv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
25
sh.h
25
sh.h
@ -100,7 +100,7 @@
|
|||||||
#define __SCCSID(x) __IDSTRING(sccsid,x)
|
#define __SCCSID(x) __IDSTRING(sccsid,x)
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.224 2008/07/10 21:55:08 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.225 2008/07/12 17:23:00 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R35 2008/07/10"
|
#define MKSH_VERSION "R35 2008/07/10"
|
||||||
|
|
||||||
@ -1423,11 +1423,28 @@ struct tbl **ktsort(struct table *);
|
|||||||
void setctypes(const char *, int);
|
void setctypes(const char *, int);
|
||||||
void initctypes(void);
|
void initctypes(void);
|
||||||
#ifdef MKSH_SMALL
|
#ifdef MKSH_SMALL
|
||||||
char *str_save(const char *, Area *);
|
#define str_save(s,ap) ((s) ? str_save_s((s), (ap)) : NULL)
|
||||||
|
#define str_nsave(s,n,ap) ((s) ? str_nsave_s((s), (n), (ap)) : NULL)
|
||||||
|
char *str_save_s(const char *, Area *);
|
||||||
|
char *str_nsave_s(const char *, int, Area *);
|
||||||
#else
|
#else
|
||||||
#define str_save(s,ap) (str_nsave((s), (s) ? strlen(s) : 0, (ap)))
|
#if HAVE_EXPSTMT
|
||||||
|
#define str_nsave_ns(s,sz,ap) ({ \
|
||||||
|
unsigned int str_nsave_ns_sz = (sz); \
|
||||||
|
char *str_nsave_ns_rv = alloc(str_nsave_ns_sz, (ap)); \
|
||||||
|
strlcpy(str_nsave_ns_rv, (s), str_nsave_ns_sz); \
|
||||||
|
(str_nsave_ns_rv); \
|
||||||
|
})
|
||||||
|
#else
|
||||||
|
char *str_nsave_ns(const char *, unsigned int, Area *);
|
||||||
|
#endif
|
||||||
|
#define str_save(s,ap) ((s) \
|
||||||
|
? str_nsave_ns((s), strlen(s) + 1, (ap)) \
|
||||||
|
: NULL)
|
||||||
|
#define str_nsave(s,n,ap) (((s) && ((n) >= 0)) \
|
||||||
|
? str_nsave_ns((s), (n) + 1, (ap)) \
|
||||||
|
: NULL)
|
||||||
#endif
|
#endif
|
||||||
char *str_nsave(const char *, int, Area *);
|
|
||||||
size_t option(const char *);
|
size_t option(const char *);
|
||||||
char *getoptions(void);
|
char *getoptions(void);
|
||||||
void change_flag(enum sh_flag, int, char);
|
void change_flag(enum sh_flag, int, char);
|
||||||
|
Reference in New Issue
Block a user