projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Trailing withspace handling in mhl
[mmh]
/
uip
/
mhl.c
diff --git
a/uip/mhl.c
b/uip/mhl.c
index
20f5d31
..
2987c0d
100644
(file)
--- a/
uip/mhl.c
+++ b/
uip/mhl.c
@@
-61,6
+61,8
@@
static struct swit switches[] = {
{ NULL, 0 }
};
{ NULL, 0 }
};
+char *version=VERSION;
+
#define NOCOMPONENT 0x000001 /* don't show component name */
#define UPPERCASE 0x000002 /* display in all upper case */
#define CENTER 0x000004 /* center line */
#define NOCOMPONENT 0x000001 /* don't show component name */
#define UPPERCASE 0x000002 /* display in all upper case */
#define CENTER 0x000004 /* center line */
@@
-75,7
+77,8
@@
static struct swit switches[] = {
#define INIT 0x000800 /* initialize component */
#define SPLIT 0x001000 /* split headers (don't concatenate) */
#define NONEWLINE 0x002000 /* don't write trailing newline */
#define INIT 0x000800 /* initialize component */
#define SPLIT 0x001000 /* split headers (don't concatenate) */
#define NONEWLINE 0x002000 /* don't write trailing newline */
-#define LBITS "\020\01NOCOMPONENT\02UPPERCASE\03CENTER\04CLEARTEXT\05EXTRA\06HDROUTPUT\07LEFTADJUST\010COMPRESS\011ADDRFMT\012DATEFMT\013FORMAT\014INIT\015SPLIT\016NONEWLINE"
+#define RTRIM 0x004000 /* trim trailing whitespace */
+#define LBITS "\020\01NOCOMPONENT\02UPPERCASE\03CENTER\04CLEARTEXT\05EXTRA\06HDROUTPUT\07LEFTADJUST\010COMPRESS\011ADDRFMT\012DATEFMT\013FORMAT\014INIT\015SPLIT\016NONEWLINE\017RTRIM"
#define GFLAGS (NOCOMPONENT | UPPERCASE | CENTER | LEFTADJUST | COMPRESS | SPLIT)
struct mcomp {
#define GFLAGS (NOCOMPONENT | UPPERCASE | CENTER | LEFTADJUST | COMPRESS | SPLIT)
struct mcomp {
@@
-146,6
+149,8
@@
static struct triple triples[] = {
{ "nocompress", 0, COMPRESS },
{ "split", SPLIT, 0 },
{ "nosplit", 0, SPLIT },
{ "nocompress", 0, COMPRESS },
{ "split", SPLIT, 0 },
{ "nosplit", 0, SPLIT },
+ { "rtrim", RTRIM, 0 },
+ { "nortrim", 0, RTRIM },
{ "addrfield", ADDRFMT, DATEFMT },
{ "datefield", DATEFMT, ADDRFMT },
{ "newline", 0, NONEWLINE },
{ "addrfield", ADDRFMT, DATEFMT },
{ "datefield", DATEFMT, ADDRFMT },
{ "newline", 0, NONEWLINE },
@@
-369,7
+374,7
@@
mhl_format(char *file, int width)
int n = 0;
/* split the fields */
int n = 0;
/* split the fields */
- tmparray = brkstring(getcpy(++parptr), ",",
+ tmparray = brkstring(mh_xstrdup(++parptr), ",",
NULL);
/*
** copy pointers to split fields
NULL);
/*
** copy pointers to split fields
@@
-400,10
+405,10
@@
mhl_format(char *file, int width)
if (!c1->c_fstr && global.c_fstr) {
if ((c1->c_flags & DATEFMT) &&
(global.c_flags & DATEFMT)) {
if (!c1->c_fstr && global.c_fstr) {
if ((c1->c_flags & DATEFMT) &&
(global.c_flags & DATEFMT)) {
- c1->c_fstr = getcpy(global.c_fstr);
+ c1->c_fstr = mh_xstrdup(global.c_fstr);
} else if ((c1->c_flags & ADDRFMT) &&
(global.c_flags & ADDRFMT)) {
} else if ((c1->c_flags & ADDRFMT) &&
(global.c_flags & ADDRFMT)) {
- c1->c_fstr = getcpy(global.c_fstr);
+ c1->c_fstr = mh_xstrdup(global.c_fstr);
}
}
continue;
}
}
continue;
@@
-458,8
+463,8
@@
evalvar(struct mcomp *c1)
return 1;
cp = concat("=", cp, NULL);
fmtstr = new_fs(cp, NULL);
return 1;
cp = concat("=", cp, NULL);
fmtstr = new_fs(cp, NULL);
- free(cp);
- c1->c_fstr = getcpy(fmtstr);
+ mh_free0(&cp);
+ c1->c_fstr = mh_xstrdup(fmtstr);
c1->c_flags |= FORMAT;
return 0;
}
c1->c_flags |= FORMAT;
return 0;
}
@@
-468,7
+473,7
@@
evalvar(struct mcomp *c1)
char *fmtstr;
fmtstr = new_fs("=%(decode{text})", NULL);
char *fmtstr;
fmtstr = new_fs("=%(decode{text})", NULL);
- c1->c_fstr = getcpy(fmtstr);
+ c1->c_fstr = mh_xstrdup(fmtstr);
c1->c_flags |= FORMAT;
return 0;
}
c1->c_flags |= FORMAT;
return 0;
}
@@
-530,7
+535,7
@@
ptos(char *name, char **s)
}
c = *parptr;
*parptr = 0;
}
c = *parptr;
*parptr = 0;
- *s = getcpy(cp);
+ *s = mh_xstrdup(cp);
if ((*parptr = c) == '"')
parptr++;
return 0;
if ((*parptr = c) == '"')
parptr++;
return 0;
@@
-586,8
+591,7
@@
process(char *fname, int ofilen, int ofilec)
if (fp != stdin)
fclose(fp);
if (holder.c_text) {
if (fp != stdin)
fclose(fp);
if (holder.c_text) {
- free(holder.c_text);
- holder.c_text = NULL;
+ mh_free0(&(holder.c_text));
}
free_queue(&msghd, &msgtl);
for (c1 = fmthd; c1; c1 = c1->c_next)
}
free_queue(&msghd, &msgtl);
for (c1 = fmthd; c1; c1 = c1->c_next)
@@
-599,7
+603,7
@@
static void
mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
{
enum state state;
mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
{
enum state state;
- struct field f = free_field;
+ struct field f = {{0}};
struct mcomp *c1, *c2, *c3;
char **ip;
struct mcomp *c1, *c2, *c3;
char **ip;
@@
-661,8
+665,7
@@
mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
holder.c_text = concat("(Message ",
mname, ")\n", NULL);
putcomp(c1, &holder, ONECOMP);
holder.c_text = concat("(Message ",
mname, ")\n", NULL);
putcomp(c1, &holder, ONECOMP);
- free(holder.c_text);
- holder.c_text = NULL;
+ mh_free0(&(holder.c_text));
continue;
}
if (mh_strcasecmp(c1->c_name, "extras")==0) {
continue;
}
if (mh_strcasecmp(c1->c_name, "extras")==0) {
@@
-674,15
+677,14
@@
mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
continue;
}
if (dobody && mh_strcasecmp(c1->c_name, "body")==0) {
continue;
}
if (dobody && mh_strcasecmp(c1->c_name, "body")==0) {
- holder.c_text = getcpy(f.value);
+ holder.c_text = mh_xstrdup(f.value);
while (state == BODY2) {
putcomp(c1, &holder, BODYCOMP);
state = m_getfld2(state, &f, fp);
free(holder.c_text);
while (state == BODY2) {
putcomp(c1, &holder, BODYCOMP);
state = m_getfld2(state, &f, fp);
free(holder.c_text);
- holder.c_text = getcpy(f.value);
+ holder.c_text = mh_xstrdup(f.value);
}
}
- free(holder.c_text);
- holder.c_text = NULL;
+ mh_free0(&(holder.c_text));
continue;
}
for (c2 = msghd; c2; c2 = c2->c_next) {
continue;
}
for (c2 = msghd; c2; c2 = c2->c_next) {
@@
-776,21
+778,21
@@
mcomp_format(struct mcomp *c1, struct mcomp *c2)
fmt_scan(c1->c_fmt, buffer, sizeof(buffer) - 1, dat);
/* Don't need to append a newline, dctime() already did */
fmt_scan(c1->c_fmt, buffer, sizeof(buffer) - 1, dat);
/* Don't need to append a newline, dctime() already did */
- c2->c_text = getcpy(buffer);
+ c2->c_text = mh_xstrdup(buffer);
- free(ap);
+ mh_free0(&ap);
return;
}
(q = &pq)->pq_next = NULL;
while ((cp = getname(ap))) {
return;
}
(q = &pq)->pq_next = NULL;
while ((cp = getname(ap))) {
- p = (struct pqpair *) mh_xcalloc((size_t) 1, sizeof(*p));
+ p = mh_xcalloc(1, sizeof(*p));
if ((mp = getm(cp, NULL, 0, AD_NAME, error)) == NULL) {
if ((mp = getm(cp, NULL, 0, AD_NAME, error)) == NULL) {
- p->pq_text = getcpy(cp);
- p->pq_error = getcpy(error);
+ p->pq_text = mh_xstrdup(cp);
+ p->pq_error = mh_xstrdup(error);
} else {
} else {
- p->pq_text = getcpy(mp->m_text);
+ p->pq_text = mh_xstrdup(mp->m_text);
mnfree(mp);
}
q = (q->pq_next = p);
mnfree(mp);
}
q = (q->pq_next = p);
@@
-813,11
+815,11
@@
mcomp_format(struct mcomp *c1, struct mcomp *c2)
c2->c_text = add(buffer, c2->c_text);
}
c2->c_text = add(buffer, c2->c_text);
}
- free(p->pq_text);
+ mh_free0(&(p->pq_text));
if (p->pq_error)
if (p->pq_error)
- free(p->pq_error);
+ mh_free0(&(p->pq_error));
q = p->pq_next;
q = p->pq_next;
- free((char *) p);
+ mh_free0(&p);
}
c2->c_text = add("\n", c2->c_text);
}
c2->c_text = add("\n", c2->c_text);
@@
-831,15
+833,15
@@
add_queue(struct mcomp **head, struct mcomp **tail, char *name,
{
struct mcomp *c1;
{
struct mcomp *c1;
- c1 = (struct mcomp *) mh_xcalloc((size_t) 1, sizeof(*c1));
+ c1 = mh_xcalloc(1, sizeof(*c1));
c1->c_flags = flags & ~INIT;
c1->c_flags = flags & ~INIT;
- if ((c1->c_name = name ? getcpy(name) : NULL))
+ if ((c1->c_name = name ? mh_xstrdup(name) : NULL))
c1->c_flags |= mcomp_flags(c1->c_name);
c1->c_flags |= mcomp_flags(c1->c_name);
- c1->c_text = text ? getcpy(text) : NULL;
+ c1->c_text = text ? mh_xstrdup(text) : NULL;
if (flags & INIT) {
if (global.c_ovtxt)
if (flags & INIT) {
if (global.c_ovtxt)
- c1->c_ovtxt = getcpy(global.c_ovtxt);
+ c1->c_ovtxt = mh_xstrdup(global.c_ovtxt);
c1->c_offset = global.c_offset;
c1->c_ovoff = global. c_ovoff;
c1->c_width = 0;
c1->c_offset = global.c_offset;
c1->c_ovoff = global. c_ovoff;
c1->c_width = 0;
@@
-864,16
+866,16
@@
free_queue(struct mcomp **head, struct mcomp **tail)
for (c1 = *head; c1; c1 = c2) {
c2 = c1->c_next;
if (c1->c_name)
for (c1 = *head; c1; c1 = c2) {
c2 = c1->c_next;
if (c1->c_name)
- free(c1->c_name);
+ mh_free0(&(c1->c_name));
if (c1->c_text)
if (c1->c_text)
- free(c1->c_text);
+ mh_free0(&(c1->c_text));
if (c1->c_ovtxt)
if (c1->c_ovtxt)
- free(c1->c_ovtxt);
+ mh_free0(&(c1->c_ovtxt));
if (c1->c_fstr)
if (c1->c_fstr)
- free(c1->c_fstr);
+ mh_free0(&(c1->c_fstr));
if (c1->c_fmt)
if (c1->c_fmt)
- free((char *) c1->c_fmt);
- free((char *) c1);
+ mh_free0(&(c1->c_fmt));
+ mh_free0(&c1);
}
*head = *tail = NULL;
}
*head = *tail = NULL;
@@
-885,7
+887,10
@@
putcomp(struct mcomp *c1, struct mcomp *c2, int flag)
{
int count, cchdr;
unsigned char *cp;
{
int count, cchdr;
unsigned char *cp;
+ char trimmed_prefix[BUFSIZ];
+ strncpy(trimmed_prefix, c1->c_text ? c1->c_text : c1->c_name, sizeof(trimmed_prefix) - 1);
+ rtrim(trimmed_prefix);
cchdr = 0;
lm = 0;
wid = c1->c_width ? c1->c_width : global.c_width;
cchdr = 0;
lm = 0;
wid = c1->c_width ? c1->c_width : global.c_width;
@@
-898,7
+903,7
@@
putcomp(struct mcomp *c1, struct mcomp *c2, int flag)
onelp = NULL;
if (c1->c_flags & CLEARTEXT) {
onelp = NULL;
if (c1->c_flags & CLEARTEXT) {
- putstr(c1->c_text);
+ putstr((c1->c_flags & RTRIM) ? rtrim(c1->c_text) : c1->c_text);
putstr("\n");
return;
}
putstr("\n");
return;
}
@@
-923,7
+928,11
@@
putcomp(struct mcomp *c1, struct mcomp *c2, int flag)
for (cp = (c1->c_text ? c1->c_text : c1->c_name); *cp; cp++)
if (islower(*cp))
*cp = toupper(*cp);
for (cp = (c1->c_text ? c1->c_text : c1->c_name); *cp; cp++)
if (islower(*cp))
*cp = toupper(*cp);
- putstr(c1->c_text ? c1->c_text : c1->c_name);
+ if (*c2->c_text && *c2->c_text != '\n' && *c2->c_text != '\r') {
+ putstr(c1->c_text ? c1->c_text : c1->c_name);
+ } else {
+ putstr(trimmed_prefix);
+ }
if (flag != BODYCOMP) {
putstr(": ");
if (!(c1->c_flags & SPLIT))
if (flag != BODYCOMP) {
putstr(": ");
if (!(c1->c_flags & SPLIT))
@@
-971,16
+980,23
@@
putcomp(struct mcomp *c1, struct mcomp *c2, int flag)
}
count += c1->c_offset;
}
count += c1->c_offset;
- if ((cp = oneline(c2->c_text, c1->c_flags)))
- putstr(cp);
+ if ((cp = oneline(c2->c_text, c1->c_flags))) {
+ putstr((c1->c_flags & RTRIM) ? rtrim(cp) : cp);
+ }
if (term == '\n')
putstr("\n");
while ((cp = oneline(c2->c_text, c1->c_flags))) {
lm = count;
if (term == '\n')
putstr("\n");
while ((cp = oneline(c2->c_text, c1->c_flags))) {
lm = count;
- if (flag == BODYCOMP && !(c1->c_flags & NOCOMPONENT))
- putstr(c1->c_text ? c1->c_text : c1->c_name);
+ if (flag == BODYCOMP && !(c1->c_flags & NOCOMPONENT)) {
+ if (*cp) {
+ putstr(c1->c_text ? c1->c_text : c1->c_name);
+ } else {
+ putstr(trimmed_prefix);
+ }
+ }
if (*cp)
if (*cp)
- putstr(cp);
+ putstr((c1->c_flags & RTRIM) ? rtrim(cp) : cp);
+
if (term == '\n')
putstr("\n");
}
if (term == '\n')
putstr("\n");
}