Annotation of libaitrpc/src/blob.c, revision 1.1.2.2
1.1.2.1 misho 1: #include "global.h"
2:
3:
1.1.2.2 ! misho 4: /*
! 5: * rpc_srv_blobMap() Map blob to memory region
! 6: * @srv = RPC Server instance
! 7: * @blob = Map to this BLOB element
! 8: * return: -1 error or 0 ok
! 9: */
! 10: inline int
! 11: rpc_srv_blobMap(rpc_srv_t * __restrict srv, rpc_blob_t * __restrict blob)
! 12: {
! 13: int f;
! 14: struct stat sb;
! 15: char szFName[MAXPATHLEN];
! 16:
! 17: if (!blob) {
! 18: rpc_SetErr(EINVAL, "Error:: invalid arguments ...\n");
! 19: return -1;
! 20: }
! 21:
! 22: memset(szFName, 0, MAXPATHLEN);
! 23: snprintf(szFName, MAXPATHLEN, BLOB_FILE, srv->srv_blob.dir, blob->blob_var);
! 24: f = open(szFName, O_RDONLY);
! 25: if (f == -1) {
! 26: LOGERR;
! 27: return -1;
! 28: }
! 29: if (fstat(f, &sb) == -1) {
! 30: LOGERR;
! 31: close(f);
! 32: return -1;
! 33: }
! 34:
! 35: blob->blob_data = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, f, 0);
! 36: if (blob->blob_data == MAP_FAILED) {
! 37: LOGERR;
! 38: close(f);
! 39: blob->blob_data = NULL;
! 40: return -1;
! 41: } else {
! 42: blob->blob_len = sb.st_size;
! 43: close(f);
! 44: }
! 45:
! 46: return 0;
! 47: }
! 48:
! 49: /*
! 50: * rpc_srv_blobUnmap() Unmap blob memory region
! 51: * @blob = Mapped BLOB element
! 52: * return: none
! 53: */
! 54: inline void
! 55: rpc_srv_blobUnmap(rpc_blob_t * __restrict blob)
! 56: {
! 57: if (!blob || !blob->blob_data)
! 58: rpc_SetErr(EINVAL, "Error:: invalid arguments ...\n");
! 59: else {
! 60: munmap(blob->blob_data, blob->blob_len);
! 61: blob->blob_data = NULL;
! 62: blob->blob_len = 0;
! 63: }
! 64: }
! 65:
! 66: /*
! 67: * rpc_srv_blobFree() Free blob from disk & memory
! 68: * @srv = RPC Server instance
! 69: * @blob = Mapped BLOB element
! 70: * return: -1 error or 0 ok
! 71: */
! 72: inline int
! 73: rpc_srv_blobFree(rpc_srv_t * __restrict srv, rpc_blob_t * __restrict blob)
! 74: {
! 75: char szFName[MAXPATHLEN];
! 76:
! 77: if (!blob) {
! 78: rpc_SetErr(EINVAL, "Error:: invalid arguments ...\n");
! 79: return -1;
! 80: }
! 81:
! 82: if (blob->blob_data)
! 83: rpc_srv_blobUnmap(blob);
! 84:
! 85: memset(szFName, 0, MAXPATHLEN);
! 86: snprintf(szFName, MAXPATHLEN, BLOB_FILE, srv->srv_blob.dir, blob->blob_var);
! 87: if (remove(szFName) == -1) {
! 88: LOGERR;
! 89: return -1;
! 90: }
! 91:
! 92: return 0;
! 93: }
! 94:
! 95: // ------------------------------------------------------------
! 96:
! 97: int
! 98: rpc_srv_sendBLOB(rpc_cli_t * __restrict cli, rpc_blob_t *blob)
! 99: {
! 100: int ret = 0;
! 101: uint8_t buf[BLOBSIZ];
! 102:
! 103: if (!cli || !blob) {
! 104: rpc_SetErr(EINVAL, "Error:: invalid arguments ...\n");
! 105: return -1;
! 106: }
! 107:
! 108: do {
! 109: } while (ret);
! 110:
! 111: return blob->blob_len;
! 112: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>