Esempio n. 1
0
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);
	}
}
Esempio n. 2
0
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);
	}
}
Esempio n. 3
0
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);
	}
}
Esempio n. 4
0
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;
}