Clean up some compiler warnings.

* commands.c, commands.h: Use unsigned char for flags.
* dir.c: Use time_t and size_t, and char for a boolean value.
* job.c: Use unsigned and char.
* read.c: Return a signed type since -1 is a valid return code.
diff --git a/commands.c b/commands.c
index bc418b7..6a9df7c 100644
--- a/commands.c
+++ b/commands.c
@@ -411,7 +411,7 @@
 
   for (idx = 0; idx < nlines; ++idx)
     {
-      int flags = 0;
+      unsigned char flags = 0;
       const char *p = lines[idx];
 
       while (isblank (*p) || *p == '-' || *p == '@' || *p == '+')
diff --git a/commands.h b/commands.h
index ec70620..db95fb2 100644
--- a/commands.h
+++ b/commands.h
@@ -22,7 +22,7 @@
     gmk_floc fileinfo;          /* Where commands were defined.  */
     char *commands;             /* Commands text.  */
     char **command_lines;       /* Commands chopped up into lines.  */
-    char *lines_flags;          /* One set of flag bits for each line.  */
+    unsigned char *lines_flags; /* One set of flag bits for each line.  */
     unsigned short ncommand_lines;/* Number of command lines.  */
     char recipe_prefix;         /* Recipe prefix for this command set.  */
     unsigned int any_recurse:1; /* Nonzero if any 'lines_flags' elt has */
diff --git a/dir.c b/dir.c
index baeaaa3..de85a3c 100644
--- a/dir.c
+++ b/dir.c
@@ -248,9 +248,9 @@
      * qualified name of the directory. Beware though, this is also
      * unreliable. I'm open to suggestion on a better way to emulate inode.  */
     char *path_key;
-    int   ctime;
-    int   mtime;        /* controls check for stale directory cache */
-    int   fs_flags;     /* FS_FAT, FS_NTFS, ... */
+    time_t ctime;
+    time_t mtime;        /* controls check for stale directory cache */
+    int fs_flags;     /* FS_FAT, FS_NTFS, ... */
 # define FS_FAT      0x1
 # define FS_NTFS     0x2
 # define FS_UNKNOWN  0x4
@@ -405,7 +405,7 @@
 struct dirfile
   {
     const char *name;           /* Name of the file.  */
-    short length;
+    size_t length;
     short impossible;           /* This file is impossible.  */
   };
 
diff --git a/implicit.c b/implicit.c
index 7af635c..aa33b83 100644
--- a/implicit.c
+++ b/implicit.c
@@ -317,7 +317,7 @@
         {
           const char *target = rule->targets[ti];
           const char *suffix = rule->suffixes[ti];
-          int check_lastslash;
+          char check_lastslash;
 
           /* Rules that can match any filename and are not terminal
              are ignored if we're recursing, so that they cannot be
@@ -438,7 +438,7 @@
       for (ri = 0; ri < nrules; ri++)
         {
           struct dep *dep;
-          int check_lastslash;
+          char check_lastslash;
           unsigned int failed = 0;
           int file_variables_set = 0;
           unsigned int deps_found = 0;
diff --git a/job.c b/job.c
index 321a1e8..084c1b8 100644
--- a/job.c
+++ b/job.c
@@ -589,7 +589,7 @@
   while ((children != 0 || shell_function_pid != 0)
          && (block || REAP_MORE))
     {
-      int remote = 0;
+      unsigned int remote = 0;
       pid_t pid;
       int exit_code, exit_sig, coredump;
       struct child *lastc, *c;
@@ -3109,7 +3109,7 @@
                 /* Write another line into the batch file.  */
                 if (t > tstart)
                   {
-                    int c = *t;
+                    char c = *t;
                     *t = '\0';
                     fputs (tstart, batch);
                     DB (DB_JOBS, ("\t%s", tstart));
diff --git a/read.c b/read.c
index 95c8850..bcd6c24 100644
--- a/read.c
+++ b/read.c
@@ -2467,7 +2467,7 @@
    Since we aren't really reading from a file, don't bother with linenumbers.
  */
 
-static unsigned long
+static long
 readstring (struct ebuffer *ebuf)
 {
   char *eol;
@@ -3013,12 +3013,12 @@
         PARSEFS_NOCACHE - Do not add filenames to the strcache (caller frees)
   */
 
+void dir_setup_glob (glob_t *glob);
+
 void *
 parse_file_seq (char **stringp, unsigned int size, int stopmap,
                 const char *prefix, int flags)
 {
-  extern void dir_setup_glob (glob_t *glob);
-
   /* tmp points to tmpbuf after the prefix, if any.
      tp is the end of the buffer. */
   static char *tmpbuf = NULL;