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 <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
 
 #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<i; c++) {register char *ccp = path_component[c];
-                        while (*cp++ = *ccp++);
+                        while ((*cp++ = *ccp++));
                         *--cp = '/';
                         cp++;
                 }
@@ -425,7 +437,7 @@
                 dep_files[c].str = tlp;
                 dep_files[c].len = cp - tlp;
                 if (D_depend)
-                        printf("%s: dep_file[%d] = \"%s\" Len %d\n",
+                        printf("%s: dep_file[%d] = \"%s\" Len %ld\n",
                                 name, dep_file_index - 1, tlp, cp - tlp);
                 tlp = cp + 1;
                 if (oldc)
@@ -436,8 +448,8 @@
         }
 }
 
-output_dep(out)
-FILE *out;
+static void
+output_dep(FILE *out)
 {
 register int j;
 register int size = 1000;
@@ -479,12 +491,11 @@
 
                 /* process makefile */
 FILE *
-find_mak(file)
-char *file;
+find_mak(char *file)
 {
 FILE *mak;
 
-        if ((int) file) {
+        if (file) {
                 if ((mak = fopen(file, "r")) != NULL) {
                         real_mak_name = file;
                 } else if (update) {
@@ -514,7 +525,7 @@
         if (D_open)
                 printf("%s: opened makefile \"%s\"\n", name, real_mak_name);
         if (D_time)
-                printf("%s: makefile time = %d\n", name, makstat.st_mtime);
+                printf("%s: makefile time = %ld\n", name, makstat.st_mtime);
 
         return mak;
 }
@@ -543,8 +554,8 @@
         return mak;
 }
 
-skip_mak(makin, makout)
-register FILE *makin, *makout;
+static void
+skip_mak(FILE *makin, FILE *makout)
 {
 register int len = SALUTATIONLEN;
 
@@ -566,8 +577,8 @@
                 printf("eof = %d str = \"%s\"", mak_eof, makbuf);
 }
 
-expunge_mak(makin, makout)
-register FILE *makin, *makout;
+static void
+expunge_mak(FILE *makin, FILE *makout)
 {
 register int len = SALUTATIONLEN;
 register int oldlen = OLDSALUTATIONLEN;