include::man-common/help-version.adoc[]
+== EXIT STATUS
+
+*blkdiscard* has the following exit status values:
+
+*0*::
+success
+
+*1*::
+failure; incorrect invocation, permissions or any other generic error
+
+*2*::
+failure; since v2.39, the device does not support discard operation
+
== AUTHORS
-mailto:lczerner@redhat.com[Lukas Czerner]
+mailto:lczerner@redhat.com[Lukas Czerner],
+mailto:kzak@redhat.com[Karel Zak]
== SEE ALSO
#include "closestream.h"
#include "monotonic.h"
+/* exit() status if discard unsupported by device */
+#define BLKDISCARD_EXIT_NOTSUPP (EXIT_FAILURE + 1)
+
#ifndef BLKDISCARD
# define BLKDISCARD _IO(0x12,119)
#endif
}
#endif /* HAVE_LIBBLKID */
+static void __attribute__((__noreturn__)) err_on_ioctl(
+ const char *ioctlname, const char *path)
+{
+ int exno = errno == EOPNOTSUPP ?
+ BLKDISCARD_EXIT_NOTSUPP : EXIT_FAILURE;
+
+ err(exno, _("%s: %s ioctl failed"), ioctlname, path);
+}
+
int main(int argc, char **argv)
{
char *path;
if (range[0] + range[1] > end)
range[1] = end - range[0];
+ errno = 0;
+
switch (act) {
case ACT_ZEROOUT:
if (ioctl(fd, BLKZEROOUT, &range))
- err(EXIT_FAILURE, _("%s: BLKZEROOUT ioctl failed"), path);
+ err_on_ioctl("BLKZEROOUT", path);
break;
case ACT_SECURE:
if (ioctl(fd, BLKSECDISCARD, &range))
- err(EXIT_FAILURE, _("%s: BLKSECDISCARD ioctl failed"), path);
+ err_on_ioctl("BLKSECDISCARD", path);
break;
case ACT_DISCARD:
if (ioctl(fd, BLKDISCARD, &range))
- err(EXIT_FAILURE, _("%s: BLKDISCARD ioctl failed"), path);
+ err_on_ioctl("BLKDISCARD", path);
break;
}