Ejemplo n.º 1
0
void RmDir(const char *path)
{
	if(IsFile(path) || IsLnk(path))
	{
		remove(path);
		return;
	}
	char filePath[PATH_MAX];
	if(IsDir(path))
	{
		DIR *dir;
		struct dirent *ptr;
		dir = opendir(path);
		while(ptr = readdir(dir))
		{
			if(IsSpecial(ptr->d_name))
				continue;
			GetFilePath(path,ptr->d_name,filePath);
			if(IsDir(filePath))
			{
				RmDir(filePath);
				rmdir(filePath);
			}
			else if(IsFile(filePath) || IsLnk(filePath))
			{
				remove(filePath);
			}
		}
		closedir(dir);
	}
}
Ejemplo n.º 2
0
unicode_t* FSStat::GetModeStr( unicode_t buf[64] )
{
	unicode_t* p = buf;
	/* print type */

	if ( IsLnk() ) { *p++ = '>'; }

	switch ( mode & S_IFMT )
	{
		case S_IFDIR:        /* directory */
			*p++ = 'd';
			break;

		case S_IFCHR:        /* character special */
			*p++ = 'c';
			break;

		case S_IFBLK:        /* block special */
			*p++ = 'b';
			break;

		case S_IFREG:        /* regular */
			*p++ = '-';
			break;
#ifdef S_IFLNK

		case S_IFLNK:        /* symbolic link */
			*p++ = 'l';
			break;
#endif
#ifdef S_IFSOCK

		case S_IFSOCK:       /* socket */
			*p++ = 's';
			break;
#endif
#ifdef S_IFIFO

		case S_IFIFO:        /* fifo */
			*p++ = 'p';
			break;
#endif

		default:       /* unknown */
			*p++ = '?';
			break;
	}

	/* usr */
	if ( mode & S_IRUSR )
	{
		*p++ = 'r';
	}
	else
	{
		*p++ = '-';
	}

	if ( mode & S_IWUSR )
	{
		*p++ = 'w';
	}
	else
	{
		*p++ = '-';
	}

	switch ( mode & ( S_IXUSR | S_ISUID ) )
	{
		case 0:
			*p++ = '-';
			break;

		case S_IXUSR:
			*p++ = 'x';
			break;

		case S_ISUID:
			*p++ = 'S';
			break;

		case S_IXUSR | S_ISUID:
			*p++ = 's';
			break;
	}

	/* group */
	if ( mode & S_IRGRP )
	{
		*p++ = 'r';
	}
	else
	{
		*p++ = '-';
	}

	if ( mode & S_IWGRP )
	{
		*p++ = 'w';
	}
	else
	{
		*p++ = '-';
	}

	switch ( mode & ( S_IXGRP | S_ISGID ) )
	{
		case 0:
			*p++ = '-';
			break;

		case S_IXGRP:
			*p++ = 'x';
			break;

		case S_ISGID:
			*p++ = 'S';
			break;

		case S_IXGRP | S_ISGID:
			*p++ = 's';
			break;
	}

	/* other */
	if ( mode & S_IROTH )
	{
		*p++ = 'r';
	}
	else
	{
		*p++ = '-';
	}

	if ( mode & S_IWOTH )
	{
		*p++ = 'w';
	}
	else
	{
		*p++ = '-';
	}

	switch ( mode & ( S_IXOTH | S_ISVTX ) )
	{
		case 0:
			*p++ = '-';
			break;

		case S_IXOTH:
			*p++ = 'x';
			break;

		case S_ISVTX:
			*p++ = 'T';
			break;

		case S_IXOTH | S_ISVTX:
			*p++ = 't';
			break;
	}

	*p++ = ' ';    /* will be a '+' if ACL's implemented */
	*p = '\0';
	return buf;
}