Beispiel #1
0
PCS_API PcsFileInfo *pcs_fileinfo_clone(PcsFileInfo *fi)
{
	PcsFileInfo *res = pcs_fileinfo_create();
	if (!res) return 0;
	res->fs_id = fi->fs_id;
	res->path = pcs_utils_strdup(fi->path);
	res->server_filename = pcs_utils_strdup(fi->server_filename);
	res->server_ctime = fi->server_ctime;
	res->server_mtime = fi->server_mtime;
	res->local_ctime = fi->local_ctime;
	res->local_mtime = fi->local_mtime;
	res->size = fi->size;
	res->category = fi->category;
	res->isdir = fi->isdir;
	res->dir_empty = fi->dir_empty;
	res->empty = fi->empty;
	res->md5 = pcs_utils_strdup(fi->md5);
	res->dlink = pcs_utils_strdup(fi->dlink);
	if (fi->block_list) {
		char **p = fi->block_list;
		int i = 0;
		while(*p) {
			i++;
			p++;
		}
		res->block_list = (char **)pcs_malloc((i + 1) * sizeof(char *));
		if (res->block_list) {
			i = 0;
			p = fi->block_list;
			while(*p) {
				res->block_list[i++] = pcs_utils_strdup(*p);
				p++;
			}
		}
	}
	res->ifhassubdir = fi->ifhassubdir;
	if (fi->thumbs) {
        res->thumbs = pcs_slist2_clone(fi->thumbs);
    }
    return res;
}
Beispiel #2
0
/*转换JSON对象为PcsFileInfo对象。
JSON对象格式为:
{
	"fs_id": 123,
	"path": "/a/b",
	"server_filename": "b",
	"mtime": 1899383,
	"ctime": 1899383,
	"server_mtime": 1899383,
	"server_ctime": 1899383,
	"local_mtime": 1899383,
	"local_ctime": 1899383,
	"isdir": 1,
	"category": 1,
	"size": 0,
	"dir_empty": 0,
	"empty": 0,
	"ifhassubdir": 0,
	"md5": "",
	"dlink": "",
	"block_list": [ "/a/b/1", "a/b/2" ]
}
*/
static PcsFileInfo *pcs_parse_fileinfo(cJSON * item)
{
	cJSON *val, *list;
	PcsFileInfo *fi = pcs_fileinfo_create();
	val = cJSON_GetObjectItem(item, "fs_id");
	if ((val = cJSON_GetObjectItem(item, "fs_id")))
		fi->fs_id = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "path");
	if (val)
		fi->path = pcs_utils_strdup(val->valuestring);

	val = cJSON_GetObjectItem(item, "server_filename");
	if (val)
		fi->server_filename = pcs_utils_strdup(val->valuestring);

	val = cJSON_GetObjectItem(item, "mtime");
	if (val)
		fi->server_mtime = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "ctime");
	if (val)
		fi->server_ctime = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "server_mtime");
	if (val)
		fi->server_mtime = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "server_ctime");
	if (val)
		fi->server_ctime = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "local_mtime");
	if (val)
		fi->local_mtime = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "local_ctime");
	if (val)
		fi->local_ctime = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "isdir");
	if (val)
		fi->isdir = val->valueint ? PcsTrue : PcsFalse;

	val = cJSON_GetObjectItem(item, "category");
	if (val)
		fi->category = val->valueint;

	val = cJSON_GetObjectItem(item, "size");
	if (val)
		fi->size = (UInt64)val->valuedouble;

	val = cJSON_GetObjectItem(item, "dir_empty");
	if (val)
		fi->dir_empty = val->valueint ? PcsTrue : PcsFalse;

	val = cJSON_GetObjectItem(item, "empty");
	if (val)
		fi->empty = val->valueint ? PcsTrue : PcsFalse;

	val = cJSON_GetObjectItem(item, "ifhassubdir");
	if (val)
		fi->ifhassubdir = val->valueint ? PcsTrue : PcsFalse;

	val = cJSON_GetObjectItem(item, "md5");
	if (val)
		fi->md5 = pcs_utils_strdup(val->valuestring);

	val = cJSON_GetObjectItem(item, "dlink");
	if (val)
		fi->dlink = pcs_utils_strdup(val->valuestring);

	list = cJSON_GetObjectItem(item, "block_list");
	if (list) {
		int i, cnt = cJSON_GetArraySize(list);
		if (cnt > 0) {
			fi->block_list = (char **) pcs_malloc((cnt + 1) + sizeof(char *));
			if (!fi->block_list) return fi;
			memset(fi->block_list, 0, (cnt + 1) + sizeof(char *));
			for (i = 0; i < cnt; i++) {
				val = cJSON_GetArrayItem(list, i);
				fi->block_list[i] = pcs_utils_strdup(val->valuestring);
			}
		}
	}
	return fi;
}