cwd.c

来自「俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)」· C语言 代码 · 共 92 行

C
92
字号
#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/wcebase.h>#include <sys/wcefile.h>#include <sys/wcetrace.h>#define MAXDIRLEN  (128)#define MAXPATHLEN (256)char __curdir[MAXDIRLEN];static int Initialized = FALSE;intchdir(const char *path){  struct stat st;  char   fpath[MAX_PATH];  char  *cp = NULL;  if (path == NULL || strlen(path) == 0) {    errno = EFAULT;    return(-1);  }  WCETRACE(WCE_IO, "chdir: path \"%s\"", path);  fixpath(path, fpath);  if (stat(fpath, &st) < 0) {    errno = ENOENT;    WCETRACE(WCE_IO, "chdir: return ENOENT");    return(-1);  }  if (!S_ISDIR(st.st_mode)) {    errno = ENOTDIR;    WCETRACE(WCE_IO, "chdir: return ENOTDIR");    return(-1);  }  strncpy(__curdir, fpath, MAXDIRLEN);  Initialized = 1;  /* Change backslashes to forward slashes */  cp = __curdir;  while (*cp != NULL) {    if (*cp == '\\')      *cp = '/';    cp++;  }  WCETRACE(WCE_IO, "chdir: success, cwd is \"%s\"", __curdir);  return(0);}char *getcwd(char *buf, size_t size){  int len;  /* This is NOT compliant with what Linux does.. */  if (buf == NULL || size == 0) {    return(NULL);  }  /* Make sure that *something* is in here */  if (!Initialized) {    memset(__curdir, 0, MAXDIRLEN);    __curdir[0] = '/';    Initialized = 1;  }    if (len = strlen(__curdir) > 0) {    if (len > size) {      errno = ERANGE;      return(-1);    }    strncpy(buf, __curdir, strlen(__curdir)+1);  } else {    WCETRACE(WCE_IO, "getcwd WARNING: __curdir is unset");  }  return(buf);}  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?