Open Files 5.3.0
Multi-Platform Event-Driven Application Framework
smbfree.c

This is an example of a application level disk free space command using the ConnectSMB Libraries

/* Copyright (c) 2021 Connected Way, LLC. All rights reserved.
* Use of this source code is unrestricted
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <wchar.h>
#include <ofc/file.h>
#include "smbinit.h"
int main (int argc, char **argv)
{
OFC_TCHAR *sharename;
size_t len;
mbstate_t ps;
int ret;
const char *cursor;
OFC_BOOL result;
OFC_DWORD SectorsPerCluster;
OFC_DWORD BytesPerSector;
OFC_DWORD NumberOfFreeClusters;
OFC_DWORD TotalNumberOfClusters;
long int used;
long int avail;
long int total;
smbcp_init();
if (argc < 2)
{
printf ("Usage: smbfree <destination>\n");
exit (1);
}
memset(&ps, 0, sizeof(ps));
len = strlen(argv[1]) + 1;
sharename = malloc(sizeof(wchar_t) * len);
cursor = argv[1];
mbsrtowcs(sharename, &cursor, len, &ps);
printf("Finding Free Space on %s: ", argv[1]);
fflush(stdout);
result = OfcGetDiskFreeSpace(sharename,
&SectorsPerCluster,
&BytesPerSector,
&NumberOfFreeClusters,
&TotalNumberOfClusters);
if (result == OFC_FALSE)
{
printf("[failed]\n");
ret = 1;
}
else
{
printf("[ok]\n");
printf("Free Space On %ls\n", sharename);
printf(" Sectors Per Cluster: %d\n", SectorsPerCluster);
printf(" Bytes Per Sector: %d\n", BytesPerSector);
printf(" Number of Free Clusters: %d\n", NumberOfFreeClusters);
printf(" Total Number of Clusters: %d\n", TotalNumberOfClusters);
total = ((long int) TotalNumberOfClusters *
(long int) SectorsPerCluster *
(long int) BytesPerSector) / 512;
avail = ((long int) NumberOfFreeClusters *
(long int) SectorsPerCluster *
(long int) BytesPerSector) / 512;
used = total - avail;
printf(" Capacity (512 byte blocks): %ld\n", total);
printf(" Number of Free blocks: %ld\n", avail);
printf(" Number of Used blocks: %ld\n", used);
#if 0
printf("Sleeping for 11 seconds...\n");
sleep(11);
printf("Woke. Bye\n");
#endif
ret = 0;
}
free(sharename);
/*
* Deactivate the openfiles stack
*/
printf("Deactivating Stack\n");
smbcp_deactivate();
return (ret);
}
#define OfcGetDiskFreeSpace
Definition: file.h:2633
OFC_CORE_LIB const OFC_CHAR * ofc_get_error_string(OFC_DWORD dwerr)
OFC_CORE_LIB OFC_DWORD OfcGetLastError(OFC_VOID)
@ OFC_FALSE
Definition: types.h:632
OFC_UINT8 OFC_BOOL
Definition: types.h:624
OFC_UINT32 OFC_DWORD
Definition: types.h:430
OFC_WCHAR OFC_TCHAR
Definition: types.h:463