* manner */
arg = opt;
val = strchr(opt, '=');
- if (val != NULL) {
- if (strncmp(arg, "md_stripe_cache_size", 20) == 0) {
- md_stripe_cache_size = atoi(val + 1);
- } else if (strncmp(arg, "retry", 5) == 0) {
- retry = atoi(val + 1);
- if (retry > MAX_RETRIES)
- retry = MAX_RETRIES;
- else if (retry < 0)
- retry = 0;
- } else if (strncmp(arg, "mgssec", 6) == 0) {
- append_option(options, opt);
- }
+ /* please note that some ldiskfs mount options are also in the form
+ * of param=value. We should pay attention not to remove those
+ * mount options, see bug 22097. */
+ if (val && strncmp(arg, "md_stripe_cache_size", 20) == 0) {
+ md_stripe_cache_size = atoi(val + 1);
+ } else if (val && strncmp(arg, "retry", 5) == 0) {
+ retry = atoi(val + 1);
+ if (retry > MAX_RETRIES)
+ retry = MAX_RETRIES;
+ else if (retry < 0)
+ retry = 0;
+ } else if (val && strncmp(arg, "mgssec", 6) == 0) {
+ append_option(options, opt);
} else if (strncmp(opt, "force", 5) == 0) {
//XXX special check for 'force' option
++force;
if (fd == NULL)
return errno;
- fgets(buf, size, fd);
+ /* should not ignore fgets(3)'s return value */
+ if (!fgets(buf, size, fd)) {
+ fprintf(stderr, "reading from %s: %s", path, strerror(errno));
+ fclose(fd);
+ return 1;
+ }
fclose(fd);
return 0;
}
/* May as well try to clean up loop devs */
if (strncmp(usource, "/dev/loop", 9) == 0) {
char cmd[256];
+ int ret;
sprintf(cmd, "/sbin/losetup -d %s", usource);
- system(cmd);
+ if ((ret = system(cmd)) < 0)
+ rc = errno;
+ else if (ret > 0)
+ rc = WEXITSTATUS(ret);
}
} else if (!nomtab) {