#include "xbt/file.hpp"
#include <algorithm>
+#include <array>
#include <boost/algorithm/string.hpp> /* split */
#include <boost/tokenizer.hpp>
#include <cinttypes>
}
#endif
// If this point is reached, sendfile() actually is not available. Copy file by hand.
- const int bufsize = 1024 * 1024 * 4;
- auto* buf = new char[bufsize];
- while (int got = read(fdin, buf, bufsize)) {
+ std::vector<unsigned char> buf(1024 * 1024 * 4);
+ while (ssize_t got = read(fdin, buf.data(), buf.size())) {
if (got == -1) {
xbt_assert(errno == EINTR, "Cannot read from %s", src.c_str());
} else {
- const char* p = buf;
- int todo = got;
- while (int done = write(fdout, p, todo)) {
+ const unsigned char* p = buf.data();
+ ssize_t todo = got;
+ while (ssize_t done = write(fdout, p, todo)) {
if (done == -1) {
xbt_assert(errno == EINTR, "Cannot write into %s", target.c_str());
} else {
}
}
}
- delete[] buf;
close(fdin);
close(fdout);
}
// get library name from path
std::string fullpath = libname;
#if not defined(__APPLE__) && not defined(__HAIKU__)
- xbt_assert(0 != dl_iterate_phdr(visit_libs, &fullpath),
- "Can't find a linked %s - check your settings in smpi/privatize-libs", fullpath.c_str());
+ XBT_ATTRIB_UNUSED int dl_iterate_res = dl_iterate_phdr(visit_libs, &fullpath);
+ xbt_assert(dl_iterate_res != 0, "Can't find a linked %s - check your settings in smpi/privatize-libs",
+ fullpath.c_str());
XBT_DEBUG("Extra lib to privatize '%s' found", fullpath.c_str());
#else
xbt_die("smpi/privatize-libs is not (yet) compatible with OSX nor with Haiku");
unsigned int pad = 7;
if (libname.length() < pad)
pad = libname.length();
- std::string target_lib = simgrid::config::get_value<std::string>("smpi/tmpdir") + "/" +
- std::string(pad - std::to_string(rank).length(), '0') + std::to_string(rank) + libname.substr(pad);
+ std::string target_libname = std::string(pad - std::to_string(rank).length(), '0') + std::to_string(rank) + libname.substr(pad);
+ std::string target_lib = simgrid::config::get_value<std::string>("smpi/tmpdir") + "/" + target_libname;
target_libs.push_back(target_lib);
XBT_DEBUG("copy lib %s to %s, with size %lld", libpath.c_str(), target_lib.c_str(), (long long)fdin_size2);
smpi_copy_file(libpath, target_lib, fdin_size2);
- std::string sedcommand = "sed -i -e 's/" + libname + "/" + target_lib + "/g' " + target_executable;
+ std::string sedcommand = "sed -i -e 's/" + libname + "/" + target_libname + "/g' " + target_executable;
int status = system(sedcommand.c_str());
xbt_assert(status == 0, "error while applying sed command %s \n", sedcommand.c_str());
}