version 1.34, 2007/03/28 04:05:52 |
version 1.35, 2007/04/06 01:32:39 |
|
|
|
|
#include "atomicio.h" |
#include "atomicio.h" |
|
|
|
#define _PATH_DMESG "/var/run/dmesg.boot" |
|
|
int editit(char *); |
int editit(char *); |
void init(void); |
void init(void); |
int prompt(void); |
int prompt(void); |
|
|
__dead void |
__dead void |
usage(void) |
usage(void) |
{ |
{ |
fprintf(stderr, "usage: sendbug [-LPV]\n"); |
fprintf(stderr, "usage: sendbug [-DLPV]\n"); |
exit(1); |
exit(1); |
} |
} |
|
|
|
|
int |
int |
main(int argc, char *argv[]) |
main(int argc, char *argv[]) |
{ |
{ |
int ch, c, fd, ret = 1; |
int ch, c, Dflag = 0, fd, ret = 1; |
const char *tmpdir; |
const char *tmpdir; |
struct stat sb; |
struct stat sb; |
char *pr_form; |
char *pr_form; |
time_t mtime; |
time_t mtime; |
FILE *fp; |
FILE *fp; |
|
|
while ((ch = getopt(argc, argv, "LPV")) != -1) |
while ((ch = getopt(argc, argv, "DLPV")) != -1) |
switch (ch) { |
switch (ch) { |
|
case 'D': |
|
Dflag = 1; |
|
break; |
case 'L': |
case 'L': |
printf("Known categories:\n"); |
printf("Known categories:\n"); |
printf("%s\n\n", categories); |
printf("%s\n\n", categories); |
|
|
default: |
default: |
usage(); |
usage(); |
} |
} |
|
argc -= optind; |
|
argv += optind; |
|
|
if (argc > 1) { |
if (argc > 1) |
usage(); |
usage(); |
} |
|
|
|
if ((tmpdir = getenv("TMPDIR")) == NULL || tmpdir[0] == '\0') |
if ((tmpdir = getenv("TMPDIR")) == NULL || tmpdir[0] == '\0') |
tmpdir = _PATH_TMP; |
tmpdir = _PATH_TMP; |
|
|
} |
} |
fclose(frfp); |
fclose(frfp); |
} |
} |
} else |
} else { |
template(fp); |
template(fp); |
|
if (!Dflag) { |
|
char buf[BUFSIZ]; |
|
size_t len; |
|
FILE *dfp; |
|
|
|
dfp = fopen(_PATH_DMESG, "r"); |
|
if (dfp == NULL) { |
|
warn("can't read dmesg"); |
|
} else { |
|
fputs("\n" |
|
"<dmesg is attached.>\n" |
|
"<Feel free to delete or use the -D" |
|
" flag if it contains sensitive " |
|
"information.>\n", fp); |
|
while (!feof(dfp)) { |
|
len = fread(buf, 1, sizeof buf, dfp); |
|
if (len == 0) |
|
break; |
|
if (fwrite(buf, 1, len, fp) != len) |
|
break; |
|
} |
|
fclose(dfp); |
|
} |
|
} |
|
} |
|
|
if (fflush(fp) == EOF || fstat(fd, &sb) == -1 || fclose(fp) == EOF) |
if (fflush(fp) == EOF || fstat(fd, &sb) == -1 || fclose(fp) == EOF) |
err(1, "error creating template"); |
err(1, "error creating template"); |