Skip to content

Commit 511845b

Browse files
committed
Instead of displaying the list index for a zone in the list
when a filter is applied, show the actual zone number.
1 parent 0e1c2bc commit 511845b

File tree

3 files changed

+97
-51
lines changed

3 files changed

+97
-51
lines changed

tools/gui/gzbc.c

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -195,36 +195,58 @@ main(int argc,
195195
static int
196196
dz_report_zones(dz_dev_t *dzd)
197197
{
198+
unsigned int i, j = 0;
198199
int ret;
199200

200-
if ( ! dzd->zones ) {
201+
if ( (! dzd->zones)
202+
|| (! dzd->max_nr_zones) ) {
201203

202204
/* Get zone list */
203205
dzd->zone_ro = ZBC_RO_ALL;
204-
ret = zbc_list_zones(dzd->dev, 0, dzd->zone_ro, &dzd->zones, &dzd->nr_zones);
205-
if ( ret == 0 ) {
206-
dzd->max_nr_zones = dzd->nr_zones;
206+
ret = zbc_list_zones(dzd->dev, 0, dzd->zone_ro, &dzd->zbc_zones, &dzd->nr_zones);
207+
if ( ret != 0 ) {
208+
return( ret );
207209
}
208210

209-
} else {
211+
/* Allocate zone array */
212+
dzd->max_nr_zones = dzd->nr_zones;
213+
dzd->zones = (dz_dev_zone_t *) malloc(sizeof(dz_dev_zone_t) * dzd->max_nr_zones);
214+
if ( ! dzd->zones ) {
215+
return( -ENOMEM );
216+
}
210217

211-
/* Refresh zone list */
212-
dzd->nr_zones = dzd->max_nr_zones;
213-
ret = zbc_report_zones(dzd->dev, 0, dzd->zone_ro, dzd->zones, &dzd->nr_zones);
214-
if ( ret != 0 ) {
215-
fprintf(stderr, "Get zone information failed %d (%s)\n",
216-
errno,
217-
strerror(errno));
218-
if ( dzd->zones ) {
219-
free(dzd->zones);
220-
dzd->zones = NULL;
221-
dzd->nr_zones = 0;
222-
dzd->max_nr_zones = 0;
223-
}
224-
}
218+
for(i = 0; i < dzd->max_nr_zones; i++) {
219+
dzd->zones[i].no = i;
220+
dzd->zones[i].show = 1;
221+
memcpy(&dzd->zones[i].info, &dzd->zbc_zones[i], sizeof(struct zbc_zone));
222+
}
223+
224+
return( 0 );
225225

226226
}
227227

228+
/* Refresh zone list */
229+
dzd->nr_zones = dzd->max_nr_zones;
230+
ret = zbc_report_zones(dzd->dev, 0, dzd->zone_ro, dzd->zbc_zones, &dzd->nr_zones);
231+
if ( ret != 0 ) {
232+
fprintf(stderr, "Get zone information failed %d (%s)\n",
233+
errno,
234+
strerror(errno));
235+
dzd->nr_zones = 0;
236+
}
237+
238+
/* Apply filter */
239+
for(i = 0; i < dzd->max_nr_zones; i++) {
240+
if ( (j < dzd->nr_zones)
241+
&& (zbc_zone_start_lba(&dzd->zones[i].info) == zbc_zone_start_lba(&dzd->zbc_zones[j])) ) {
242+
memcpy(&dzd->zones[i].info, &dzd->zbc_zones[j], sizeof(struct zbc_zone));
243+
dzd->zones[i].show = 1;
244+
j++;
245+
} else {
246+
dzd->zones[i].show = 0;
247+
}
248+
}
249+
228250
return( ret );
229251

230252
}
@@ -241,7 +263,7 @@ dz_reset_zone(dz_dev_t *dzd)
241263
if ( zno == -1 ) {
242264
ret = zbc_reset_write_pointer(dzd->dev, -1);
243265
} else if ( (zno >= 0) && (zno < (int)dzd->nr_zones) ) {
244-
ret = zbc_reset_write_pointer(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno]));
266+
ret = zbc_reset_write_pointer(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno].info));
245267
} else {
246268
fprintf(stderr, "Invalid zone number %d for reset\n",
247269
zno);
@@ -272,7 +294,7 @@ dz_open_zone(dz_dev_t *dzd)
272294
if ( zno == -1 ) {
273295
ret = zbc_open_zone(dzd->dev, -1);
274296
} else if ( (zno >= 0) && (zno < (int)dzd->nr_zones) ) {
275-
ret = zbc_open_zone(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno]));
297+
ret = zbc_open_zone(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno].info));
276298
} else {
277299
fprintf(stderr, "Invalid zone number %d for open\n",
278300
zno);
@@ -303,7 +325,7 @@ dz_close_zone(dz_dev_t *dzd)
303325
if ( zno == -1 ) {
304326
ret = zbc_close_zone(dzd->dev, -1);
305327
} else if ( (zno >= 0) && (zno < (int)dzd->nr_zones) ) {
306-
ret = zbc_close_zone(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno]));
328+
ret = zbc_close_zone(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno].info));
307329
} else {
308330
fprintf(stderr, "Invalid zone number %d for close\n",
309331
zno);
@@ -334,7 +356,7 @@ dz_finish_zone(dz_dev_t *dzd)
334356
if ( zno == -1 ) {
335357
ret = zbc_finish_zone(dzd->dev, -1);
336358
} else if ( (zno >= 0) && (zno < (int)dzd->nr_zones) ) {
337-
ret = zbc_finish_zone(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno]));
359+
ret = zbc_finish_zone(dzd->dev, zbc_zone_start_lba(&dzd->zones[zno].info));
338360
} else {
339361
fprintf(stderr, "Invalid zone number %d for close\n",
340362
zno);
@@ -505,6 +527,10 @@ dz_close(dz_dev_t *dzd)
505527

506528
if ( dzd->dev ) {
507529

530+
if ( dzd->zbc_zones ) {
531+
free(dzd->zbc_zones);
532+
}
533+
508534
if ( dzd->zones ) {
509535
free(dzd->zones);
510536
}

tools/gui/gzbc.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ enum {
6565

6666
/***** Type definitions *****/
6767

68+
/**
69+
* Device zone information.
70+
*/
71+
typedef struct dz_dev_zone {
72+
73+
int no;
74+
int show;
75+
struct zbc_zone info;
76+
77+
} dz_dev_zone_t;
78+
6879
/**
6980
* GUI Tab data.
7081
*/
@@ -82,7 +93,8 @@ typedef struct dz_dev {
8293
int zone_no;
8394
unsigned int max_nr_zones;
8495
unsigned int nr_zones;
85-
struct zbc_zone *zones;
96+
struct zbc_zone *zbc_zones;
97+
dz_dev_zone_t *zones;
8698

8799
/**
88100
* Command execution.

tools/gui/gzbc_if_dev.c

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ dz_if_dev_open(char *path)
424424
G_TYPE_UINT64,
425425
G_TYPE_UINT64,
426426
G_TYPE_UINT64);
427-
for(i = 0; i < dzd->nr_zones; i++) {
427+
for(i = 0; i < dzd->max_nr_zones; i++) {
428428
gtk_list_store_append(dzd->zlist_store, &iter);
429429
}
430430
dzd->zlist_model = GTK_TREE_MODEL(dzd->zlist_store);
@@ -679,7 +679,7 @@ dz_if_zlist_print_zone_type(GtkTreeViewColumn *col,
679679
int i;
680680

681681
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
682-
z = &dzd->zones[i];
682+
z = &dzd->zones[i].info;
683683

684684
/* Normal black font */
685685
g_object_set(renderer, "foreground", "Black", "foreground-set", TRUE, NULL);
@@ -711,7 +711,7 @@ dz_if_zlist_print_zone_cond(GtkTreeViewColumn *col,
711711
int i;
712712

713713
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
714-
z = &dzd->zones[i];
714+
z = &dzd->zones[i].info;
715715

716716
/* Normal black font by default */
717717
g_object_set(renderer, "foreground", "Black", "foreground-set", TRUE, NULL);
@@ -757,7 +757,7 @@ dz_if_zlist_print_zone_need_reset(GtkTreeViewColumn *col,
757757
int i;
758758

759759
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
760-
z = &dzd->zones[i];
760+
z = &dzd->zones[i].info;
761761

762762
/* Zone need reset */
763763
if ( zbc_zone_need_reset(z) ) {
@@ -786,7 +786,7 @@ dz_if_zlist_print_zone_nonseq(GtkTreeViewColumn *col,
786786
int i;
787787

788788
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
789-
z = &dzd->zones[i];
789+
z = &dzd->zones[i].info;
790790

791791
/* Zone non seq */
792792
if ( zbc_zone_non_seq(z) ) {
@@ -815,7 +815,7 @@ dz_if_zlist_print_zone_start(GtkTreeViewColumn *col,
815815
int i;
816816

817817
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
818-
z = &dzd->zones[i];
818+
z = &dzd->zones[i].info;
819819

820820
/* Zone start LBA */
821821
g_object_set(renderer, "foreground", "Black", "foreground-set", TRUE, NULL);
@@ -843,7 +843,7 @@ dz_if_zlist_print_zone_length(GtkTreeViewColumn *col,
843843
int i;
844844

845845
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
846-
z = &dzd->zones[i];
846+
z = &dzd->zones[i].info;
847847

848848
/* Zone length */
849849
g_object_set(renderer, "foreground", "Black", "foreground-set", TRUE, NULL);
@@ -871,7 +871,7 @@ dz_if_zlist_print_zone_wp(GtkTreeViewColumn *col,
871871
int i;
872872

873873
gtk_tree_model_get(model, iter, DZ_ZONE_NUM, &i, -1);
874-
z = &dzd->zones[i];
874+
z = &dzd->zones[i].info;
875875

876876
/* Zone wp LBA */
877877
if ( zbc_zone_not_wp(z) ) {
@@ -908,12 +908,16 @@ dz_if_zlist_fill(dz_dev_t *dzd)
908908

909909
gtk_tree_model_get_iter_first(dzd->zlist_model, &iter);
910910

911-
for(i = 0; i < dzd->nr_zones; i++) {
911+
for(i = 0; i < dzd->max_nr_zones; i++) {
912912

913-
z = &dzd->zones[i];
913+
if ( ! dzd->zones[i].show ) {
914+
continue;
915+
}
916+
917+
z = &dzd->zones[i].info;
914918

915919
gtk_list_store_set(dzd->zlist_store, &iter,
916-
DZ_ZONE_NUM, i,
920+
DZ_ZONE_NUM, dzd->zones[i].no,
917921
DZ_ZONE_TYPE, z->zbz_type,
918922
DZ_ZONE_COND, z->zbz_condition,
919923
DZ_ZONE_NEED_RESET, zbc_zone_need_reset(z),
@@ -959,15 +963,11 @@ dz_if_zlist_update_range(dz_dev_t *dzd)
959963
if ( gtk_tree_model_get_iter(dzd->zlist_model, &iter, end) == TRUE ) {
960964
gtk_tree_model_get(dzd->zlist_model, &iter, DZ_ZONE_NUM, &dzd->zlist_end_no, -1);
961965
} else {
962-
dzd->zlist_end_no = dzd->nr_zones - 1;
966+
dzd->zlist_end_no = dzd->max_nr_zones - 1;
963967
}
964968
gtk_tree_path_free(end);
965969
} else {
966-
dzd->zlist_end_no = dzd->nr_zones - 1;
967-
}
968-
969-
if ( dzd->zlist_end_no >= dzd->nr_zones ) {
970-
dzd->zlist_end_no = dzd->nr_zones - 1;
970+
dzd->zlist_end_no = dzd->max_nr_zones - 1;
971971
}
972972

973973
return;
@@ -1048,7 +1048,7 @@ dz_if_zblock_set(dz_dev_t *dzd)
10481048
if ( dzd->zlist_selection < 0 ) {
10491049
block = -1;
10501050
} else {
1051-
block = dz_if_lba2block(dzd, zbc_zone_start_lba(&dzd->zones[dzd->zlist_selection]));
1051+
block = dz_if_lba2block(dzd, zbc_zone_start_lba(&dzd->zones[dzd->zlist_selection].info));
10521052
}
10531053

10541054
if ( dzd->use_hexa ) {
@@ -1158,7 +1158,7 @@ dz_if_znum_set_cb(GtkEntry *entry,
11581158
int zno;
11591159

11601160
zno = atoi(gtk_entry_get_text(entry));
1161-
if ( (zno < 0) || (zno >= (gint)dzd->nr_zones) ) {
1161+
if ( (zno < 0) || (zno >= (gint)dzd->max_nr_zones) ) {
11621162
dz_if_zlist_do_unselect(dzd);
11631163
return;
11641164
}
@@ -1183,8 +1183,8 @@ dz_if_zblock_set_cb(GtkEntry *entry,
11831183
if ( (block >= 0)
11841184
&& (block < dz_if_lba2block(dzd, dzd->info.zbd_logical_blocks)) ) {
11851185
/* Search zone */
1186-
for(i = 0; i < dzd->nr_zones; i++) {
1187-
z = &dzd->zones[i];
1186+
for(i = 0; i < dzd->max_nr_zones; i++) {
1187+
z = &dzd->zones[i].info;
11881188
if ( (block >= dz_if_lba2block(dzd, zbc_zone_start_lba(z)))
11891189
&& (block < dz_if_lba2block(dzd, zbc_zone_start_lba(z) + zbc_zone_length(z))) ) {
11901190
zno = i;
@@ -1463,24 +1463,32 @@ dz_if_zones_draw_cb(GtkWidget *widget,
14631463
h = allocation.height;
14641464

14651465
/* Get total viewed capacity */
1466-
if ( dzd->zlist_end_no >= dzd->nr_zones ) {
1467-
dzd->zlist_end_no = dzd->nr_zones - 1;
1466+
if ( dzd->zlist_end_no >= dzd->max_nr_zones ) {
1467+
dzd->zlist_end_no = dzd->max_nr_zones - 1;
14681468
}
14691469
for(i = dzd->zlist_start_no; i <= dzd->zlist_end_no; i++) {
1470-
cap += zbc_zone_length(&dzd->zones[i]);
1470+
if ( dzd->zones[i].show ) {
1471+
cap += zbc_zone_length(&dzd->zones[i].info);
1472+
}
14711473
}
14721474

14731475
/* Center overall drawing using x offset */
14741476
zw = 0;
14751477
for(i = dzd->zlist_start_no; i <= dzd->zlist_end_no; i++) {
1476-
zw += ((unsigned long long)w * zbc_zone_length(&dzd->zones[i])) / cap;
1478+
if ( dzd->zones[i].show ) {
1479+
zw += ((unsigned long long)w * zbc_zone_length(&dzd->zones[i].info)) / cap;
1480+
}
14771481
}
14781482
x = DZ_DRAW_WOFST + (w - zw) / 2;
14791483

14801484
/* Draw zones */
14811485
for(i = dzd->zlist_start_no; i <= dzd->zlist_end_no; i++) {
14821486

1483-
z = &dzd->zones[i];
1487+
if ( ! dzd->zones[i].show ) {
1488+
continue;
1489+
}
1490+
1491+
z = &dzd->zones[i].info;
14841492

14851493
/* Draw zone outline */
14861494
zw = (w * zbc_zone_length(z)) / cap;
@@ -1519,7 +1527,7 @@ dz_if_zones_draw_cb(GtkWidget *widget,
15191527
cairo_set_font_size(cr, 10);
15201528

15211529
/* Write zone number */
1522-
sprintf(str, "%05d", i);
1530+
sprintf(str, "%05d", dzd->zones[i].no);
15231531
cairo_text_extents(cr, str, &te);
15241532
cairo_move_to(cr, x + zw / 2 - te.width / 2 - te.x_bearing, DZ_DRAW_HOFST - te.height / 2);
15251533
cairo_show_text(cr, str);

0 commit comments

Comments
 (0)