*** builtin.c Wed Oct 16 17:31:48 1996 --- builtin.c.orig Wed Oct 16 16:11:23 1996 *************** *** 998,1018 **** char *dest; if (!argv[0]) { - if (func == BIN_POPD && !nextnode(firstnode(dirstack))) { - if (unset(PUSHDTOHOME)) { - zwarnnam(nam, "directory stack empty", NULL, 0); - return NULL; - } - else { - pushnode(dirstack, ztrdup(home)); - dir = nextnode(firstnode(dirstack)); - } - } if (func == BIN_PUSHD && unset(PUSHDTOHOME)) dir = nextnode(firstnode(dirstack)); if (dir) insertlinknode(dirstack, dir, getlinknode(dirstack)); ! else if (func != BIN_POPD) pushnode(dirstack, ztrdup(home)); } else if (!argv[1]) { int dd; --- 998,1008 ---- char *dest; if (!argv[0]) { if (func == BIN_PUSHD && unset(PUSHDTOHOME)) dir = nextnode(firstnode(dirstack)); if (dir) insertlinknode(dirstack, dir, getlinknode(dirstack)); ! else pushnode(dirstack, ztrdup(home)); } else if (!argv[1]) { int dd; *************** *** 1058,1063 **** --- 1048,1054 ---- target = dir; if (func == BIN_POPD) { if (!dir) { + zsfree(getlinknode(dirstack)); target = dir = firstnode(dirstack); } else if (dir != firstnode(dirstack)) { return dir; *************** *** 1070,1077 **** if (!(dest = cd_do_chdir(nam, getdata(dir)))) { if (!target) zsfree(getlinknode(dirstack)); - if (func == BIN_POPD) - zsfree(remnode(dirstack, dir)); return NULL; } if (dest != getdata(dir)) { --- 1061,1066 ----