Subversion Repositories Kolibri OS

Rev

Rev 4106 | Rev 6862 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. static inline void set_cwd(const char* cwd)
  3. {
  4.     __asm__ __volatile__(
  5.     "int $0x40"
  6.     ::"a"(30),"b"(1),"c"(cwd));
  7. };
  8.  
  9.  
  10. int cmd_cd(char dir[])
  11. {
  12.  
  13. char temp[256];
  14. unsigned result;
  15.  
  16. if (NULL == dir)
  17.         {
  18.         #if LANG_ENG
  19.                 printf("  cd <directory>\n\r");
  20.         #elif LANG_RUS
  21.                 printf("  cd <¤¨à¥ªâ®à¨ï>\n\r");
  22.         #endif
  23.         return TRUE;
  24.         }
  25.  
  26. if ( 0 == strcmp(dir, ".") )
  27.         return FALSE;
  28.  
  29. if (  ( 0 == strcmp(dir, "..") ) && ( 0 != strcmp(cur_dir, "/")) )
  30.         {
  31.         cur_dir[strlen(cur_dir)-1]='\0';
  32.         dir_truncate(cur_dir);
  33.     set_cwd(cur_dir);
  34.         return TRUE;
  35.         }
  36.  
  37. if ( '/' == dir[0])
  38.         {
  39.         if ( dir_check(dir) )
  40.                 {
  41.                 strcpy(cur_dir, dir);
  42.         set_cwd(cur_dir);
  43.                 return TRUE;
  44.                 }
  45.         return FALSE;
  46.         }
  47. else
  48.         {
  49.         strcpy(temp, cur_dir);
  50.         if (cur_dir[strlen(cur_dir)-1] != '/')
  51.                 strcat(temp, "/");
  52.         strcat(temp, dir);
  53.  
  54.         if ( dir_check(temp) )
  55.                 {
  56.  
  57.                 strcpy(cur_dir, temp);
  58.         set_cwd(cur_dir);
  59.                 return TRUE;
  60.                 }
  61.  
  62.         return FALSE;
  63.         }
  64.  
  65. }
  66.  
  67.