(svn r16629) -Fix: depend hang on solaris

-Fix: depend do not append delimiter string before deps for non empty files
-Add: support for -s option (starting string delimiter)
This commit is contained in:
glx 2009-06-22 23:57:33 +00:00
parent d703f0c3b5
commit e6af53ea01
1 changed files with 27 additions and 11 deletions

View File

@ -812,6 +812,7 @@ int main(int argc, char *argv[])
bool ignorenext = true;
char *filename = NULL;
char *ext = NULL;
char *delimiter = NULL;
bool append = false;
bool verbose = false;
@ -852,6 +853,11 @@ int main(int argc, char *argv[])
ext = strdup(&argv[i][2]);
continue;
}
/* Starting string delimiter */
if (strncmp(argv[i], "-s", 2) == 0) {
if (delimiter != NULL) continue;
delimiter = strdup(&argv[i][2]);
}
/* Verbose */
if (strncmp(argv[i], "-v", 2) == 0) verbose = true;
continue;
@ -862,6 +868,9 @@ int main(int argc, char *argv[])
/* Default output file is Makefile */
if (filename == NULL) filename = strdup("Makefile");
/* Default delimiter string */
if (delimiter == NULL) delimiter = strdup("# DO NOT DELETE");
char backup[PATH_MAX];
strcpy(backup, filename);
strcat(backup, ".bak");
@ -881,18 +890,25 @@ int main(int argc, char *argv[])
fclose(src);
}
FILE *dst = fopen(backup, "wb");
if (content != NULL) fwrite(content, 1, size, dst);
fclose(dst);
FILE *dst = fopen(filename, "w");
bool found_delimiter = false;
/* Then append it to the real file. */
src = fopen(backup, "r");
dst = fopen(filename, "w");
while (fgets(content, size, src) != NULL) {
fputs(content, dst);
if (!append && !strncmp(content, "# DO NOT DELETE", 15)) break;
if (size != 0) {
src = fopen(backup, "wb");
fwrite(content, 1, size, src);
fclose(src);
/* Then append it to the real file. */
src = fopen(backup, "rb");
while (fgets(content, size, src) != NULL) {
fputs(content, dst);
if (!strncmp(content, delimiter, strlen(delimiter))) found_delimiter = true;
if (!append && found_delimiter) break;
}
fclose(src);
}
if (ftell(src) == 0) fprintf(dst, "\n# DO NOT DELETE\n");
if (!found_delimiter) fprintf(dst, "\n%s\n", delimiter);
for (StringMap::iterator it = _files.begin(); it != _files.end(); it++) {
for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) {
fprintf(dst, "%s: %s\n", it->first, *h);
@ -901,8 +917,8 @@ int main(int argc, char *argv[])
/* Clean up our mess. */
fclose(dst);
fclose(src);
free(delimiter);
free(filename);
free(ext);
free(content);