diff --git a/bin/sh/alias.c b/bin/sh/alias.c index e67ad649ff7..bbcf5fbe17e 100644 --- a/bin/sh/alias.c +++ b/bin/sh/alias.c @@ -63,17 +63,8 @@ setalias(const char *name, const char *val) { struct alias *ap, **app; + unalias(name); app = hashalias(name); - for (ap = *app; ap; ap = ap->next) { - if (equal(name, ap->name)) { - INTOFF; - ckfree(ap->val); - ap->val = savestr(val); - INTON; - return; - } - } - /* not found */ INTOFF; ap = ckmalloc(sizeof (struct alias)); ap->name = savestr(name); diff --git a/bin/sh/tests/parser/Makefile b/bin/sh/tests/parser/Makefile index dd749e34b52..28816a92680 100644 --- a/bin/sh/tests/parser/Makefile +++ b/bin/sh/tests/parser/Makefile @@ -24,6 +24,7 @@ ${PACKAGE}FILES+= alias14.0 ${PACKAGE}FILES+= alias15.0 alias15.0.stdout ${PACKAGE}FILES+= alias16.0 ${PACKAGE}FILES+= alias17.0 +${PACKAGE}FILES+= alias18.0 ${PACKAGE}FILES+= and-pipe-not.0 ${PACKAGE}FILES+= case1.0 ${PACKAGE}FILES+= case2.0 diff --git a/bin/sh/tests/parser/alias18.0 b/bin/sh/tests/parser/alias18.0 new file mode 100644 index 00000000000..74234fe72c0 --- /dev/null +++ b/bin/sh/tests/parser/alias18.0 @@ -0,0 +1,8 @@ +# $FreeBSD$ + +v=1 +alias a='alias a=v=2 +v=3 +a' +eval a +[ "$v" = 2 ]