further optimisation attempts in the str_save() and str_nsave() area

This commit is contained in:
tg
2008-07-12 17:23:00 +00:00
parent e95a79e31c
commit b6236be77a
2 changed files with 48 additions and 21 deletions

25
sh.h
View File

@@ -100,7 +100,7 @@
#define __SCCSID(x) __IDSTRING(sccsid,x)
#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
#define MKSH_VERSION "R35 2008/07/10"
@@ -1423,11 +1423,28 @@ struct tbl **ktsort(struct table *);
void setctypes(const char *, int);
void initctypes(void);
#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
#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
char *str_nsave(const char *, int, Area *);
size_t option(const char *);
char *getoptions(void);
void change_flag(enum sh_flag, int, char);