dpkg-distaddfile.pl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/perl
  2. $dpkglibdir= ".";
  3. $version= '1.3.0'; # This line modified by Makefile
  4. use POSIX;
  5. use POSIX qw(:errno_h :signal_h);
  6. $fileslistfile= 'debian/files';
  7. push(@INC,$dpkglibdir);
  8. require 'controllib.pl';
  9. sub usageversion {
  10. print STDERR
  11. "Debian dpkg-distaddfile $version. Copyright (C) 1996
  12. Ian Jackson. This is free software; see the GNU General Public Licence
  13. version 2 or later for copying conditions. There is NO warranty.
  14. Usage:
  15. dpkg-distaddfile <filename> <section> <priority>
  16. Options: -f<fileslistfile> write files here instead of debian/files
  17. -h print this message
  18. ";
  19. }
  20. while (@ARGV && $ARGV[0] =~ m/^-/) {
  21. $_=shift(@ARGV);
  22. if (m/^-f/) {
  23. $fileslistfile= $';
  24. } elsif (m/^-h$/) {
  25. &usageversion; exit(0);
  26. } elsif (m/^--$/) {
  27. last;
  28. } else {
  29. &usageerr("unknown option $_");
  30. }
  31. }
  32. @ARGV==3 || &usageerr("need exactly a filename, section and priority");
  33. ($file,$section,$priority)= @ARGV;
  34. ($file =~ m/\s/ || $section =~ m/\s/ || $priority =~ m/\s/) &&
  35. &error("filename, section and priority may contain no whitespace");
  36. $fileslistfile="./$fileslistfile" if $fileslistfile =~ m/^\s/;
  37. open(Y,"> $fileslistfile.new") || &syserr("open new files list file");
  38. chown(@fowner, "$fileslistfile.new")
  39. || &syserr("chown new files list file");
  40. if (open(X,"< $fileslistfile")) {
  41. while (<X>) {
  42. s/\n$//;
  43. next if m/^(\S+) / && $1 eq $file;
  44. print(Y "$_\n") || &syserr("copy old entry to new files list file");
  45. }
  46. } elsif ($! != ENOENT) {
  47. &syserr("read old files list file");
  48. }
  49. print(Y "$file $section $priority\n")
  50. || &syserr("write new entry to new files list file");
  51. close(Y) || &syserr("close new files list file");
  52. rename("$fileslistfile.new",$fileslistfile) || &syserr("install new files list file");