summaryrefslogtreecommitdiffstats
path: root/examples/libsmbclient/teststat.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/libsmbclient/teststat.c')
-rw-r--r--examples/libsmbclient/teststat.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/examples/libsmbclient/teststat.c b/examples/libsmbclient/teststat.c
new file mode 100644
index 0000000..079ac89
--- /dev/null
+++ b/examples/libsmbclient/teststat.c
@@ -0,0 +1,110 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+#include <libsmbclient.h>
+#include <stdbool.h>
+#include "get_auth_data_fn.h"
+
+static const char *filetypestr(mode_t mode)
+{
+ if (S_ISREG(mode)) {
+ return "regular file";
+ }
+ if (S_ISDIR(mode)) {
+ return "directory";
+ }
+ if (S_ISFIFO(mode)) {
+ return "fifo";
+ }
+ if (S_ISLNK(mode)) {
+ return "symbolic link";
+ }
+ if (S_ISSOCK(mode)) {
+ return "socket";
+ }
+ if (S_ISCHR(mode)) {
+ return "character special file";
+ }
+ if (S_ISBLK(mode)) {
+ return "block special file";
+ }
+ return "unknown file type";
+}
+
+int main(int argc, char * argv[])
+{
+ SMBCCTX *ctx = NULL;
+ int debug = 0;
+ char m_time[32];
+ char c_time[32];
+ char a_time[32];
+ const char * pSmbPath = NULL;
+ const char * pLocalPath = NULL;
+ struct stat st;
+ int ret;
+
+ if (argc == 1) {
+ pSmbPath = "smb://RANDOM/Public/small";
+ pLocalPath = "/random/home/samba/small";
+ }
+ else if (argc == 2) {
+ pSmbPath = argv[1];
+ pLocalPath = NULL;
+ }
+ else if (argc == 3) {
+ pSmbPath = argv[1];
+ pLocalPath = argv[2];
+ } else {
+ printf("usage: %s [ smb://path/to/file "
+ "[ /nfs/or/local/path/to/file ] ]\n",
+ argv[0]);
+ return 1;
+ }
+
+ ctx = smbc_new_context();
+ if (ctx == NULL) {
+ perror("smbc_new_context failed");
+ return 1;
+ }
+
+ smbc_setOptionDebugToStderr(ctx, 1);
+ smbc_setDebug(ctx, debug);
+ smbc_init_context(ctx);
+ smbc_setFunctionAuthData(ctx, get_auth_data_fn);
+ smbc_setOptionPosixExtensions(ctx, true);
+
+ ret = smbc_getFunctionStat(ctx)(ctx, pSmbPath, &st);
+ if (ret < 0) {
+ perror("smbc_stat");
+ return 1;
+ }
+
+ printf("\nSAMBA\n mtime:%jd/%s ctime:%jd/%s atime:%jd/%s %s\n",
+ (intmax_t)st.st_mtime,
+ ctime_r(&st.st_mtime, m_time),
+ (intmax_t)st.st_ctime,
+ ctime_r(&st.st_ctime, c_time),
+ (intmax_t)st.st_atime,
+ ctime_r(&st.st_atime, a_time),
+ filetypestr(st.st_mode));
+
+ if (pLocalPath != NULL) {
+ ret = stat(pLocalPath, &st);
+ if (ret < 0) {
+ perror("stat");
+ return 1;
+ }
+
+ printf("LOCAL\n mtime:%jd/%s ctime:%jd/%s atime:%jd/%s %s\n",
+ (intmax_t)st.st_mtime,
+ ctime_r(&st.st_mtime, m_time),
+ (intmax_t)st.st_ctime,
+ ctime_r(&st.st_ctime, c_time),
+ (intmax_t)st.st_atime,
+ ctime_r(&st.st_atime, a_time),
+ filetypestr(st.st_mode));
+ }
+
+ return 0;
+}