Esempio n. 1
0
xi_file_re xi_pathname_absolute(xchar *pathbuf, xuint32 pblen,
		const xchar *pathname) {
	xchar ch;
	xchar *path_name = (char*) pathname;
	xchar *cp = pathbuf;

	xi_mem_set(pathbuf, 0, pblen);

	if (*path_name != '/' && *path_name != '\\' && *(path_name + 1) != ':') {
		xi_pathname_get(pathbuf, pblen);
		while (*cp) {
			cp++;
		}
		*(cp++) = XI_SEP_FILE_C;
	}

	while ((ch = *(path_name++))) {
		switch (ch) {
		/*case '~':{
		 char *p = getenv("HOME");;
		 while (*p)*(cp++) = *(p++);
		 break; }*/
		case '\\':
		case '/':
			*(cp++) = XI_SEP_FILE_C;
			break;
		case '.': {
			switch (*path_name) {
			case '.': // we encounter '..'
				path_name += 2; //skip the following "./"
				if (*(cp - 1) == XI_SEP_FILE_C) //if cano_path now is "/xx/yy/"
					--cp; //skip backward the tail '/'
				*cp = '\0';
				cp = xi_strrchr(pathbuf, XI_SEP_FILE_C); //up a level
				++cp;
				break;
			case '\\':
			case '/':
				++path_name;
				break;
			default:
				*(cp++) = ch;
			}
			break;
		}
		default:
			*(cp++) = ch;
			break;
		}
	}
	*cp = '\0';

	return XI_FILE_RV_OK;
}
Esempio n. 2
0
int tc_xi_file_dop() {
	xint32 t = 1;
	xchar *tcname = "xi_file.h";

	xint32 ret;

	xi_dir_t *tdir;
	xi_file_stat_t fs;

	xchar pathbuf[1024];
	xchar pathtmp[1024];
	xchar *pathptr = NULL;

	tc_info();

	log_print(XDLOG, "[%s:%02d] Create a directory ##########\n", tcname, t++);
	ret = xi_dir_make("xx_test", 0755);
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.\n\n");

	log_print(XDLOG, "[%s:%02d] Create same directory #######\n", tcname, t++);
	ret = xi_dir_make("xx_test", 0x755);
	if (ret != XI_FILE_RV_ERR_AE) {
		log_print(XDLOG, "    - result : failed!! (must return -4 / ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass. (must return -4 / ret=%d)\n\n", ret);

	log_print(XDLOG, "[%s:%02d] Remove the directory ########\n", tcname, t++);
	ret = xi_dir_remove("xx_test");
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.\n\n");

	log_print(XDLOG, "[%s:%02d] Create a nested directory ###\n", tcname, t++);
	ret = xi_dir_make_force("xx_test/depth", 0755);
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.\n\n");

	log_print(XDLOG, "[%s:%02d] Remove a top directory ######\n", tcname, t++);
	ret = xi_dir_remove("xx_test");
	if (ret != XI_FILE_RV_ERR_NOTEMPT) {
		log_print(XDLOG, "    - result : failed!! (must return -14 / ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass. (must return -14 / ret=%d)\n\n", ret);

	log_print(XDLOG, "[%s:%02d] Open the directory ##########\n", tcname, t++);
	tdir = xi_dir_open("xx_test");
	if (tdir == NULL) {
		log_print(XDLOG, "    - result : failed!! (dir=%p)\n\n", tdir);
		return -1;
	}
	log_print(XDLOG, "    - result : pass. (dir=%p)\n\n", tdir);

	log_print(XDLOG, "[%s:%02d] Read the directory ##########\n", tcname, t++);
	log_print(XDLOG, "xx_test >\n");
	while ((ret = xi_dir_read(tdir, &fs)) > 0) {
		log_print(XDLOG, "\t%s\n", fs.filename);
	}
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.\n\n");

	log_print(XDLOG, "[%s:%02d] Close the directory #########\n", tcname, t++);
	ret = xi_dir_close(tdir);
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.\n\n");

	log_print(XDLOG, "[%s:%02d] Delete test directories #####\n", tcname, t++);
	ret = xi_dir_remove("xx_test/depth");
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	ret = xi_dir_remove("xx_test");
	if (ret < 0) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.\n\n");

	log_print(XDLOG, "[%s:%02d] xi_pathname_absolute(..) ####\n", tcname, t++);
	ret = xi_pathname_absolute(pathbuf, sizeof(pathbuf), "../");
	if (ret != XI_FILE_RV_OK) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass. (../ = %s)\n\n", pathbuf);

	log_print(XDLOG, "[%s:%02d] xi_pathname_basename(..) ####\n", tcname, t++);
	pathptr = xi_pathname_basename(pathbuf);
	log_print(XDLOG, "    - result : pass. (basename ../ = %s)\n\n", pathptr);

	log_print(XDLOG, "[%s:%02d] xi_pathname_get #############\n", tcname, t++);
	ret = xi_pathname_get(pathbuf, sizeof(pathbuf));
	if (ret != XI_FILE_RV_OK) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	log_print(XDLOG, "    - result : pass.(current dir = %s)\n\n", pathbuf);

	log_print(XDLOG, "[%s:%02d] xi_pathname_set(..) #########\n", tcname, t++);
	ret = xi_pathname_set("..");
	if (ret != XI_FILE_RV_OK) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	xi_pathname_get(pathtmp, sizeof(pathtmp));
	log_print(XDLOG, "    - result : pass.(current dir = %s)\n\n", pathtmp);

	log_print(XDLOG, "[%s:%02d] xi_pathname_set (old) #######\n", tcname, t++);
	ret = xi_pathname_set(pathbuf);
	if (ret != XI_FILE_RV_OK) {
		log_print(XDLOG, "    - result : failed!! (ret=%d)\n\n", ret);
		return -1;
	}
	xi_pathname_get(pathtmp, sizeof(pathtmp));
	log_print(XDLOG, "    - result : pass.(current dir = %s)\n\n", pathtmp);

	log_print(XDLOG, "========= DONE [xi_file.h - dir/path OP] =========\n\n");

	return 0;
}