⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qfileinfo.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 3 页
字号:
				       levels[i].name, nt_errstr(levels[i].fname_status));				count++;			}		}			}	if (count != 0) {		ret = false;		printf("%d levels failed\n", count);		if (count > 35) {			torture_fail(torture, "too many level failures - giving up");		}	}	/* see if we can do streams */	s1 = fnum_find("STREAM_INFO");	if (!s1 || s1->stream_info.out.num_streams == 0) {		if (!is_ipc) {			printf("STREAM_INFO broken (%d) - skipping streams checks\n",			       s1 ? s1->stream_info.out.num_streams : -1);		}		skip_streams = true;	}		/* this code is incredibly repititive but doesn't lend itself to loops, so	   we use lots of macros to make it less painful */	/* first off we check the levels that are supposed to be aliases. It will be quite rare for 	   this code to fail, but we need to check it for completeness */#define ALIAS_CHECK(sname1, sname2) \	do { \		s1 = fnum_find(sname1);	 s2 = fnum_find(sname2); \		if (s1 && s2) { INFO_CHECK } \		s1 = fname_find(is_ipc, sname1); s2 = fname_find(is_ipc, sname2); \		if (s1 && s2) { INFO_CHECK } \		s1 = fnum_find(sname1);	 s2 = fname_find(is_ipc, sname2); \		if (s1 && s2) { INFO_CHECK } \	} while (0)#define INFO_CHECK \		STRUCT_EQUAL(basic_info,  create_time, basic_info, create_time); \		STRUCT_EQUAL(basic_info,  access_time, basic_info, access_time); \		STRUCT_EQUAL(basic_info,  write_time,  basic_info, write_time); \		STRUCT_EQUAL(basic_info,  change_time, basic_info, change_time); \		VAL_EQUAL   (basic_info,  attrib,      basic_info, attrib);	ALIAS_CHECK("BASIC_INFO", "BASIC_INFORMATION");#undef INFO_CHECK#define INFO_CHECK \		VAL_EQUAL(standard_info,  alloc_size,     standard_info, alloc_size); \		VAL_EQUAL(standard_info,  size,           standard_info, size); \		VAL_EQUAL(standard_info,  nlink,          standard_info, nlink); \		VAL_EQUAL(standard_info,  delete_pending, standard_info, delete_pending); \		VAL_EQUAL(standard_info,  directory,      standard_info, directory);	ALIAS_CHECK("STANDARD_INFO", "STANDARD_INFORMATION");#undef INFO_CHECK#define INFO_CHECK \		VAL_EQUAL(ea_info,  ea_size,     ea_info, ea_size);	ALIAS_CHECK("EA_INFO", "EA_INFORMATION");#undef INFO_CHECK#define INFO_CHECK \		STR_EQUAL(name_info,  fname,   name_info, fname);	ALIAS_CHECK("NAME_INFO", "NAME_INFORMATION");#undef INFO_CHECK#define INFO_CHECK \		STRUCT_EQUAL(all_info,  create_time,           all_info, create_time); \		STRUCT_EQUAL(all_info,  access_time,           all_info, access_time); \		STRUCT_EQUAL(all_info,  write_time,            all_info, write_time); \		STRUCT_EQUAL(all_info,  change_time,           all_info, change_time); \		   VAL_EQUAL(all_info,  attrib,                all_info, attrib); \		   VAL_EQUAL(all_info,  alloc_size,            all_info, alloc_size); \		   VAL_EQUAL(all_info,  size,                  all_info, size); \		   VAL_EQUAL(all_info,  nlink,                 all_info, nlink); \		   VAL_EQUAL(all_info,  delete_pending,        all_info, delete_pending); \		   VAL_EQUAL(all_info,  directory,             all_info, directory); \		   VAL_EQUAL(all_info,  ea_size,               all_info, ea_size); \		   STR_EQUAL(all_info,  fname,                 all_info, fname);	ALIAS_CHECK("ALL_INFO", "ALL_INFORMATION");#undef INFO_CHECK#define INFO_CHECK \		VAL_EQUAL(compression_info, compressed_size,compression_info, compressed_size); \		VAL_EQUAL(compression_info, format,         compression_info, format); \		VAL_EQUAL(compression_info, unit_shift,     compression_info, unit_shift); \		VAL_EQUAL(compression_info, chunk_shift,    compression_info, chunk_shift); \		VAL_EQUAL(compression_info, cluster_shift,  compression_info, cluster_shift);	ALIAS_CHECK("COMPRESSION_INFO", "COMPRESSION_INFORMATION");#undef INFO_CHECK#define INFO_CHECK \		STR_EQUAL(alt_name_info,  fname,   alt_name_info, fname);	ALIAS_CHECK("ALT_NAME_INFO", "ALT_NAME_INFORMATION");#define TIME_CHECK_NT(sname, stype, tfield) do { \	s1 = fnum_find(sname); \	if (s1 && memcmp(&s1->stype.out.tfield, &correct_time, sizeof(correct_time)) != 0) { \		printf("(%d) handle %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield,  \		       nt_time_string(mem_ctx, s1->stype.out.tfield), \		       nt_time_string(mem_ctx, correct_time)); \		ret = false; \	} \	s1 = fname_find(is_ipc, sname); \	if (s1 && memcmp(&s1->stype.out.tfield, &correct_time, sizeof(correct_time)) != 0) { \		printf("(%d) path %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield,  \		       nt_time_string(mem_ctx, s1->stype.out.tfield), \		       nt_time_string(mem_ctx, correct_time)); \		ret = false; \	}} while (0)#define TIME_CHECK_DOS(sname, stype, tfield) do { \	s1 = fnum_find(sname); \	if (s1 && dos_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \		printf("(%d) handle %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield,  \		       timestring(mem_ctx, s1->stype.out.tfield), \		       nt_time_string(mem_ctx, correct_time)); \		ret = false; \	} \	s1 = fname_find(is_ipc, sname); \	if (s1 && dos_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \		printf("(%d) path %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield,  \		       timestring(mem_ctx, s1->stype.out.tfield), \		       nt_time_string(mem_ctx, correct_time)); \		ret = false; \	}} while (0)#if 0 /* unused */#define TIME_CHECK_UNX(sname, stype, tfield) do { \	s1 = fnum_find(sname); \	if (s1 && unx_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \		printf("(%d) handle %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield,  \		       timestring(mem_ctx, s1->stype.out.tfield), \		       nt_time_string(mem_ctx, correct_time)); \		ret = false; \	} \	s1 = fname_find(is_ipc, sname); \	if (s1 && unx_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \		printf("(%d) path %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield,  \		       timestring(mem_ctx, s1->stype.out.tfield), \		       nt_time_string(mem_ctx, correct_time)); \		ret = false; \	}} while (0)#endif	/* now check that all the times that are supposed to be equal are correct */	s1 = fnum_find("BASIC_INFO");	correct_time = s1->basic_info.out.create_time;	torture_comment(torture, "create_time: %s\n", nt_time_string(mem_ctx, correct_time));	TIME_CHECK_NT ("BASIC_INFO",               basic_info, create_time);	TIME_CHECK_NT ("BASIC_INFORMATION",        basic_info, create_time);	TIME_CHECK_DOS("GETATTRE",                 getattre,   create_time);	TIME_CHECK_DOS("STANDARD",                 standard,   create_time);	TIME_CHECK_DOS("EA_SIZE",                  ea_size,    create_time);	TIME_CHECK_NT ("ALL_INFO",                 all_info,   create_time);	TIME_CHECK_NT ("NETWORK_OPEN_INFORMATION", network_open_information, create_time);	s1 = fnum_find("BASIC_INFO");	correct_time = s1->basic_info.out.access_time;	torture_comment(torture, "access_time: %s\n", nt_time_string(mem_ctx, correct_time));	TIME_CHECK_NT ("BASIC_INFO",               basic_info, access_time);	TIME_CHECK_NT ("BASIC_INFORMATION",        basic_info, access_time);	TIME_CHECK_DOS("GETATTRE",                 getattre,   access_time);	TIME_CHECK_DOS("STANDARD",                 standard,   access_time);	TIME_CHECK_DOS("EA_SIZE",                  ea_size,    access_time);	TIME_CHECK_NT ("ALL_INFO",                 all_info,   access_time);	TIME_CHECK_NT ("NETWORK_OPEN_INFORMATION", network_open_information, access_time);	s1 = fnum_find("BASIC_INFO");	correct_time = s1->basic_info.out.write_time;	torture_comment(torture, "write_time : %s\n", nt_time_string(mem_ctx, correct_time));	TIME_CHECK_NT ("BASIC_INFO",               basic_info, write_time);	TIME_CHECK_NT ("BASIC_INFORMATION",        basic_info, write_time);	TIME_CHECK_DOS("GETATTR",                  getattr,    write_time);	TIME_CHECK_DOS("GETATTRE",                 getattre,   write_time);	TIME_CHECK_DOS("STANDARD",                 standard,   write_time);	TIME_CHECK_DOS("EA_SIZE",                  ea_size,    write_time);	TIME_CHECK_NT ("ALL_INFO",                 all_info,   write_time);	TIME_CHECK_NT ("NETWORK_OPEN_INFORMATION", network_open_information, write_time);	s1 = fnum_find("BASIC_INFO");	correct_time = s1->basic_info.out.change_time;	torture_comment(torture, "change_time: %s\n", nt_time_string(mem_ctx, correct_time));	TIME_CHECK_NT ("BASIC_INFO",               basic_info, change_time);	TIME_CHECK_NT ("BASIC_INFORMATION",        basic_info, change_time);	TIME_CHECK_NT ("ALL_INFO",                 all_info,   change_time);	TIME_CHECK_NT ("NETWORK_OPEN_INFORMATION", network_open_information, change_time);#define SIZE_CHECK(sname, stype, tfield) do { \	s1 = fnum_find(sname); \	if (s1 && s1->stype.out.tfield != correct_size) { \		printf("(%d) handle %s/%s incorrect - %u should be %u\n", __LINE__, #stype, #tfield,  \		       (uint_t)s1->stype.out.tfield, \		       (uint_t)correct_size); \		ret = false; \	} \	s1 = fname_find(is_ipc, sname); \	if (s1 && s1->stype.out.tfield != correct_size) { \		printf("(%d) path %s/%s incorrect - %u should be %u\n", __LINE__, #stype, #tfield,  \		       (uint_t)s1->stype.out.tfield, \		       (uint_t)correct_size); \		ret = false; \	}} while (0)	s1 = fnum_find("STANDARD_INFO");	correct_size = s1->standard_info.out.size;	torture_comment(torture, "size: %u\n", (uint_t)correct_size);		SIZE_CHECK("GETATTR",                  getattr,                  size);	SIZE_CHECK("GETATTRE",                 getattre,                 size);	SIZE_CHECK("STANDARD",                 standard,                 size);	SIZE_CHECK("EA_SIZE",                  ea_size,                  size);	SIZE_CHECK("STANDARD_INFO",            standard_info,            size);	SIZE_CHECK("STANDARD_INFORMATION",     standard_info,            size);	SIZE_CHECK("ALL_INFO",                 all_info,                 size);	SIZE_CHECK("ALL_INFORMATION",          all_info,                 size);	SIZE_CHECK("COMPRESSION_INFO",         compression_info,         compressed_size);	SIZE_CHECK("COMPRESSION_INFORMATION",  compression_info,         compressed_size);	SIZE_CHECK("NETWORK_OPEN_INFORMATION", network_open_information, size);	if (!skip_streams) {		SIZE_CHECK("STREAM_INFO",              stream_info,   streams[0].size);		SIZE_CHECK("STREAM_INFORMATION",       stream_info,   streams[0].size);	}	s1 = fnum_find("STANDARD_INFO");	correct_size = s1->standard_info.out.alloc_size;	torture_comment(torture, "alloc_size: %u\n", (uint_t)correct_size);		SIZE_CHECK("GETATTRE",                 getattre,                 alloc_size);	SIZE_CHECK("STANDARD",                 standard,                 alloc_size);	SIZE_CHECK("EA_SIZE",                  ea_size,                  alloc_size);	SIZE_CHECK("STANDARD_INFO",            standard_info,            alloc_size);	SIZE_CHECK("STANDARD_INFORMATION",     standard_info,            alloc_size);	SIZE_CHECK("ALL_INFO",                 all_info,                 alloc_size);	SIZE_CHECK("ALL_INFORMATION",          all_info,                 alloc_size);	SIZE_CHECK("NETWORK_OPEN_INFORMATION", network_open_information, alloc_size);	if (!skip_streams) {		SIZE_CHECK("STREAM_INFO",              stream_info,   streams[0].alloc_size);		SIZE_CHECK("STREAM_INFORMATION",       stream_info,   streams[0].alloc_size);	}#define ATTRIB_CHECK(sname, stype, tfield) do { \	s1 = fnum_find(sname); \	if (s1 && s1->stype.out.tfield != correct_attrib) { \		printf("(%d) handle %s/%s incorrect - 0x%x should be 0x%x\n", __LINE__, #stype, #tfield,  \		       (uint_t)s1->stype.out.tfield, \		       (uint_t)correct_attrib); \		ret = false; \	} \	s1 = fname_find(is_ipc, sname); \	if (s1 && s1->stype.out.tfield != correct_attrib) { \		printf("(%d) path %s/%s incorrect - 0x%x should be 0x%x\n", __LINE__, #stype, #tfield,  \		       (uint_t)s1->stype.out.tfield, \		       (uint_t)correct_attrib); \		ret = false; \	}} while (0)	s1 = fnum_find("BASIC_INFO");	correct_attrib = s1->basic_info.out.attrib;	torture_comment(torture, "attrib: 0x%x\n", (uint_t)correct_attrib);		ATTRIB_CHECK("GETATTR",                   getattr,                   attrib);	if (!is_ipc) {		ATTRIB_CHECK("GETATTRE",                  getattre,                  attrib);		ATTRIB_CHECK("STANDARD",                  standard,                  attrib);		ATTRIB_CHECK("EA_SIZE",                   ea_size,                   attrib);	}	ATTRIB_CHECK("BASIC_INFO",                basic_info,                attrib);

⌨️ 快捷键说明

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