aboutsummaryrefslogtreecommitdiff
path: root/src/sg_rtpg.c
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2022-04-17 14:15:24 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2022-04-17 14:15:24 +0000
commitf26bb872bf4f043a1b817c808a6947fcb03ecda4 (patch)
tree132ab4d71c41c26fe05e12a57fc9e684ffbd08ec /src/sg_rtpg.c
parent5e7262973c7b0bf753e5e560956c176d9d12424d (diff)
downloadsg3_utils-f26bb872bf4f043a1b817c808a6947fcb03ecda4.tar.gz
sg_lib: add hex2fp(); sg_rtpg: https://github.com/hreinecke/sg3_utils/pull/79 applies; json_builder work
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@944 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_rtpg.c')
-rw-r--r--src/sg_rtpg.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/sg_rtpg.c b/src/sg_rtpg.c
index 48ee4a02..d83bf363 100644
--- a/src/sg_rtpg.c
+++ b/src/sg_rtpg.c
@@ -153,11 +153,11 @@ main(int argc, char * argv[])
bool extended = false;
bool verbose_given = false;
bool version_given = false;
- int k, j, off, res, c, report_len, tgt_port_count;
+ int k, j, off, res, c, report_len, buff_len, tgt_port_count;
int sg_fd = -1;
int ret = 0;
int verbose = 0;
- uint8_t reportTgtGrpBuff[REPORT_TGT_GRP_BUFF_LEN];
+ uint8_t * reportTgtGrpBuff = NULL;
uint8_t * bp;
const char * device_name = NULL;
@@ -255,20 +255,26 @@ main(int argc, char * argv[])
goto err_out;
}
- memset(reportTgtGrpBuff, 0x0, sizeof(reportTgtGrpBuff));
- /* trunc = 0; */
+ buff_len = REPORT_TGT_GRP_BUFF_LEN;
+
+retry:
+ reportTgtGrpBuff = (uint8_t *)malloc(buff_len);
+ if (NULL == reportTgtGrpBuff) {
+ pr2serr(" Out of memory (ram)\n");
+ goto err_out;
+ }
+ memset(reportTgtGrpBuff, 0x0, buff_len);
res = sg_ll_report_tgt_prt_grp2(sg_fd, reportTgtGrpBuff,
- sizeof(reportTgtGrpBuff),
+ buff_len,
extended, true, verbose);
ret = res;
if (0 == res) {
report_len = sg_get_unaligned_be32(reportTgtGrpBuff + 0) + 4;
- if (report_len > (int)sizeof(reportTgtGrpBuff)) {
- /* trunc = 1; */
- pr2serr(" <<report too long for internal buffer, output "
- "truncated\n");
- report_len = (int)sizeof(reportTgtGrpBuff);
+ if (report_len > buff_len) {
+ free(reportTgtGrpBuff);
+ buff_len = report_len;
+ goto retry;
}
if (raw) {
dStrRaw(reportTgtGrpBuff, report_len);
@@ -354,6 +360,8 @@ err_out:
ret = sg_convert_errno(-res);
}
}
+ if (reportTgtGrpBuff)
+ free(reportTgtGrpBuff);
if (0 == verbose) {
if (! sg_if_can2stderr("sg_rtpg failed: ", ret))
pr2serr("Some error occurred, try again with '-v' "