1#include <libsmbclient.h> 2#include <sys/stat.h> 3#include <string.h> 4#include <stdio.h> 5#include <time.h> 6#include "get_auth_data_fn.h" 7 8/* 9 * This test is intended to ensure that the timestamps returned by 10 * libsmbclient using smbc_stat() are the same as those returned by 11 * smbc_fstat(). 12 */ 13 14 15int main(int argc, char* argv[]) 16{ 17 int fd; 18 struct stat st1; 19 struct stat st2; 20 char mtime[32]; 21 char ctime[32]; 22 char atime[32]; 23 char * pUrl = argv[1]; 24 25 if(argc != 2) 26 { 27 printf("usage: %s <file_url>\n", argv[0]); 28 return 1; 29 } 30 31 32 smbc_init(get_auth_data_fn, 0); 33 34 if (smbc_stat(pUrl, &st1) < 0) 35 { 36 perror("smbc_stat"); 37 return 1; 38 } 39 40 if ((fd = smbc_open(pUrl, O_RDONLY, 0)) < 0) 41 { 42 perror("smbc_open"); 43 return 1; 44 } 45 46 if (smbc_fstat(fd, &st2) < 0) 47 { 48 perror("smbc_fstat"); 49 return 1; 50 } 51 52 smbc_close(fd); 53 54#define COMPARE(name, field) \ 55 if (st1.field != st2.field) \ 56 { \ 57 printf("Field " name " MISMATCH: st1=%lu, st2=%lu\n", \ 58 (unsigned long) st1.field, \ 59 (unsigned long) st2.field); \ 60 } 61 62 COMPARE("st_dev", st_dev); 63 COMPARE("st_ino", st_ino); 64 COMPARE("st_mode", st_mode); 65 COMPARE("st_nlink", st_nlink); 66 COMPARE("st_uid", st_uid); 67 COMPARE("st_gid", st_gid); 68 COMPARE("st_rdev", st_rdev); 69 COMPARE("st_size", st_size); 70 COMPARE("st_blksize", st_blksize); 71 COMPARE("st_blocks", st_blocks); 72 COMPARE("st_atime", st_atime); 73 COMPARE("st_mtime", st_mtime); 74 COMPARE("st_ctime", st_ctime); 75 76 return 0; 77} 78 79