Prior to this patch if S key held down keyboard would
be unresponsive for x seconds.
Where x = number of S keystrokes x 3.
Now keys are delayed for no longer than 3 seconds
while warning message is displayed, long enough for
the user to read the warning message.
If you do a ctrl c to exit nwipe before you have
even started a wipe, it will be reported in the logs
that there are fatal or non fatal errors. This is
incorrect as no wipe has even been started.
This error is only relevant to when using ctrl c
before a wipe has started and not after a wipe has
started.
Basically the variables that hold the errors are
in an indeterminate state before wiping begins and
in the case of a user abort we mistakenly checked
those values and reported. They should only be used
after a thread has completed or failed when their
values are then valid.
Now if you exit nwipe before any wiping started
there are no fatal/non fatal errors reported.
If a user attempts to start a wipe but hasn't yet
selected any drives for wiping, a warning message
will now appear for a few seconds suggesting
they select a drive.
Prior to this patch, if you tried to start a wipe
without selecting a drive, nwipe would immediately
display a message saying the wipe was complete
and press enter to exit. You had no choice but to
exit and restart nwipe.
I have come across a new user that couldn't start a wipe, until it was
pointed out that to start a wipe you needed to type shift S. While this
is often true, shift S doesn't start a wipe if you have caps lock on. To
be precise you need to type a capital S. Confusing to a new user because
if they have been told to type shift S but their caps lock is on, then
nothing happens. Also how would you know you are supposed to type a
capital S when the key info puts all keys in caps.
The fix for this is to trap the lower case s and then print a message on
the status line that says "Use capital S to start a wipe". This message
could remain on the status line for 3 seconds then revert back to the
standard key info.
The use of capital S is to try to reduce the likelihood of an accidental
wipe you didn't mean to start, however, I've always thought that maybe
we should have a 'are you sure ?' after the user types 'S' .
A non issue once you're familiar with nwipe but probably irritating to
a new user.
Fix a minor error in the reporting of the
discs total number of blocks. This only
affects reporting to the log file and
does not affect the programs operation.
We already determine the bus type,
ATA, USB, NVME, VIRT (loop) etc
and display the bus type on the GUI.
libparted prefixes the model number
with ATA which we don't need, especially
as we try to keep the drive display length
to a maximum of 80 characters.
Previously if a drive failed during
a multiple drive wipe and the user
decided to abort nwipe to say remove
the drive and start over, the user would
use CONTROl-C to abort. This would be
reflected in the summary table as ALL drives
having been aborted including the drive that
failed. It makes more sense for a failed drive
to be marked as failed in the summary table
even though the user aborted the wipe.
This patch fixes that, so that if a drive failed
it reflects that drives status in the summary
even if the user aborts the wipe.
Recompiled ShredOS with support for Smartmontools, C++ V7.x support. Nwipe in this version of ShredOS, now supports the display of serial numbers for USB bridges that have chipsets that support ATA pass through functionality.
If a USB device generated a particular error
code from smartmontools, the --nousb option
incorrectly did not exclude it from the
enumerated drives.
This has now been corrected.
This was a very obscure segmentation fault I
stumbled across while testing the drive
selection window. I confirmed it exists
in all versions at least going back prior
to 0.24 and maybe a lot earlier.
It was a very tricky bug to track down as you
had to do some very specific things to cause it to
occur. Probably most people would not have seen
it, however for those that did, this was what you
needed to do to trigger it.
1. First you had to be wiping more than one drive.
2. Then you needed to scroll down to the bottom
drive in the list.
3. You then needed to minimise the vertical height
of the terminal so you could no longer see the
selected drive.
4. Then you needed to expand the vertical height
of the terminal. This last step would trigger a
segmentation fault and crash nwipe.
So, the theory. nwipe uses four variables to
allow you to scroll through multiple displayed
drives. These four variables are:
count = the number of enumerated drives.
slots = the number of available horizontal lines
to display the drives. The number of slots
varies depending upon vertical resizing
of the terminal. So slots is calculated
in real time.
focus = which drive the GUI '>' pointer is pointing to.
offset = A value between 0 and slots that describes
what drives are displayed in the available
slots.
offset is then used along with i in a for loop to index
the drive contexts. This is where the segfault
occurred.
The calculation failed to take correct account of a varying
number of slots so in the condition described above the
offset would create an index that was out of bounds.
So first I fixed the miss calculation and second I placed
an if statement that acts as a bounds checker so if
ever this code is changed by someone in the future and
they break the calculation the bounds checker 'if' statement
will log the details of the error and prevent a segfault which
is far easier to debug.
Added NVME and VIRT to device type table.
VIRT are virtual devices such as loop devices
created with losetup.
NVME for solid state storage devices.
Due to the longer device names used for NVME, I will
need to do some work on the device name in the selection
window so column alignment is maintained.