aboutsummaryrefslogtreecommitdiffhomepage
path: root/libslang/slsh/scripts/lsrpm
diff options
context:
space:
mode:
Diffstat (limited to 'libslang/slsh/scripts/lsrpm')
-rwxr-xr-xlibslang/slsh/scripts/lsrpm85
1 files changed, 85 insertions, 0 deletions
diff --git a/libslang/slsh/scripts/lsrpm b/libslang/slsh/scripts/lsrpm
new file mode 100755
index 0000000..dcd607a
--- /dev/null
+++ b/libslang/slsh/scripts/lsrpm
@@ -0,0 +1,85 @@
+#! /usr/bin/env slsh
+% Generate a listing of an RPM file
+
+static define pgm_usage ()
+{
+ vmessage ("Usage: lsrpm FILENAME");
+ exit (1);
+}
+
+static variable RPM_Command = "rpm -q -l --dump -p ";
+
+static define exit_error (msg)
+{
+ () = fprintf (stderr, "%s\n", msg);
+ exit (1);
+}
+
+
+static define run_rpm (file)
+{
+ variable fp;
+ variable lines;
+ variable months =
+ ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
+ "Oct", "Nov", "Dec"];
+ variable s;
+
+ fp = popen (RPM_Command + file, "r");
+ if (fp == NULL)
+ exit_error ("Failed to open RPM process");
+
+ % each line contains:
+ % path size mtime md5sum mode owner group isconfig isdoc rdev symlink
+
+ variable six_months_ago = _time () - 3600*24*30*6;
+
+ foreach (fp)
+ {
+ variable path, size, mode, owner, group, symlink, mtime;
+ variable mstring;
+ variable tm;
+
+ s = ();
+ s = strchop (strtrim_end (s, "\n"), ' ', 0);
+
+ path = s[0];
+ size = s[1];
+ mtime = integer (s[2]);
+ mode = integer (s[4]);
+ owner = s[5];
+ group = s[6];
+
+ tm = localtime (mtime);
+ if (mtime < six_months_ago)
+ mtime = sprintf ("%s %2d %4d",
+ months[tm.tm_mon],
+ tm.tm_mday,
+ 1900 + tm.tm_year);
+ else
+ mtime = sprintf ("%s %2d % 2d:%02d",
+ months[tm.tm_mon],
+ tm.tm_mday,
+ tm.tm_hour,
+ tm.tm_min);
+
+
+ symlink = "";
+ if (stat_is ("lnk", mode))
+ symlink = " -> " + s[10];
+
+ mstring = stat_mode_to_string (mode);
+
+ if (-1 == fprintf (stdout,
+ "%8s %8s %8s %10s %s %s%s\n",
+ mstring, owner, group, size, mtime, path, symlink))
+ exit_error (sprintf ("Write failed: %s", errno_string (errno)));
+ }
+ () = pclose (fp);
+}
+
+if (__argc != 2)
+ pgm_usage ();
+
+run_rpm (__argv[1]);
+exit (0);