md: bring up to date for modern C to allow Clang and recent GCC to compile Authors: Michael Weiser, https://bugs.gentoo.org/642666 Alexey Sokolov, https://bugs.gentoo.org/758167 Fabian Groffen --- adv_cmds-147/md/md.c +++ adv_cmds-147/md/md.c @@ -78,6 +78,8 @@ #include #include #include +#include +#include #define LINESIZE 65536 // NeXT_MOD @@ -100,6 +102,7 @@ } dep_files[1000]; int dep_file_index; +static int qsort_strcmp(a, b) struct dep *a, *b; { @@ -137,9 +140,15 @@ static void scan_mak(FILE *, FILE *, char *); static void finish_mak(FILE *, FILE *); +static int read_dep(char *); +static void expunge_mak(FILE *, FILE *); +static void skip_mak(FILE *, FILE *); +static void output_dep(FILE *); +static void parse_dep(); +static void save_dot_o(); -main(argc,argv) -register char **argv; +int +main(int argc, char** argv) { int size; @@ -152,7 +161,7 @@ if (*token++ != '-' || !*token) break; else { register int flag; - for ( ; flag = *token++ ; ) { + for ( ; (flag = *token++) ; ) { switch (flag) { case 'd': delete++; @@ -177,7 +186,7 @@ expunge++; break; case 'D': - for ( ; flag = *token++ ; ) + for ( ; (flag = *token++) ; ) switch (flag) { case 'c': D_contents++; @@ -211,10 +220,10 @@ } if (!expunge && argc < 1) goto usage; - if ((int) outfile && (int) makefile) /* not both */ + if (outfile && makefile) /* not both */ goto usage; - if ((int) outfile) { + if (outfile) { /* * NeXT_MOD, For SGS stuff, in case still linked to master version */ @@ -227,7 +236,7 @@ exit(1); } else if (D_open) printf("%s: opened outfile \"%s\"\n", name, outfile); - } else if (mak = find_mak(makefile)) { + } else if ((mak = find_mak(makefile))) { makout = temp_mak(); out = makout; if (expunge) @@ -235,7 +244,7 @@ else skip_mak(mak, makout); } else if (mak_eof && /* non existent file == mt file */ - (int)(makout = temp_mak())) { /* but we need to be able */ + (makout = temp_mak()) != NULL) { /* but we need to be able */ out = makout; /* to write here */ } else if (makefile) { fprintf(stderr, "%s: makefile \"%s\" can not be opened or stat'ed\n", @@ -246,7 +255,7 @@ for (; argc--; argv++) { dep_file_index = 0; - if (size = read_dep(*argv)) { + if ((size = read_dep(*argv))) { save_dot_o(); if (D_depend) printf("%s: dot_o = \"%s\"\n", name, dot_o); @@ -269,8 +278,8 @@ } -read_dep(file) -register char *file; +int +read_dep(char *file) { register int fd; register int size; @@ -294,7 +303,7 @@ switch(statbuf.st_mode & S_IFMT) { case S_IFREG: if (D_time) - printf("%s: file time = %d\n", name, statbuf.st_mtime); + printf("%s: file time = %ld\n", name, statbuf.st_mtime); if (statbuf.st_size > IObuffer) { fprintf(stderr, "%s: file \"%s\" tooo big for IObuffer\n", @@ -302,9 +311,9 @@ goto out; } else if (force) break; - else if ((int) mak && statbuf.st_mtime < makstat.st_mtime) { + else if (mak && statbuf.st_mtime < makstat.st_mtime) { if (verbose || D_time) - fprintf(stderr, "%s: skipping \"%s\" %d < %d \"%s\"\n", + fprintf(stderr, "%s: skipping \"%s\" %ld < %ld \"%s\"\n", name, file, statbuf.st_mtime, makstat.st_mtime, real_mak_name); goto out; @@ -345,6 +354,7 @@ return 0; } +static void save_dot_o() { register char *cp = file_array; @@ -355,6 +365,7 @@ *svp = 0; } +static void parse_dep() { register char *lp = file_array; @@ -381,7 +392,8 @@ cp = dep_line; lp[-1] = 0; /* skip .o file name */ - while ((c = *cp++) && c != ':'); if (!c) continue; + while ((c = *cp++) && c != ':'); + if (!c) continue; next_filename: i = 0; abspath = 0; @@ -415,7 +427,7 @@ if (abspath) *cp++ = '/'; for (c=0; c