]> err.no Git - pwstore/commitdiff
Check gpg's exitcode
authorPeter Palfrader <peter@palfrader.org>
Thu, 18 Sep 2008 18:36:37 +0000 (20:36 +0200)
committerPeter Palfrader <peter@palfrader.org>
Thu, 18 Sep 2008 18:36:37 +0000 (20:36 +0200)
pws

diff --git a/pws b/pws
index 2258b31326c67f66a5ab2ce90e5b9d27826f7331..c188a08ffecd63cc9f2c2cc8352c4c63b4c6b968 100755 (executable)
--- a/pws
+++ b/pws
@@ -40,7 +40,7 @@ class GnuPG
     return outtxt, stderrtxt, statustxt
   end
 
-  def GnuPG.gpgcall(intxt, args)
+  def GnuPG.gpgcall(intxt, args, require_success = false)
     inR, inW = IO.pipe
     outR, outW = IO.pipe
     errR, errW = IO.pipe
@@ -62,13 +62,16 @@ class GnuPG
     errW.close
     statW.close
     (outtxt, stderrtxt, statustxt) = readwrite3(intxt, inW, outR, errR, statR);
-    Process.wait pid
-    return outtxt, stderrtxt, statustxt
+    wpid, status = Process.waitpid2 pid
+    throw "Unexpected pid: #{pid} vs #{wpid}" unless pid == wpid
+    throw "Process has not exited!?" unless status.exited?
+    throw "gpg call did not exit sucessfully" if (require_success and status.exitstatus != 0)
+    return outtxt, stderrtxt, statustxt, status.exitstatus
   end
 
   def GnuPG.init_keys()
     return if @@my_keys
-    (outtxt, stderrtxt, statustxt) = GnuPG.gpgcall('', %w{--fast-list-mode --with-colons --list-secret-keys})
+    (outtxt, stderrtxt, statustxt) = GnuPG.gpgcall('', %w{--fast-list-mode --with-colons --list-secret-keys}, true)
     @@my_keys = []
     outtxt.split("\n").each do |line|
       parts = line.split(':')