Index: dmake/make.c =================================================================== RCS file: /cvs/tools/dmake/make.c,v retrieving revision 1.11.2.1 diff -u -r1.11.2.1 make.c --- dmake/make.c 6 Jan 2008 21:21:09 -0000 1.11.2.1 +++ dmake/make.c 29 Jan 2008 17:37:28 -0000 @@ -166,7 +166,7 @@ len=cell->len; #else /* For cygwin with .WINPATH set the lenght of the converted - * filepaths might me longer. Extra checking is needed ... */ + * filepaths might be longer. Extra checking is needed ... */ tpath = DO_WINPATH(cell->datum); if( tpath == cell->datum ) { len=cell->len; @@ -174,26 +174,26 @@ else { /* ... but only if DO_WINPATH() did something. */ len = strlen(tpath); - - if( len > slen_rest ) { - /* We need more memory. As DOS paths are usually shorter than the - * original cygwin POSIX paths (exception mounted paths) this should - * rarely happen. */ - int p_offset = p - result; - /* Get more than needed. */ - slen += slen + len-slen_rest + 128; - if((result = realloc( result, (unsigned)(slen*sizeof(char)) ) ) == NULL) - No_ram(); - p = result + p_offset; - } } - - slen_rest -= len; + if( len >= slen_rest ) { + /* We need more memory. As DOS paths are usually shorter than the + * original cygwin POSIX paths (exception mounted paths) this should + * rarely happen. */ + int p_offset = p - result; + /* Get more than needed. */ + slen = slen + len - slen_rest + 128; + if((result = realloc( result, slen ) ) == NULL) + No_ram(); + p = result + p_offset; + } #endif memcpy((void *)p, (void *)tpath, len); p += len; *p++ = ' '; + + slen_rest = slen - (p - result); + next = cell->next; free_cell(cell); }