/* 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 */ }
/* 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 */ }