diff --git a/src/confparse/confparse.c b/src/confparse/confparse.c index 45384ee..be87e1a 100644 --- a/src/confparse/confparse.c +++ b/src/confparse/confparse.c @@ -35,7 +35,7 @@ char* file_to_str(char *path) { - char *ret, *p; + char *buf, *ret, *p; int fd, i; struct stat st; @@ -46,7 +46,14 @@ file_to_str(char *path) stat(path, &st); /* Bufferize file */ - ret = _strdup((char*)mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, SEEK_SET)); + buf = (char*)mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, SEEK_SET); + + /* Copy buffer in return value */ + ret = _strdup(buf); + + /* Unmap buffer, thanks linkdd. */ + munmap(buf, st.st_size); + close(fd); /* Erase comment line from return value */ for(i = 0; (p = strchr(erase_delim_content(ret + i), COMMENT_CHAR));) diff --git a/src/util.c b/src/util.c index 839b5b2..2648b18 100644 --- a/src/util.c +++ b/src/util.c @@ -94,11 +94,11 @@ setwinstate(Window win, long state) } /** My strdup. the strdup of string.h isn't ansi compatible.. - * Thanks linkkd. + * Thanks linkdd. * \param str char pointer */ char* -_strdup(char const *str) +_strdup(const char *str) { char *ret = emalloc(strlen(str) + 1, sizeof(char));