# HG changeset patch # User Stefan Anzinger # Date 1430154232 -7200 # Node ID 647f571f54da4189947203348edf8988e79a1899 # Parent 6e05dd55d795f9bb91799bde33f99090c4e92181# Parent 85b0935625c1ded29f29cfe43fb6e40991bfa743 Merge diff -r 6e05dd55d795 -r 647f571f54da mx/mx_graal.py --- a/mx/mx_graal.py Mon Apr 27 18:37:10 2015 +0200 +++ b/mx/mx_graal.py Mon Apr 27 19:03:52 2015 +0200 @@ -682,14 +682,17 @@ assert serviceName and member == 'META-INF/services/' + serviceName with zf.open(member) as serviceFile: serviceImpls = servicesMap.setdefault(serviceName, []) - serviceImpls.extend(serviceFile.readlines()) + for line in serviceFile.readlines(): + line = line.strip() + if line: + serviceImpls.append(line) graalServices = _filterGraalService(servicesMap.keys(), graalJars) for serviceName in graalServices: serviceImpls = servicesMap[serviceName] fd, tmp = tempfile.mkstemp(prefix=serviceName) f = os.fdopen(fd, 'w+') for serviceImpl in serviceImpls: - f.write(serviceImpl.rstrip() + os.linesep) + f.write(serviceImpl + os.linesep) target = join(destination, serviceName) f.close() shutil.move(tmp, target) diff -r 6e05dd55d795 -r 647f571f54da src/share/vm/graal/graalRuntime.cpp --- a/src/share/vm/graal/graalRuntime.cpp Mon Apr 27 18:37:10 2015 +0200 +++ b/src/share/vm/graal/graalRuntime.cpp Mon Apr 27 19:03:52 2015 +0200 @@ -1099,19 +1099,43 @@ GrowableArray* implNames = new GrowableArray(); char* line = buffer; while (line - buffer < num_read) { - char* nl = strchr(line, '\n'); - if (nl != NULL) { - *nl = '\0'; + // find line end (\r, \n or \r\n) + char* nextline = NULL; + char* cr = strchr(line, '\r'); + char* lf = strchr(line, '\n'); + if (cr != NULL && lf != NULL) { + char* min = MIN2(cr, lf); + *min = '\0'; + if (lf == cr + 1) { + nextline = lf + 1; + } else { + nextline = min + 1; + } + } else if (cr != NULL) { + *cr = '\0'; + nextline = cr + 1; + } else if (lf != NULL) { + *lf = '\0'; + nextline = lf + 1; } - // Turn all '.'s into '/'s - for (size_t index = 0; line[index] != '\0'; index++) { - if (line[index] == '.') { - line[index] = '/'; + // trim left + while (*line == ' ' || *line == '\t') line++; + char* end = line + strlen(line); + // trim right + while (end > line && (*(end -1) == ' ' || *(end -1) == '\t')) end--; + *end = '\0'; + // skip comments and empty lines + if (*line != '#' && strlen(line) > 0) { + // Turn all '.'s into '/'s + for (size_t index = 0; line[index] != '\0'; index++) { + if (line[index] == '.') { + line[index] = '/'; + } } + implNames->append(line); } - implNames->append(line); - if (nl != NULL) { - line = nl + 1; + if (nextline != NULL) { + line = nextline; } else { // File without newline at the end break;