aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1995-02-06 17:37:51 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1995-02-06 17:37:51 -0200
commit2d053126e642bc1770ccc426ef0a95eb13f2085c (patch)
tree05f35d5b215a9cbd21433ad45a86434e56ec0937
parent3203460c9e44f44e4586ecee6b1cb528db9150c7 (diff)
downloadlua-2d053126e642bc1770ccc426ef0a95eb13f2085c.tar.gz
lua-2d053126e642bc1770ccc426ef0a95eb13f2085c.tar.bz2
lua-2d053126e642bc1770ccc426ef0a95eb13f2085c.zip
new function for copy strings (strdup is not ANSI)
-rw-r--r--strlib.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/strlib.c b/strlib.c
index f6de70fc..329a7937 100644
--- a/strlib.c
+++ b/strlib.c
@@ -3,16 +3,27 @@
3** String library to LUA 3** String library to LUA
4*/ 4*/
5 5
6char *rcs_strlib="$Id: strlib.c,v 1.10 1995/02/02 18:54:58 roberto Exp $"; 6char *rcs_strlib="$Id: strlib.c,v 1.11 1995/02/02 20:05:37 roberto Exp roberto $";
7 7
8#include <string.h> 8#include <string.h>
9#include <strings.h>
10#include <stdlib.h> 9#include <stdlib.h>
11#include <ctype.h> 10#include <ctype.h>
12 11
13#include "lua.h" 12#include "lua.h"
14#include "lualib.h" 13#include "lualib.h"
15 14
15
16static char *newstring (lua_Object o)
17{
18 char *s = lua_getstring(o);
19 char *ns = (char *)malloc(strlen(s)+1);
20 if (ns == 0)
21 lua_error("not enough memory for new string");
22 strcpy(ns, s);
23 return ns;
24}
25
26
16/* 27/*
17** Return the position of the first caracter of a substring into a string 28** Return the position of the first caracter of a substring into a string
18** LUA interface: 29** LUA interface:
@@ -86,7 +97,7 @@ static void str_sub (void)
86 lua_error ("incorrect arguments to function `strsub'"); 97 lua_error ("incorrect arguments to function `strsub'");
87 if (o3 != LUA_NOOBJECT && !lua_isnumber(o3)) 98 if (o3 != LUA_NOOBJECT && !lua_isnumber(o3))
88 lua_error ("incorrect third argument to function `strsub'"); 99 lua_error ("incorrect third argument to function `strsub'");
89 s = lua_copystring(o1); 100 s = newstring(o1);
90 start = lua_getnumber (o2); 101 start = lua_getnumber (o2);
91 end = o3 == LUA_NOOBJECT ? strlen(s) : lua_getnumber (o3); 102 end = o3 == LUA_NOOBJECT ? strlen(s) : lua_getnumber (o3);
92 if (end < start || start < 1 || end > strlen(s)) 103 if (end < start || start < 1 || end > strlen(s))
@@ -110,7 +121,7 @@ static void str_lower (void)
110 lua_Object o = lua_getparam (1); 121 lua_Object o = lua_getparam (1);
111 if (!lua_isstring(o)) 122 if (!lua_isstring(o))
112 lua_error ("incorrect arguments to function `strlower'"); 123 lua_error ("incorrect arguments to function `strlower'");
113 c = s = lua_copystring(o); 124 c = s = newstring(o);
114 while (*c != 0) 125 while (*c != 0)
115 { 126 {
116 *c = tolower(*c); 127 *c = tolower(*c);
@@ -132,7 +143,7 @@ static void str_upper (void)
132 lua_Object o = lua_getparam (1); 143 lua_Object o = lua_getparam (1);
133 if (!lua_isstring(o)) 144 if (!lua_isstring(o))
134 lua_error ("incorrect arguments to function `strlower'"); 145 lua_error ("incorrect arguments to function `strlower'");
135 c = s = lua_copystring(o); 146 c = s = newstring(o);
136 while (*c != 0) 147 while (*c != 0)
137 { 148 {
138 *c = toupper(*c); 149 *c = toupper(*c);