aboutsummaryrefslogtreecommitdiff
path: root/src/sg_format.c
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2017-10-31 02:18:16 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2017-10-31 02:18:16 +0000
commitd0cecdd78328bc0e43786c418e9cb1fde563decf (patch)
tree9edeb3ef5148ae389932296b1c2ac8dbeb857a06 /src/sg_format.c
parentc1f5e5decd313edf1615499de92f536cca0dfe80 (diff)
downloadsg3_utils-d0cecdd78328bc0e43786c418e9cb1fde563decf.tar.gz
sg_lib: add sg_msense_calc_length(); sg_pt: add dummy pt_device_is_nvme()
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@727 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_format.c')
-rw-r--r--src/sg_format.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/sg_format.c b/src/sg_format.c
index 54506d3a..53aa2739 100644
--- a/src/sg_format.c
+++ b/src/sg_format.c
@@ -37,7 +37,7 @@
#include "sg_pr2serr.h"
#include "sg_pt.h"
-static const char * version_str = "1.39 20171021";
+static const char * version_str = "1.40 20171030";
#define RW_ERROR_RECOVERY_PAGE 1 /* can give alternate with --mode=MP */
@@ -1055,11 +1055,22 @@ again_with_long_lba:
pr2serr(" try '-v' for more information\n");
goto out;
}
+ rsp_len = (resid > 0) ? (MAX_BUFF_SZ - resid) : MAX_BUFF_SZ;
+ if (rsp_len < 0) {
+ pr2serr("%s: resid=%d implies negative response "
+ "length of %d\n", __func__, resid, rsp_len);
+ ret = SG_LIB_WILD_RESID;
+ goto out;
+ }
+ calc_len = sg_msense_calc_length(dbuff, rsp_len, op->mode6, &bd_len);
if (op->mode6) {
- calc_len = dbuff[0] + 1;
- rsp_len = calc_len;
+ if (rsp_len < 4) {
+ pr2serr("%s: MS(6) response length too short (%d)\n",
+ __func__, rsp_len);
+ ret = -1;
+ goto out;
+ }
dev_specific_param = dbuff[2];
- bd_len = dbuff[3];
op->long_lba = false;
offset = 4;
/* prepare for mode select */
@@ -1067,25 +1078,13 @@ again_with_long_lba:
dbuff[1] = 0;
dbuff[2] = 0;
} else { /* MODE SENSE(10) */
- if (resid > 0)
- rsp_len = MAX_BUFF_SZ - resid;
- else
- rsp_len = MAX_BUFF_SZ;
- if (rsp_len < 0) {
- pr2serr("%s: resid=%d implies negative response "
- "length of %d\n", __func__, resid, rsp_len);
- ret = SG_LIB_WILD_RESID;
- goto out;
- }
if (rsp_len < 8) {
pr2serr("%s: MS(10) response length too short (%d)\n",
__func__, rsp_len);
ret = -1;
goto out;
}
- calc_len = sg_get_unaligned_be16(dbuff + 0);
dev_specific_param = dbuff[3];
- bd_len = sg_get_unaligned_be16(dbuff + 6);
op->long_lba = !! (dbuff[4] & 1);
offset = 8;
/* prepare for mode select */