void umount_dev_all(char *sd_dev) { FILE *procpt; char line[256], devname[32], mpname[128], system_type[16], mount_mode[160]; int dummy1, dummy2; if (!sd_dev || !(*sd_dev)) return; detach_swap_partition(sd_dev); procpt = fopen("/proc/mounts", "r"); if (procpt) { while (fgets(line, sizeof(line), procpt)) { if (sscanf(line, "%s %s %s %s %d %d", devname, mpname, system_type, mount_mode, &dummy1, &dummy2) != 6) continue; if (!strncmp(devname, "/dev/sd", 7)) { if (!strncmp(devname+5, sd_dev, 3)) { eval("/usr/bin/opt-umount.sh", devname, mpname); umount(mpname); rmdir(mpname); } } } fclose(procpt); } }
void umount_sddev_all(void) { FILE *procpt; char line[256], devname[32], mpname[128], system_type[16], mount_mode[160]; int dummy1, dummy2; detach_swap_partition(NULL); procpt = fopen("/proc/mounts", "r"); if (procpt) { while (fgets(line, sizeof(line), procpt)) { if (sscanf(line, "%s %s %s %s %d %d", devname, mpname, system_type, mount_mode, &dummy1, &dummy2) != 6) continue; if (!strncmp(devname, "/dev/sd", 7)) { umount(mpname); rmdir(mpname); } } fclose(procpt); } }
void umount_sddev_all(void) { FILE *procpt; char line[256], devname[32], mpname[128], system_type[16], mount_mode[164]; detach_swap_partition(NULL); procpt = fopen("/proc/mounts", "r"); if (procpt) { while (fgets(line, sizeof(line), procpt)) { if (sscanf(line, "%31s %127s %15s %163s %*s %*s", devname, mpname, system_type, mount_mode) != 4) continue; if (!strncmp(devname, "/dev/sd", 7)) { umount(mpname); rmdir(mpname); } } fclose(procpt); } }
int mdev_sd_main(int argc, char **argv) { char aidisk_cmd[64]; int isLock, mount_result; const char *device_name, *action; if(argc != 3){ printf("Usage: %s [device_name] [action]\n", argv[0]); return 0; } device_name = argv[1]; action = argv[2]; usb_dbg("(%s): action=%s.\n", device_name, action); if(get_device_type_by_device(device_name) != DEVICE_TYPE_DISK){ usb_dbg("(%s): The device is not a sd device.\n", device_name); return 0; } // Check Lock. if((isLock = file_lock((char *)device_name)) == -1){ usb_dbg("(%s): Can't set the file lock!\n", device_name); return 0; } // If remove the device? if(!check_hotplug_action(action)){ if (device_name[3] != '\0') detach_swap_partition((char*)device_name); else notify_rc("on_unplug_usb_storage"); file_unlock(isLock); return 0; } memset(aidisk_cmd, 0, sizeof(aidisk_cmd)); if (device_name[3] == '\0') // sda, sdb, sdc... { system("/sbin/hddtune.sh $MDEV"); if (!check_root_partition(device_name)) { sprintf(aidisk_cmd, "/sbin/automount.sh $MDEV AiDisk_%c%c", device_name[2], '1'); } else goto No_Need_To_Mount; } else { sprintf(aidisk_cmd, "/sbin/automount.sh $MDEV AiDisk_%c%c", device_name[2], device_name[3]); } umask(0000); mount_result = system(aidisk_cmd); if (mount_result == 0) { notify_rc("on_hotplug_usb_storage"); } usb_dbg("(%s): Success!\n", device_name); file_unlock(isLock); return 1; No_Need_To_Mount: usb_dbg("(%s): No need to mount!\n", device_name); file_unlock(isLock); return 0; }