diff --git a/common/include/villas/utils.hpp b/common/include/villas/utils.hpp index cd5d46ffe..45d320c6d 100644 --- a/common/include/villas/utils.hpp +++ b/common/include/villas/utils.hpp @@ -177,9 +177,6 @@ char * vstrcatf(char **dest, const char *fmt, va_list va) char * strf(const char *fmt, ...); char * vstrf(const char *fmt, va_list va); -/** Allocate and initialize memory. */ -void * alloc(size_t bytes); - /** Allocate and copy memory. */ void * memdup(const void *src, size_t bytes); diff --git a/common/lib/CMakeLists.txt b/common/lib/CMakeLists.txt index 3a59e654d..a359051a5 100644 --- a/common/lib/CMakeLists.txt +++ b/common/lib/CMakeLists.txt @@ -49,6 +49,10 @@ add_library(villas-common SHARED popen.cpp ) +if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) + target_link_libraries(villas-common PUBLIC "-lstdc++fs") +endif() + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") target_sources(villas-common PRIVATE tsc.cpp) endif() diff --git a/common/lib/advio.cpp b/common/lib/advio.cpp index a4a1cbe95..15e76ced4 100644 --- a/common/lib/advio.cpp +++ b/common/lib/advio.cpp @@ -22,6 +22,14 @@ * along with this program. If not, see . *********************************************************************************/ +#if __GNUC__ <= 7 && !defined(__clang__) + #include + namespace fs = std::experimental::filesystem; +#else + #include + namespace fs = std::filesystem; +#endif + #include #include #include @@ -198,10 +206,9 @@ int aislocal(const char *uri) AFILE * afopen(const char *uri, const char *mode) { int ret; - char *cwd; const char *sep; - AFILE *af = (AFILE *) alloc(sizeof(AFILE)); + AFILE *af = new AFILE; snprintf(af->mode, sizeof(af->mode), "%s", mode); @@ -216,13 +223,8 @@ AFILE * afopen(const char *uri, const char *mode) return nullptr; /* Handle relative paths */ - if (uri[0] != '/') { - cwd = getcwd(nullptr, 0); - - af->uri = strf("file://%s/%s", cwd, uri); - - free(cwd); - } + if (uri[0] != '/') + af->uri = strf("file://%s/%s", fs::current_path().c_str(), uri); else af->uri = strf("file://%s", uri); } @@ -264,7 +266,8 @@ AFILE * afopen(const char *uri, const char *mode) out0: curl_easy_cleanup(af->curl); out1: fclose(af->file); out2: free(af->uri); - free(af); + + delete af; return nullptr; } @@ -284,7 +287,8 @@ int afclose(AFILE *af) return ret; free(af->uri); - free(af); + + delete af; return 0; } diff --git a/common/lib/buffer.cpp b/common/lib/buffer.cpp index a955dd056..149408df6 100644 --- a/common/lib/buffer.cpp +++ b/common/lib/buffer.cpp @@ -30,7 +30,7 @@ int buffer_init(struct buffer *b, size_t size) { b->len = 0; b->size = size; - b->buf = (char *) malloc(size); + b->buf = new char[size]; if (!b->buf) return -1; @@ -42,7 +42,7 @@ int buffer_init(struct buffer *b, size_t size) int buffer_destroy(struct buffer *b) { if (b->buf) - free(b->buf); + delete[] b->buf; b->state = State::DESTROYED; diff --git a/common/lib/hist.cpp b/common/lib/hist.cpp index d6ccea6f3..d0f004190 100644 --- a/common/lib/hist.cpp +++ b/common/lib/hist.cpp @@ -143,7 +143,7 @@ void Hist::print(bool details) const info("Stddev: %g", getStddev()); if (details && total - higher - lower > 0) { - char *buf =dump(); + char *buf = dump(); info("Matlab: %s", buf); free(buf); @@ -187,7 +187,7 @@ void Hist::plot() const char * Hist::dump() const { - char *buf = (char *) alloc(128); + char *buf = new char[128]; strcatf(&buf, "[ "); diff --git a/common/lib/kernel/pci.cpp b/common/lib/kernel/pci.cpp index 0d627b207..bda24a42b 100644 --- a/common/lib/kernel/pci.cpp +++ b/common/lib/kernel/pci.cpp @@ -57,7 +57,7 @@ int pci_init(struct pci *p) (strcmp(e->d_name, "..") == 0) ) continue; - struct pci_device *d = (struct pci_device *) alloc(sizeof(struct pci_device)); + struct pci_device *d = new struct pci_device; struct { const char *s; int *p; } map[] = { { "vendor", &d->id.vendor }, @@ -227,8 +227,7 @@ int pci_device_parse_id(struct pci_device *f, const char *str, const char **erro return 0; -fail: - free(tmp); +fail: free(tmp); return -1; } @@ -314,9 +313,8 @@ size_t pci_get_regions(const struct pci_device *d, struct pci_region** regions) } if (valid_regions > 0) { - const size_t len = valid_regions * sizeof (struct pci_region); - *regions = (struct pci_region *) malloc(len); - memcpy(*regions, _regions, len); + *regions = new struct pci_region[valid_regions]; + memcpy(*regions, _regions, valid_regions * sizeof (struct pci_region)); } return valid_regions; diff --git a/common/lib/kernel/vfio.cpp b/common/lib/kernel/vfio.cpp index ceb327e45..c94671c73 100644 --- a/common/lib/kernel/vfio.cpp +++ b/common/lib/kernel/vfio.cpp @@ -579,7 +579,7 @@ VfioDevice::pciHotReset() const size_t reset_infolen = sizeof(struct vfio_pci_hot_reset_info) + sizeof(struct vfio_pci_dependent_device) * 64; - auto reset_info = reinterpret_cast + auto reset_info = reinterpret_cast (calloc(1, reset_infolen)); reset_info->argsz = reset_infolen; diff --git a/common/lib/kernel/vfio_legacy.cpp b/common/lib/kernel/vfio_legacy.cpp index 6e143fb32..d487864f3 100644 --- a/common/lib/kernel/vfio_legacy.cpp +++ b/common/lib/kernel/vfio_legacy.cpp @@ -117,7 +117,7 @@ int vfio_device_destroy(struct vfio_device *d) debug(5, "VFIO: closed device: name=%s, fd=%d", d->name, d->fd); - free(d->mappings); + delete[] d->mappings; free(d->name); return 0; @@ -252,7 +252,7 @@ int vfio_device_attach(struct vfio_device *d, struct vfio_container *c, const ch } if (!g) { - g = alloc(sizeof(struct vfio_group)); + g = new struct vfio_group; /* Aquire group ownership */ ret = vfio_group_attach(g, c, index); @@ -277,9 +277,9 @@ int vfio_device_attach(struct vfio_device *d, struct vfio_container *c, const ch if (ret < 0) serror("Failed to get VFIO device info for: %s", d->name); - d->irqs = alloc(d->info.num_irqs * sizeof(struct vfio_irq_info)); - d->regions = alloc(d->info.num_regions * sizeof(struct vfio_region_info)); - d->mappings = alloc(d->info.num_regions * sizeof(void *)); + d->irqs = new struct vfio_irq_info[d->info.num_irqs]; + d->regions = new struct vfio_region_info[d->info.num_regions]; + d->mappings = new void *[d->info.num_regions]; /* Get device regions */ for (int i = 0; i < d->info.num_regions && i < 8; i++) { @@ -321,8 +321,8 @@ int vfio_pci_reset(struct vfio_device *d) size_t reset_infolen = sizeof(struct vfio_pci_hot_reset_info) + sizeof(struct vfio_pci_dependent_device) * 64; size_t resetlen = sizeof(struct vfio_pci_hot_reset) + sizeof(int32_t) * 1; - struct vfio_pci_hot_reset_info *reset_info = (struct vfio_pci_hot_reset_info *) alloc(reset_infolen); - struct vfio_pci_hot_reset *reset = (struct vfio_pci_hot_reset *) alloc(resetlen); + struct vfio_pci_hot_reset_info *reset_info = new char[reset_infolen]; + struct vfio_pci_hot_reset *reset = new char[resetlen]; reset_info->argsz = reset_infolen; reset->argsz = resetlen; @@ -400,7 +400,7 @@ int vfio_pci_msi_deinit(struct vfio_device *d, int efds[32]) return -1; irq_setlen = sizeof(struct vfio_irq_set) + sizeof(int) * irq_count; - irq_set = alloc(irq_setlen); + irq_set = new char[irq_setlen]; irq_set->argsz = irq_setlen; irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER; @@ -434,7 +434,7 @@ int vfio_pci_msi_init(struct vfio_device *d, int efds[32]) return -1; irq_setlen = sizeof(struct vfio_irq_set) + sizeof(int) * irq_count; - irq_set = alloc(irq_setlen); + irq_set = new char[irq_setlen]; irq_set->argsz = irq_setlen; irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER; diff --git a/common/lib/utils.cpp b/common/lib/utils.cpp index b23a1a917..6ce59b170 100644 --- a/common/lib/utils.cpp +++ b/common/lib/utils.cpp @@ -212,17 +212,6 @@ double randf() return (double) random() / RAND_MAX; } -void * alloc(size_t bytes) -{ - void *p = malloc(bytes); - if (!p) - error("Failed to allocate memory"); - - memset(p, 0, bytes); - - return p; -} - char * vstrcatf(char **dest, const char *fmt, va_list ap) { char *tmp; @@ -271,7 +260,7 @@ char * vstrf(const char *fmt, va_list va) void * memdup(const void *src, size_t bytes) { - void *dst = alloc(bytes); + void *dst = new char[bytes]; memcpy(dst, src, bytes);