Browse Source

Less stack.

Brian Aker 12 years ago
parent
commit
61318a9755
8 changed files with 82 additions and 66 deletions
  1. 4 3
      libtest/client.cc
  2. 13 10
      libtest/cmdline.cc
  3. 4 3
      libtest/drizzled.cc
  4. 15 12
      libtest/killpid.cc
  5. 10 8
      libtest/main.cc
  6. 25 21
      libtest/server.cc
  7. 4 3
      libtest/server_container.cc
  8. 7 6
      libtest/tmpfile.cc

+ 4 - 3
libtest/client.cc

@@ -110,11 +110,12 @@ struct addrinfo* SimpleClient::lookup()
   hints.ai_socktype= SOCK_STREAM;
   hints.ai_protocol= IPPROTO_TCP;
 
-  char service[NI_MAXSERV];
-  (void)snprintf(service, NI_MAXSERV, "%d", _port);
+  libtest::vchar_t service;
+  service.resize(NI_MAXSERV);
+  (void)snprintf(&service[0], service.size(), "%d", _port);
 
   int getaddrinfo_error;
-  if ((getaddrinfo_error= getaddrinfo(_hostname.c_str(), service, &hints, &ai)) != 0)
+  if ((getaddrinfo_error= getaddrinfo(_hostname.c_str(), &service[0], &hints, &ai)) != 0)
   {
     if (getaddrinfo_error != EAI_SYSTEM)
     {

+ 13 - 10
libtest/cmdline.cc

@@ -516,9 +516,10 @@ bool Application::Pipe::read(libtest::vchar_t& arg)
 
   bool data_was_read= false;
 
+  libtest::vchar_t buffer;
+  buffer.resize(1024);
   ssize_t read_length;
-  char buffer[1024]= { 0 };
-  while ((read_length= ::read(_pipe_fd[READ], buffer, sizeof(buffer))))
+  while ((read_length= ::read(_pipe_fd[READ], &buffer[0], buffer.size())))
   {
     if (read_length == -1)
     {
@@ -705,10 +706,11 @@ void Application::create_argv(const char *args[])
     built_argv.push_back(strdup("--free-fill=DE"));
 
     std::string log_file= create_tmpfile("valgrind");
-    char buffer[1024];
-    int length= snprintf(buffer, sizeof(buffer), "--log-file=%s", log_file.c_str());
-    fatal_assert(length > 0 and size_t(length) < sizeof(buffer));
-    built_argv.push_back(strdup(buffer));
+    libtest::vchar_t buffer;
+    buffer.resize(1024);
+    int length= snprintf(&buffer[0], buffer.size(), "--log-file=%s", log_file.c_str());
+    fatal_assert(length > 0 and size_t(length) < buffer.size());
+    built_argv.push_back(strdup(&buffer[0]));
   }
   else if (_use_ptrcheck)
   {
@@ -719,10 +721,11 @@ void Application::create_argv(const char *args[])
     built_argv.push_back(strdup("--error-exitcode=1"));
     built_argv.push_back(strdup("--tool=exp-ptrcheck"));
     std::string log_file= create_tmpfile("ptrcheck");
-    char buffer[1024];
-    int length= snprintf(buffer, sizeof(buffer), "--log-file=%s", log_file.c_str());
-    fatal_assert(length > 0 and size_t(length) < sizeof(buffer));
-    built_argv.push_back(strdup(buffer));
+    libtest::vchar_t buffer;
+    buffer.resize(1024);
+    int length= snprintf(&buffer[0], buffer.size(), "--log-file=%s", log_file.c_str());
+    fatal_assert(length > 0 and size_t(length) < buffer.size());
+    built_argv.push_back(&buffer[0]);
   }
   else if (_use_gdb)
   {

+ 4 - 3
libtest/drizzled.cc

@@ -182,9 +182,10 @@ public:
   {
     if (arg > 0)
     {
-      char buffer[1024];
-      snprintf(buffer, sizeof(buffer), "--drizzle-protocol.port=%d", int(arg));
-      app.add_option(buffer);
+      libtest::vchar_t buffer;
+      buffer.resize(1024);
+      snprintf(&buffer[1024], buffer.size(), "--drizzle-protocol.port=%d", int(arg));
+      app.add_option(&buffer[1024]);
     }
   }
 

+ 15 - 12
libtest/killpid.cc

@@ -123,14 +123,15 @@ bool check_pid(const std::string &filename)
   FILE *fp;
   if ((fp= fopen(filename.c_str(), "r")))
   {
-    char pid_buffer[1024];
+    libtest::vchar_t pid_buffer;
+    pid_buffer.resize(1024);
 
-    char *ptr= fgets(pid_buffer, sizeof(pid_buffer), fp);
+    char *ptr= fgets(&pid_buffer[0], pid_buffer.size(), fp);
     fclose(fp);
 
     if (ptr)
     {
-      pid_t pid= (pid_t)atoi(pid_buffer);
+      pid_t pid= (pid_t)atoi(&pid_buffer[0]);
       if (pid > 0)
       {
         return (::kill(pid, 0) == 0);
@@ -152,14 +153,15 @@ bool kill_file(const std::string &filename)
   FILE *fp;
   if ((fp= fopen(filename.c_str(), "r")))
   {
-    char pid_buffer[1024];
+    libtest::vchar_t pid_buffer;
+    pid_buffer.resize(1024);
 
-    char *ptr= fgets(pid_buffer, sizeof(pid_buffer), fp);
+    char *ptr= fgets(&pid_buffer[0], pid_buffer.size(), fp);
     fclose(fp);
 
     if (ptr)
     {
-      pid_t pid= (pid_t)atoi(pid_buffer);
+      pid_t pid= (pid_t)atoi(&pid_buffer[0]);
       if (pid != 0)
       {
         bool ret= kill_pid(pid);
@@ -190,14 +192,14 @@ pid_t get_pid_from_file(const std::string &filename, std::stringstream& error_me
 
   if ((fp= fopen(filename.c_str(), "r")))
   {
-    char pid_buffer[1024];
+    libtest::vchar_t pid_buffer;
+    pid_buffer.resize(1024);
 
-    char *ptr= fgets(pid_buffer, sizeof(pid_buffer), fp);
-    fclose(fp);
+    char *ptr= fgets(&pid_buffer[0], pid_buffer.size(), fp);
 
     if (ptr)
     {
-      ret= (pid_t)atoi(pid_buffer);
+      ret= (pid_t)atoi(&pid_buffer[0]);
       if (ret < 1)
       {
         error_message << LIBTEST_AT << " Invalid pid was read from file " << filename;
@@ -212,8 +214,9 @@ pid_t get_pid_from_file(const std::string &filename, std::stringstream& error_me
   }
   else
   {
-    char buffer[1024];
-    char *current_directory= getcwd(buffer, sizeof(buffer));
+    libtest::vchar_t buffer;
+    buffer.resize(1024);
+    char *current_directory= getcwd(&buffer[0], buffer.size());
     error_message << "Error while opening " << current_directory << "/" << filename << " " << strerror(errno);
   }
   

+ 10 - 8
libtest/main.cc

@@ -220,22 +220,24 @@ int main(int argc, char *argv[])
     is_massive(opt_massive);
   }
 
-  char tmp_directory[1024];
+  libtest::vchar_t tmp_directory;
+  tmp_directory.resize(1024);
   if (getenv("LIBTEST_TMP"))
   {
-    snprintf(tmp_directory, sizeof(tmp_directory), "%s", getenv("LIBTEST_TMP"));
+    snprintf(&tmp_directory[0], tmp_directory.size(), "%s", getenv("LIBTEST_TMP"));
   }
   else
   {
-    snprintf(tmp_directory, sizeof(tmp_directory), "%s", LIBTEST_TEMP);
+    snprintf(&tmp_directory[0], tmp_directory.size(), "%s", LIBTEST_TEMP);
   }
 
-  if (chdir(tmp_directory) == -1)
+  if (chdir(&tmp_directory[0]) == -1)
   {
-    char getcwd_buffer[1024];
-    char *dir= getcwd(getcwd_buffer, sizeof(getcwd_buffer));
+    libtest::vchar_t getcwd_buffer;
+    getcwd_buffer.resize(1024);
+    char *dir= getcwd(&getcwd_buffer[0], getcwd_buffer.size());
 
-    Error << "Unable to chdir() from " << dir << " to " << tmp_directory << " errno:" << strerror(errno);
+    Error << "Unable to chdir() from " << dir << " to " << &tmp_directory[0] << " errno:" << strerror(errno);
     return EXIT_FAILURE;
   }
 
@@ -329,7 +331,7 @@ int main(int argc, char *argv[])
 
       std::ofstream xml_file;
       std::string file_name;
-      file_name.append(tmp_directory);
+      file_name.append(&tmp_directory[0]);
       file_name.append(frame->name());
       file_name.append(".xml");
       xml_file.open(file_name.c_str(), std::ios::trunc);

+ 25 - 21
libtest/server.cc

@@ -254,8 +254,9 @@ bool Server::start()
         Buffer buf( get_current_dir_name());
         char *getcwd_buf= buf.buf();
 #else
-        char buf[PATH_MAX];
-        char *getcwd_buf= getcwd(buf, sizeof(buf));
+        libtest::vchar_t buf;
+        buf.resize(PATH_MAX);
+        char *getcwd_buf= getcwd(&buf[0], buf.size());
 #endif // __GLIBC__
         throw libtest::disconnected(LIBYATL_DEFAULT_PARAM,
                                     hostname(), port(),
@@ -366,73 +367,76 @@ void Server::add_option(const std::string& name_, const std::string& value_)
 
 bool Server::set_socket_file()
 {
-  char file_buffer[FILENAME_MAX];
+  libtest::vchar_t file_buffer;
+  file_buffer.resize(FILENAME_MAX);
   file_buffer[0]= 0;
 
   if (broken_pid_file())
   {
-    snprintf(file_buffer, sizeof(file_buffer), "/tmp/%s.socketXXXXXX", name());
+    snprintf(&file_buffer[0], file_buffer.size(), "/tmp/%s.socketXXXXXX", name());
   }
   else
   {
-    snprintf(file_buffer, sizeof(file_buffer), "var/run/%s.socketXXXXXX", name());
+    snprintf(&file_buffer[0], file_buffer.size(), "var/run/%s.socketXXXXXX", name());
   }
 
   int fd;
-  if ((fd= mkstemp(file_buffer)) == -1)
+  if ((fd= mkstemp(&file_buffer[0])) == -1)
   {
-    perror(file_buffer);
+    perror(&file_buffer[0]);
     return false;
   }
   close(fd);
-  unlink(file_buffer);
+  unlink(&file_buffer[0]);
 
-  _socket= file_buffer;
+  _socket= &file_buffer[0];
 
   return true;
 }
 
 bool Server::set_pid_file()
 {
-  char file_buffer[FILENAME_MAX];
+  libtest::vchar_t file_buffer;
+  file_buffer.resize(FILENAME_MAX);
   file_buffer[0]= 0;
 
   if (broken_pid_file())
   {
-    snprintf(file_buffer, sizeof(file_buffer), "/tmp/%s.pidXXXXXX", name());
+    snprintf(&file_buffer[0], file_buffer.size(), "/tmp/%s.pidXXXXXX", name());
   }
   else
   {
-    snprintf(file_buffer, sizeof(file_buffer), "var/run/%s.pidXXXXXX", name());
+    snprintf(&file_buffer[0], file_buffer.size(), "var/run/%s.pidXXXXXX", name());
   }
 
   int fd;
-  if ((fd= mkstemp(file_buffer)) == -1)
+  if ((fd= mkstemp(&file_buffer[0])) == -1)
   {
-    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
+    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", &file_buffer[0], strerror(errno));
   }
   close(fd);
-  unlink(file_buffer);
+  unlink(&file_buffer[0]);
 
-  _pid_file= file_buffer;
+  _pid_file= &file_buffer[0];
 
   return true;
 }
 
 bool Server::set_log_file()
 {
-  char file_buffer[FILENAME_MAX];
+  libtest::vchar_t file_buffer;
+  file_buffer.resize(FILENAME_MAX);
   file_buffer[0]= 0;
 
-  snprintf(file_buffer, sizeof(file_buffer), "var/log/%s.logXXXXXX", name());
+  snprintf(&file_buffer[0], file_buffer.size(), "var/log/%s.logXXXXXX", name());
   int fd;
-  if ((fd= mkstemp(file_buffer)) == -1)
+  if ((fd= mkstemp(&file_buffer[0])) == -1)
   {
-    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
+    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", &file_buffer[0], strerror(errno));
   }
   close(fd);
 
-  _log_file= file_buffer;
+  _log_file= &file_buffer[0];
 
   return true;
 }

+ 4 - 3
libtest/server_container.cc

@@ -76,13 +76,14 @@ void server_startup_st::push_server(Server *arg)
   }
   else
   {
-    char port_str[NI_MAXSERV]= { 0 };
-    snprintf(port_str, sizeof(port_str), "%u", int(arg->port()));
+    libtest::vchar_t port_str;
+    port_str.resize(NI_MAXSERV);
+    snprintf(&port_str[0], port_str.size(), "%u", int(arg->port()));
 
     server_config_string+= "--server=";
     server_config_string+= arg->hostname();
     server_config_string+= ":";
-    server_config_string+= port_str;
+    server_config_string+= &port_str[0];
     server_config_string+= " ";
   }
 

+ 7 - 6
libtest/tmpfile.cc

@@ -40,21 +40,22 @@ namespace libtest {
 
 std::string create_tmpfile(const std::string& name)
 {
-  char file_buffer[FILENAME_MAX];
+  libtest::vchar_t file_buffer;
+  file_buffer.resize(FILENAME_MAX);
   file_buffer[0]= 0;
 
-  int length= snprintf(file_buffer, sizeof(file_buffer), "var/tmp/%s.XXXXXX", name.c_str());
+  int length= snprintf(&file_buffer[0], file_buffer.size(), "var/tmp/%s.XXXXXX", name.c_str());
   fatal_assert(length > 0);
 
   int fd;
-  if ((fd= mkstemp(file_buffer)) == -1)
+  if ((fd= mkstemp(&file_buffer[0])) == -1)
   {
-    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", file_buffer, strerror(errno));
+    throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "mkstemp() failed on %s with %s", &file_buffer[0], strerror(errno));
   }
   close(fd);
-  unlink(file_buffer);
+  unlink(&file_buffer[0]);
 
-  return file_buffer;
+  return &file_buffer[0];
 }
 
 } // namespace libtest