+static int isusbdev(struct rawdisk_device *dev)
+{
+ char *ptr = dev->path;
+ while(*ptr) {
+ int i;
+ char buf[3];
+ for(i=0; i<3; i++) {
+ buf[i] = tolower(ptr[i]);
+ }
+ if(memcmp(buf, "usb", 3) == 0) {
+ return 1;
+ }
+ ptr++;
+ }
+ return 0;
+}
+
+static void update_disks(void)
+{
+ int i;
+
+ for(i=0; i<num_rawdev; i++) {
+ free(rawdev[i].name);
+ free(rawdev[i].path);
+ }
+
+ if((num_rawdev = rawdisk_detect(rawdev, sizeof rawdev / sizeof *rawdev)) == -1) {
+ MessageBox(0, "Failed to detect storage devices!", 0, MB_OK);
+ exit(1);
+ }
+
+ if(wgt_checkbox_checked(ck_usbonly)) {
+ for(i=0; i<num_rawdev; i++) {
+ if(!isusbdev(rawdev + i)) {
+ free(rawdev[i].name);
+ free(rawdev[i].path);
+ rawdev[i] = rawdev[--num_rawdev];
+ }
+ }
+ }
+
+ for(i=0; i<num_rawdev; i++) {
+ items[i] = rawdev[i].name;
+ }
+
+ wgt_combo_setitems(cb_devs, items, num_rawdev);
+
+ if(num_rawdev) {
+ wgt_enable_widget(cb_devs);
+ wgt_enable_widget(bn_inst);
+ } else {
+ wgt_disable_widget(cb_devs);
+ wgt_disable_widget(bn_inst);
+ }
+}
+