コード例 #1
0
ファイル: swapon.c プロジェクト: SpoilForHawkeye/mount
/* calls mkswap */
static int
swap_reinitialize(const char *device) {
	const char *label = fsprobe_get_label_by_devname(device);
	const char *uuid  = fsprobe_get_uuid_by_devname(device);
	pid_t pid;
	int status, ret;
	char *cmd[7];
	int idx=0;

	warnx(_("%s: reinitializing the swap."), device);

	switch((pid=fork())) {
	case -1: /* fork error */
		warn(_("fork failed"));
		return -1;

	case 0:	/* child */
		cmd[idx++] = PATH_MKSWAP;
		if (label && *label) {
			cmd[idx++] = "-L";
			cmd[idx++] = (char *) label;
		}
		if (uuid && *uuid) {
			cmd[idx++] = "-U";
			cmd[idx++] = (char *) uuid;
		}
		cmd[idx++] = (char *) device;
		cmd[idx++] = NULL;
		execv(cmd[0], cmd);
		err(EXIT_FAILURE, _("execv failed"));

	default: /* parent */
		do {
			if ((ret = waitpid(pid, &status, 0)) < 0
					&& errno == EINTR)
				continue;
			else if (ret < 0) {
				warn(_("waitpid failed"));
				return -1;
			}
		} while (0);

		/* mkswap returns: 0=suss, 1=error */
		if (WIFEXITED(status) && WEXITSTATUS(status)==0)
			return 0; /* ok */
		break;
	}
	return -1; /* error */
}
コード例 #2
0
ファイル: swapon.c プロジェクト: xxha/util-linux-2.13.1
/* calls mkswap */
static int
swap_reinitialize(const char *device) {
	const char *label = fsprobe_get_label_by_devname(device);
	const char *uuid  = fsprobe_get_uuid_by_devname(device);
	pid_t pid;
	int status, ret;
	char *cmd[7];
	int idx=0;

	switch((pid=fork())) {
	case -1: /* fork error */
		fprintf(stderr, _("%s: cannot fork: %s\n"),
			progname, strerror(errno));
		return -1;

	case 0:	/* child */
		cmd[idx++] = PATH_MKSWAP;
		if (label && *label) {
			cmd[idx++] = "-L";
			cmd[idx++] = (char *) label;
		}
		if (uuid && *uuid) {
			cmd[idx++] = "-U";
			cmd[idx++] = (char *) uuid;
		}
		cmd[idx++] = (char *) device;
		cmd[idx++] = NULL;
		execv(cmd[0], cmd);
		perror("execv");
		exit(1); /* error  */

	default: /* parent */
		do {
			if ((ret = waitpid(pid, &status, 0)) < 0
					&& errno == EINTR)
				continue;
			else if (ret < 0) {
				fprintf(stderr, _("%s: waitpid: %s\n"),
					progname, strerror(errno));
				return -1;
			}
		} while (0);

		/* mkswap returns: 0=suss, 1=error */
		if (WIFEXITED(status) && WEXITSTATUS(status)==0)
			return 0; /* ok */
	}
	return -1; /* error */
}