View | Details | Raw Unified | Return to bug 15690 | Differences between
and this patch

Collapse All | Expand All

(-)savecore.c (-32 / +4 lines)
Lines 134-140 Link Here
134
void	 Lseek __P((int, off_t, int));
134
void	 Lseek __P((int, off_t, int));
135
int	 Open __P((const char *, int rw));
135
int	 Open __P((const char *, int rw));
136
int	 Read __P((int, void *, int));
136
int	 Read __P((int, void *, int));
137
char	*rawname __P((char *s));
138
void	 save_core __P((void));
137
void	 save_core __P((void));
139
void	 usage __P((void));
138
void	 usage __P((void));
140
void	 Write __P((int, void *, int));
139
void	 Write __P((int, void *, int));
Lines 340-346 Link Here
340
{
339
{
341
	register FILE *fp;
340
	register FILE *fp;
342
	register int bounds, ifd, nr, nw, ofd;
341
	register int bounds, ifd, nr, nw, ofd;
343
	char *rawp, path[MAXPATHLEN];
342
	char path[MAXPATHLEN];
344
	mode_t oumask;
343
	mode_t oumask;
345
344
346
	/*
345
	/*
Lines 379-393 Link Here
379
		ofd = Create(path, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
378
		ofd = Create(path, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
380
	(void)umask(oumask);
379
	(void)umask(oumask);
381
380
382
	/* Open the raw device. */
383
	rawp = rawname(ddname);
384
	if ((ifd = open(rawp, O_RDONLY)) == -1) {
385
		syslog(LOG_WARNING, "%s: %m; using block device", rawp);
386
		ifd = dumpfd;
387
	}
388
389
	/* Seek to the start of the core. */
381
	/* Seek to the start of the core. */
390
	Lseek(ifd, (off_t)dumplo, L_SET);
382
	Lseek(dumpfd, (off_t)dumplo, L_SET);
391
383
392
	/* Copy the core file. */
384
	/* Copy the core file. */
393
	syslog(LOG_NOTICE, "writing %score to %s",
385
	syslog(LOG_NOTICE, "writing %score to %s",
Lines 395-407 Link Here
395
	for (; dumpsize > 0; dumpsize -= nr) {
387
	for (; dumpsize > 0; dumpsize -= nr) {
396
		(void)printf("%6dK\r", dumpsize / 1024);
388
		(void)printf("%6dK\r", dumpsize / 1024);
397
		(void)fflush(stdout);
389
		(void)fflush(stdout);
398
		nr = read(ifd, buf, MIN(dumpsize, sizeof(buf)));
390
		nr = read(dumpfd, buf, MIN(dumpsize, sizeof(buf)));
399
		if (nr <= 0) {
391
		if (nr <= 0) {
400
			if (nr == 0)
392
			if (nr == 0)
401
				syslog(LOG_WARNING,
393
				syslog(LOG_WARNING,
402
				    "WARNING: EOF on dump device");
394
				    "WARNING: EOF on dump device");
403
			else
395
			else
404
				syslog(LOG_ERR, "%s: %m", rawp);
396
				syslog(LOG_ERR, "%s: %m", ddname);
405
			goto err2;
397
			goto err2;
406
		}
398
		}
407
		if (compress)
399
		if (compress)
Lines 417-423 Link Here
417
			exit(1);
409
			exit(1);
418
		}
410
		}
419
	}
411
	}
420
	(void)close(ifd);
421
	if (compress)
412
	if (compress)
422
		(void)fclose(fp);
413
		(void)fclose(fp);
423
	else
414
	else
Lines 497-521 Link Here
497
	closedir(dfd);
488
	closedir(dfd);
498
	syslog(LOG_ERR, "can't find device %d/%d", major(dev), minor(dev));
489
	syslog(LOG_ERR, "can't find device %d/%d", major(dev), minor(dev));
499
	exit(1);
490
	exit(1);
500
}
501
502
char *
503
rawname(s)
504
	char *s;
505
{
506
	char *sl, name[MAXPATHLEN];
507
508
	if ((sl = rindex(s, '/')) == NULL || sl[1] == '0') {
509
		syslog(LOG_ERR,
510
		    "can't make raw dump device name from %s", s);
511
		return (s);
512
	}
513
	snprintf(name, sizeof(name), "%.*s/r%s", (int)(sl - s), s, sl + 1);
514
	if ((sl = strdup(name)) == NULL) {
515
		syslog(LOG_ERR, "%s", strerror(errno));
516
		exit(1);
517
	}
518
	return (sl);
519
}
491
}
520
492
521
int
493
int

Return to bug 15690