int cmd_popd(char *rest) { #ifdef INCLUDE_CMD_PUSHD char *Tmp_Stack = Dir_Stack; char newdir[MAXPATH]; int i = 0; /* '*' == Wipe stack contents */ if(rest && *rest == '*') { Dir_Stack_Entries = 0; Dir_Stack_Pointer = 0; } /* If there is anything in the stack */ else if(Dir_Stack_Entries) { /* Find the last entry */ while(++i < Dir_Stack_Entries) while(*Tmp_Stack++) ; /* Copy the pathname to a buffer */ strcpy(newdir, Tmp_Stack); /* Update pointer and such */ Dir_Stack_Pointer -= strlen(Tmp_Stack) + 1; Dir_Stack_Entries -= 1; return cmd_cdd(newdir); } /* If the stack is empty */ else #endif displayString(TEXT_DIRSTACK_EMPTY); return 0; }
int cmd_pushd(char *param) { char *curdir; if((curdir = cwd(0)) != 0) { int rc; rc = ctxtPush(CTXT_TAG_DIRSTACK, curdir); free(curdir); if(rc == E_None) { /* Change to directory specified on command line */ if(param && *param) return cmd_cdd(param); return 0; } } return 1; }
int cmd_pushd(char *param) { char *curdir; int rc; if((curdir = cwd(0)) == 0) { error_out_of_memory(); return 1; } rc = ctxtPush(CTXT_TAG_DIRSTACK, curdir); myfree(curdir); if(rc == E_None) { /* Change to directory specified on command line */ if(param && *param) return cmd_cdd(param); return 0; } return 1; }
int cmd_pushd(char *rest) { char *Tmp_Stack = Dir_Stack; char *curdir; int i = 1; if((curdir = cwd(0)) == 0) { return 1; } while(Dir_Stack_Pointer + strlen(curdir) > DIR_STACK_LEN) { while(*Tmp_Stack++) i++; /* Copy all but the first entry to the buffer, and then put it back */ memcpy(Buffer, Tmp_Stack, i + Dir_Stack_Pointer - 1); Dir_Stack_Pointer -= i; memcpy(Dir_Stack, Buffer, Dir_Stack_Pointer); Dir_Stack_Entries--; } /* Append the stack and update the stack pointer */ strcpy(Dir_Stack + Dir_Stack_Pointer, curdir); Dir_Stack_Pointer += strlen(curdir) + 1; Dir_Stack[Dir_Stack_Pointer - 1] = '\0'; Dir_Stack_Entries++; free(curdir); /* Change to directory specified on command line */ if(rest && *rest) return cmd_cdd(rest); return 0; }