X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f0f64538b17717665913f7657a6253a686f273ab..4bd1f48f0bf1ad1703be680ec2a38d626c6a2668:/src/xbt/xbt_os_file.c diff --git a/src/xbt/xbt_os_file.c b/src/xbt/xbt_os_file.c index 39dff2800d..789c14118e 100644 --- a/src/xbt/xbt_os_file.c +++ b/src/xbt/xbt_os_file.c @@ -9,37 +9,34 @@ #include "xbt/sysdep.h" #include "xbt/file.h" /* this module */ #include "xbt/log.h" -#include "portable.h" +#include "src/internal_config.h" -#ifndef _MSC_VER -#include "libgen.h" /* POSIX dirname */ +#ifdef _WIN32 +#include #endif +#include "libgen.h" /* POSIX dirname */ + /** @brief Get a single line from the stream (reimplementation of the GNU getline) * * This is a reimplementation of the GNU getline function, so that our code don't depends on the GNU libc. * - * xbt_getline() reads an entire line from stream, storing the address of the - * buffer containing the text into *buf. The buffer is null-terminated and - * includes the newline character, if one was found. + * xbt_getline() reads an entire line from stream, storing the address of the buffer containing the text into *buf. + * The buffer is null-terminated and includes the newline character, if one was found. * - * If *buf is NULL, then xbt_getline() will allocate a buffer for storing the - * line, which should be freed by the user program. + * If *buf is NULL, then xbt_getline() will allocate a buffer for storing the line, which should be freed by the user + * program. * - * Alternatively, before calling xbt_getline(), *buf can contain a pointer to a - * malloc()-allocated buffer *n bytes in size. If the buffer is not large - * enough to hold the line, xbt_getline() resizes it with realloc(), updating + * Alternatively, before calling xbt_getline(), *buf can contain a pointer to a malloc()-allocated buffer *n bytes in + * size. If the buffer is not large enough to hold the line, xbt_getline() resizes it with realloc(), updating * *buf and *n as necessary. * - * In either case, on a successful call, *buf and *n will be updated to reflect - * the buffer address and allocated size respectively. + * In either case, on a successful call, *buf and *n will be updated to reflect the buffer address and allocated size + * respectively. */ ssize_t xbt_getline(char **buf, size_t *n, FILE *stream) { - ssize_t i; - int ch; - - ch = getc(stream); + int ch = getc(stream); if (ferror(stream) || feof(stream)) return -1; @@ -48,15 +45,20 @@ ssize_t xbt_getline(char **buf, size_t *n, FILE *stream) *buf = xbt_malloc(*n); } - i = 0; + ssize_t i = 0; do { - if (i == *n) - *buf = xbt_realloc(*buf, *n += 512); - (*buf)[i++] = ch; + if (i == *n) { + *n += 512; + *buf = xbt_realloc(*buf, *n); + } + (*buf)[i] = ch; + i++; } while (ch != '\n' && (ch = getc(stream)) != EOF); - if (i == *n) - *buf = xbt_realloc(*buf, *n += 1); + if (i == *n) { + *n += 1; + *buf = xbt_realloc(*buf, *n); + } (*buf)[i] = '\0'; return i; @@ -67,28 +69,19 @@ ssize_t xbt_getline(char **buf, size_t *n, FILE *stream) * The argument is never modified, and the returned value must be freed after use. */ char *xbt_dirname(const char *path) { -#if _MSC_VER - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - errno_t err; - err = _splitpath_s(path, drive, _MAX_DRIVE, dir, _MAX_DIR, NULL,0, NULL,0); - return bprintf("%s%s",drive,dir); -#else - return dirname(xbt_strdup(path)); -#endif + char *tmp = xbt_strdup(path); + char *res = xbt_strdup(dirname(tmp)); + free(tmp); + return res; } + /** @brief Returns the file component of a path (reimplementation of POSIX basename) * * The argument is never modified, and the returned value must be freed after use. */ char *xbt_basename(const char *path) { -#if _MSC_VER - char file[1024]; - char ext[1024] - errno_t err; - err = _splitpath_s(path, NULL,0, NULL,0, file,1024, ext,1024); - return bprintf("%s%s",drive,dir); -#else - return basename(xbt_strdup(path)); -#endif + char *tmp = xbt_strdup(path); + char *res = xbt_strdup(basename(tmp)); + free(tmp); + return res; }