[BACK]Return to file.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / file

Diff for /src/usr.bin/file/file.c between version 1.29 and 1.30

version 1.29, 2015/04/24 16:30:06 version 1.30, 2015/04/24 16:47:32
Line 91 
Line 91 
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
         struct input_file       *files = NULL;          struct input_file        inf;
         int                      nfiles, opt, i, width = 0;          int                      opt, i, width = 0;
         FILE                    *f;          FILE                    *f;
         struct magic            *m;          struct magic            *m;
         char                    *home, *path;          char                    *home, *path;
Line 136 
Line 136 
         } else if (argc == 0)          } else if (argc == 0)
                 usage();                  usage();
   
         nfiles = argc;  
         if (nfiles != 0) {  
                 files = xcalloc(nfiles, sizeof *files);  
                 for (i = 0; i < argc; i++)  
                         open_file(&files[i], argv[i], &width);  
         }  
   
         home = getenv("HOME");          home = getenv("HOME");
         if (home == NULL || *home == '\0') {          if (home == NULL || *home == '\0') {
                 pw = getpwuid(getuid());                  pw = getpwuid(getuid());
Line 167 
Line 160 
         if (f == NULL)          if (f == NULL)
                 err(1, "%s", path);                  err(1, "%s", path);
   
         if (geteuid() == 0) {  
                 pw = getpwnam(FILE_USER);  
                 if (pw == NULL)  
                         errx(1, "unknown user %s", FILE_USER);  
                 if (setgroups(1, &pw->pw_gid) != 0)  
                         err(1, "setgroups");  
                 if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0)  
                         err(1, "setresgid");  
                 if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0)  
                         err(1, "setresuid");  
         }  
   
         m = magic_load(f, path, cflag || Wflag);          m = magic_load(f, path, cflag || Wflag);
         if (cflag) {          if (cflag) {
                 magic_dump(m);                  magic_dump(m);
                 exit(0);                  exit(0);
         }          }
   
         for (i = 0; i < nfiles; i++)          for (i = 0; i < argc; i++) {
                 test_file(m, &files[i], width);                  memset(&inf, 0, sizeof inf);
                   open_file(&inf, argv[i], &width);
                   test_file(m, &inf, width);
           }
         exit(0);          exit(0);
 }  }
   
Line 282 
Line 266 
                 }                  }
                 if (got == 0)                  if (got == 0)
                         break;                          break;
                 next = (char*)next + got;                  next = (char *)next + got;
                 left -= got;                  left -= got;
         }          }
   
Line 508 
Line 492 
                 printf("%s\n", inf->result);                  printf("%s\n", inf->result);
         else          else
                 printf("%-*s %s\n", width, inf->label, inf->result);                  printf("%-*s %s\n", width, inf->label, inf->result);
           free(inf->result);
   
         if (inf->mapped && inf->base != NULL)          if (inf->mapped && inf->base != NULL)
                 munmap(inf->base, inf->size);                  munmap(inf->base, inf->size);
         inf->base = NULL;          inf->base = NULL;
   
         free(inf->result);          if (inf->fd != -1)
                   close(inf->fd);
           free((void *)inf->label);
           free((void *)inf->path);
 }  }

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.30