1da6c28aaSamw /* 2da6c28aaSamw * CDDL HEADER START 3da6c28aaSamw * 4da6c28aaSamw * The contents of this file are subject to the terms of the 5da6c28aaSamw * Common Development and Distribution License (the "License"). 6da6c28aaSamw * You may not use this file except in compliance with the License. 7da6c28aaSamw * 8da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9da6c28aaSamw * or http://www.opensolaris.org/os/licensing. 10da6c28aaSamw * See the License for the specific language governing permissions 11da6c28aaSamw * and limitations under the License. 12da6c28aaSamw * 13da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each 14da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the 16da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying 17da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner] 18da6c28aaSamw * 19da6c28aaSamw * CDDL HEADER END 20da6c28aaSamw */ 21da6c28aaSamw /* 22*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 23da6c28aaSamw * Use is subject to license terms. 24da6c28aaSamw */ 25da6c28aaSamw 26da6c28aaSamw /* 27*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Legacy encode/decode routines for door clients and servers. 28da6c28aaSamw */ 29da6c28aaSamw 30*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #ifndef _KERNEL 31*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <errno.h> 32*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <string.h> 33*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <strings.h> 34*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #else 35da6c28aaSamw #include <sys/types.h> 36da6c28aaSamw #include <sys/sunddi.h> 37da6c28aaSamw #include <sys/errno.h> 38da6c28aaSamw #endif 39da6c28aaSamw 40da6c28aaSamw #include <smbsrv/wintypes.h> 41*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_share.h> 42*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_door.h> 43*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/alloc.h> 44*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smbinfo.h> 45da6c28aaSamw 46da6c28aaSamw smb_dr_ctx_t * 47da6c28aaSamw smb_dr_decode_start(char *ptr, int size) 48da6c28aaSamw { 49da6c28aaSamw smb_dr_ctx_t *ctx = MEM_MALLOC("CommonDoor", sizeof (smb_dr_ctx_t)); 50da6c28aaSamw if (ctx) { 51da6c28aaSamw ctx->start_ptr = ctx->ptr = ptr; 52da6c28aaSamw ctx->end_ptr = ptr + size; 53da6c28aaSamw ctx->status = 0; 54da6c28aaSamw } 55da6c28aaSamw return (ctx); 56da6c28aaSamw } 57da6c28aaSamw 58da6c28aaSamw int 59da6c28aaSamw smb_dr_decode_finish(smb_dr_ctx_t *ctx) 60da6c28aaSamw { 61da6c28aaSamw int status = ctx->status; 62*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (status == 0 && ctx->ptr != ctx->end_ptr) 63da6c28aaSamw status = ENOTEMPTY; 64*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 65da6c28aaSamw MEM_FREE("CommonDoor", ctx); 66da6c28aaSamw return (status); 67da6c28aaSamw } 68da6c28aaSamw 69da6c28aaSamw smb_dr_ctx_t * 70da6c28aaSamw smb_dr_encode_start(char *ptr, int size) 71da6c28aaSamw { 72da6c28aaSamw smb_dr_ctx_t *ctx = MEM_MALLOC("CommonDoor", sizeof (smb_dr_ctx_t)); 73da6c28aaSamw if (ctx) { 74da6c28aaSamw ctx->start_ptr = ctx->ptr = ptr; 75da6c28aaSamw ctx->end_ptr = ptr + size; 76da6c28aaSamw ctx->status = 0; 77da6c28aaSamw } 78da6c28aaSamw return (ctx); 79da6c28aaSamw } 80da6c28aaSamw 81da6c28aaSamw int 82da6c28aaSamw smb_dr_encode_finish(smb_dr_ctx_t *ctx, unsigned int *used) 83da6c28aaSamw { 84da6c28aaSamw int status = ctx->status; 85da6c28aaSamw if (status == 0) { 86da6c28aaSamw if (ctx->ptr < ctx->end_ptr) { 87da6c28aaSamw /*LINTED E_PTRDIFF_OVERFLOW*/ 88da6c28aaSamw *used = ctx->ptr - ctx->start_ptr; 89*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 90da6c28aaSamw status = ENOSPC; 91*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 92da6c28aaSamw } 93da6c28aaSamw 94da6c28aaSamw MEM_FREE("CommonDoor", ctx); 95da6c28aaSamw return (status); 96da6c28aaSamw } 97da6c28aaSamw 98da6c28aaSamw DWORD 99da6c28aaSamw smb_dr_get_dword(smb_dr_ctx_t *ctx) 100da6c28aaSamw { 101da6c28aaSamw DWORD num = 0; 102da6c28aaSamw if (ctx->status == 0) { 103da6c28aaSamw if (ctx->ptr + sizeof (DWORD) <= ctx->end_ptr) { 104da6c28aaSamw (void) memcpy(&num, ctx->ptr, sizeof (DWORD)); 105da6c28aaSamw ctx->ptr += sizeof (DWORD); 106*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 107da6c28aaSamw ctx->status = ENOSPC; 108*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 109da6c28aaSamw } 110da6c28aaSamw return (num); 111da6c28aaSamw } 112da6c28aaSamw 113da6c28aaSamw int32_t 114da6c28aaSamw smb_dr_get_int32(smb_dr_ctx_t *ctx) 115da6c28aaSamw { 116da6c28aaSamw int32_t num = 0; 117da6c28aaSamw if (ctx->status == 0) { 118da6c28aaSamw if (ctx->ptr + sizeof (int32_t) <= ctx->end_ptr) { 119da6c28aaSamw (void) memcpy(&num, ctx->ptr, sizeof (int32_t)); 120da6c28aaSamw ctx->ptr += sizeof (int32_t); 121*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 122da6c28aaSamw ctx->status = ENOSPC; 123*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 124da6c28aaSamw } 125da6c28aaSamw return (num); 126da6c28aaSamw } 127da6c28aaSamw 128da6c28aaSamw uint32_t 129da6c28aaSamw smb_dr_get_uint32(smb_dr_ctx_t *ctx) 130da6c28aaSamw { 131da6c28aaSamw return ((uint32_t)smb_dr_get_int32(ctx)); 132da6c28aaSamw } 133da6c28aaSamw 134da6c28aaSamw char * 135da6c28aaSamw smb_dr_get_string(smb_dr_ctx_t *ctx) 136da6c28aaSamw { 137da6c28aaSamw char *buf = NULL; 138da6c28aaSamw int len = smb_dr_get_int32(ctx); 139da6c28aaSamw 140da6c28aaSamw if (ctx->status == 0) { 141da6c28aaSamw if (len == -1) 142da6c28aaSamw return (buf); 143da6c28aaSamw 144da6c28aaSamw if (ctx->ptr + len <= ctx->end_ptr) { 145da6c28aaSamw buf = MEM_MALLOC("CommonDoor", len +1); 146da6c28aaSamw if (buf) { 147*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (len == 0) { 148da6c28aaSamw (void) strcpy(buf, ""); 149*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 150da6c28aaSamw (void) memcpy(buf, ctx->ptr, len); 151da6c28aaSamw ctx->ptr += len; 152da6c28aaSamw *(buf + len) = '\0'; 153da6c28aaSamw } 154*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 155da6c28aaSamw #ifndef _KERNEL 156da6c28aaSamw ctx->status = errno; 157da6c28aaSamw #else 158da6c28aaSamw ctx->status = ENOMEM; 159da6c28aaSamw #endif 160*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 161*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 162da6c28aaSamw ctx->status = ENOSPC; 163*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 164da6c28aaSamw } 165da6c28aaSamw return (buf); 166da6c28aaSamw } 167da6c28aaSamw 168da6c28aaSamw void 169da6c28aaSamw smb_dr_put_dword(smb_dr_ctx_t *ctx, DWORD num) 170da6c28aaSamw { 171da6c28aaSamw if (ctx->status == 0) { 172da6c28aaSamw if (ctx->ptr + sizeof (DWORD) <= ctx->end_ptr) { 173da6c28aaSamw (void) memcpy(ctx->ptr, &num, sizeof (DWORD)); 174da6c28aaSamw ctx->ptr += sizeof (DWORD); 175*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 176da6c28aaSamw ctx->status = ENOSPC; 177*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 178da6c28aaSamw } 179da6c28aaSamw } 180da6c28aaSamw 181da6c28aaSamw void 182da6c28aaSamw smb_dr_put_int32(smb_dr_ctx_t *ctx, int32_t num) 183da6c28aaSamw { 184da6c28aaSamw if (ctx->status == 0) { 185da6c28aaSamw if (ctx->ptr + sizeof (int32_t) <= ctx->end_ptr) { 186da6c28aaSamw (void) memcpy(ctx->ptr, &num, sizeof (int32_t)); 187da6c28aaSamw ctx->ptr += sizeof (int32_t); 188*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 189da6c28aaSamw ctx->status = ENOSPC; 190*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 191da6c28aaSamw } 192da6c28aaSamw } 193da6c28aaSamw 194da6c28aaSamw void 195da6c28aaSamw smb_dr_put_uint32(smb_dr_ctx_t *ctx, uint32_t num) 196da6c28aaSamw { 197da6c28aaSamw smb_dr_put_int32(ctx, (int32_t)num); 198da6c28aaSamw } 199da6c28aaSamw 200da6c28aaSamw void 201c8ec8eeaSjose borrego smb_dr_put_string(smb_dr_ctx_t *ctx, const char *buf) 202da6c28aaSamw { 203da6c28aaSamw int len; 204da6c28aaSamw 205da6c28aaSamw if (!buf) 206da6c28aaSamw len = -1; 207da6c28aaSamw else 208da6c28aaSamw len = strlen(buf); 209da6c28aaSamw 210da6c28aaSamw if (ctx->status == 0) { 211da6c28aaSamw smb_dr_put_int32(ctx, len); 212da6c28aaSamw if (len <= 0) 213da6c28aaSamw return; 214da6c28aaSamw 215da6c28aaSamw if (ctx->ptr + len <= ctx->end_ptr) { 216da6c28aaSamw (void) memcpy(ctx->ptr, buf, len); 217da6c28aaSamw ctx->ptr += len; 218*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 219da6c28aaSamw ctx->status = ENOSPC; 220*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 221da6c28aaSamw } 222da6c28aaSamw } 223da6c28aaSamw 224da6c28aaSamw void 225da6c28aaSamw smb_dr_free_string(char *buf) 226da6c28aaSamw { 227da6c28aaSamw if (buf) 228da6c28aaSamw MEM_FREE("CommonDoor", buf); 229da6c28aaSamw } 230da6c28aaSamw 231da6c28aaSamw int64_t 232da6c28aaSamw smb_dr_get_int64(smb_dr_ctx_t *ctx) 233da6c28aaSamw { 234da6c28aaSamw int64_t num = 0; 235da6c28aaSamw if (ctx->status == 0) { 236da6c28aaSamw if (ctx->ptr + sizeof (int64_t) <= ctx->end_ptr) { 237da6c28aaSamw (void) memcpy(&num, ctx->ptr, sizeof (int64_t)); 238da6c28aaSamw ctx->ptr += sizeof (int64_t); 239*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 240da6c28aaSamw ctx->status = ENOSPC; 241*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 242da6c28aaSamw } 243da6c28aaSamw return (num); 244da6c28aaSamw } 245da6c28aaSamw 246da6c28aaSamw uint64_t 247da6c28aaSamw smb_dr_get_uint64(smb_dr_ctx_t *ctx) 248da6c28aaSamw { 249da6c28aaSamw return ((uint64_t)smb_dr_get_int64(ctx)); 250da6c28aaSamw } 251da6c28aaSamw 252da6c28aaSamw 253da6c28aaSamw void 254da6c28aaSamw smb_dr_put_int64(smb_dr_ctx_t *ctx, int64_t num) 255da6c28aaSamw { 256da6c28aaSamw if (ctx->status == 0) { 257da6c28aaSamw if (ctx->ptr + sizeof (int64_t) <= ctx->end_ptr) { 258da6c28aaSamw (void) memcpy(ctx->ptr, &num, sizeof (int64_t)); 259da6c28aaSamw ctx->ptr += sizeof (int64_t); 260*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 261da6c28aaSamw ctx->status = ENOSPC; 262*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 263da6c28aaSamw } 264da6c28aaSamw } 265da6c28aaSamw 266da6c28aaSamw void 267da6c28aaSamw smb_dr_put_uint64(smb_dr_ctx_t *ctx, uint64_t num) 268da6c28aaSamw { 269da6c28aaSamw smb_dr_put_int64(ctx, (int64_t)num); 270da6c28aaSamw } 271da6c28aaSamw 272da6c28aaSamw void 273da6c28aaSamw smb_dr_put_short(smb_dr_ctx_t *ctx, short num) 274da6c28aaSamw { 275da6c28aaSamw if (ctx->status == 0) { 276da6c28aaSamw if (ctx->ptr + sizeof (short) <= ctx->end_ptr) { 277da6c28aaSamw (void) memcpy(ctx->ptr, &num, sizeof (short)); 278da6c28aaSamw ctx->ptr += sizeof (short); 279*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 280da6c28aaSamw ctx->status = ENOSPC; 281*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 282da6c28aaSamw } 283da6c28aaSamw } 284da6c28aaSamw 285da6c28aaSamw short 286da6c28aaSamw smb_dr_get_short(smb_dr_ctx_t *ctx) 287da6c28aaSamw { 288da6c28aaSamw short num = 0; 289da6c28aaSamw if (ctx->status == 0) { 290da6c28aaSamw if (ctx->ptr + sizeof (short) <= ctx->end_ptr) { 291da6c28aaSamw (void) memcpy(&num, ctx->ptr, sizeof (short)); 292da6c28aaSamw ctx->ptr += sizeof (short); 293*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 294da6c28aaSamw ctx->status = ENOSPC; 295*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 296da6c28aaSamw } 297da6c28aaSamw return (num); 298da6c28aaSamw } 299da6c28aaSamw 300da6c28aaSamw void 301da6c28aaSamw smb_dr_put_ushort(smb_dr_ctx_t *ctx, unsigned short num) 302da6c28aaSamw { 303da6c28aaSamw smb_dr_put_short(ctx, (short)num); 304da6c28aaSamw } 305da6c28aaSamw 306da6c28aaSamw unsigned short 307da6c28aaSamw smb_dr_get_ushort(smb_dr_ctx_t *ctx) 308da6c28aaSamw { 309da6c28aaSamw return ((unsigned short)smb_dr_get_short(ctx)); 310da6c28aaSamw } 311da6c28aaSamw 312da6c28aaSamw void 313da6c28aaSamw smb_dr_put_word(smb_dr_ctx_t *ctx, WORD num) 314da6c28aaSamw { 315da6c28aaSamw smb_dr_put_ushort(ctx, num); 316da6c28aaSamw } 317da6c28aaSamw 318da6c28aaSamw WORD 319da6c28aaSamw smb_dr_get_word(smb_dr_ctx_t *ctx) 320da6c28aaSamw { 321da6c28aaSamw return (smb_dr_get_ushort(ctx)); 322da6c28aaSamw } 323da6c28aaSamw 324da6c28aaSamw void 325da6c28aaSamw smb_dr_put_BYTE(smb_dr_ctx_t *ctx, BYTE byte) 326da6c28aaSamw { 327da6c28aaSamw if (ctx->status == 0) { 328da6c28aaSamw if (ctx->ptr + sizeof (BYTE) <= ctx->end_ptr) { 329da6c28aaSamw (void) memcpy(ctx->ptr, &byte, sizeof (BYTE)); 330da6c28aaSamw ctx->ptr += sizeof (BYTE); 331*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 332da6c28aaSamw ctx->status = ENOSPC; 333*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 334da6c28aaSamw } 335da6c28aaSamw } 336da6c28aaSamw 337da6c28aaSamw BYTE 338da6c28aaSamw smb_dr_get_BYTE(smb_dr_ctx_t *ctx) 339da6c28aaSamw { 340da6c28aaSamw BYTE byte = 0; 341da6c28aaSamw if (ctx->status == 0) { 342da6c28aaSamw if (ctx->ptr + sizeof (BYTE) <= ctx->end_ptr) { 343da6c28aaSamw (void) memcpy(&byte, ctx->ptr, sizeof (BYTE)); 344da6c28aaSamw ctx->ptr += sizeof (BYTE); 345*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 346da6c28aaSamw ctx->status = ENOSPC; 347*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 348da6c28aaSamw } 349da6c28aaSamw return (byte); 350da6c28aaSamw } 351da6c28aaSamw 352da6c28aaSamw void 353da6c28aaSamw smb_dr_put_buf(smb_dr_ctx_t *ctx, unsigned char *start, int len) 354da6c28aaSamw { 355da6c28aaSamw smb_dr_put_int32(ctx, len); 356da6c28aaSamw if (ctx->status == 0) { 357da6c28aaSamw if (ctx->ptr + len <= ctx->end_ptr) { 358da6c28aaSamw (void) memcpy(ctx->ptr, start, len); 359da6c28aaSamw ctx->ptr += len; 360*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 361da6c28aaSamw ctx->status = ENOSPC; 362*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 363da6c28aaSamw } 364da6c28aaSamw } 365da6c28aaSamw 366da6c28aaSamw int 367da6c28aaSamw smb_dr_get_buf(smb_dr_ctx_t *ctx, unsigned char *buf, int bufsize) 368da6c28aaSamw { 369da6c28aaSamw int len = -1; 370da6c28aaSamw 371da6c28aaSamw if (!buf) 372da6c28aaSamw return (-1); 373da6c28aaSamw 374da6c28aaSamw len = smb_dr_get_int32(ctx); 375da6c28aaSamw if (ctx->status == 0) { 376da6c28aaSamw if (bufsize < len) { 377da6c28aaSamw ctx->status = ENOSPC; 378da6c28aaSamw return (-2); 379da6c28aaSamw } 380da6c28aaSamw 381da6c28aaSamw if (ctx->ptr + len <= ctx->end_ptr) { 382da6c28aaSamw (void) memcpy(buf, ctx->ptr, len); 383da6c28aaSamw ctx->ptr += len; 384da6c28aaSamw } else { 385da6c28aaSamw ctx->status = ENOSPC; 386da6c28aaSamw return (-3); 387da6c28aaSamw } 388da6c28aaSamw } 389da6c28aaSamw 390da6c28aaSamw return (len); 391da6c28aaSamw } 392*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 393*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void 394*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_share(smb_dr_ctx_t *ctx, smb_share_t *si) 395*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 396*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (ctx->status == 0) { 397*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (smb_dr_get_int32(ctx)) { 398*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States (void) memcpy(si, ctx->ptr, sizeof (smb_share_t)); 399*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States ctx->ptr += sizeof (smb_share_t); 400*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 401*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States bzero(si, sizeof (smb_share_t)); 402*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 403*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 404*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States bzero(si, sizeof (smb_share_t)); 405*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 406*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 407*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 408*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void 409*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_share(smb_dr_ctx_t *ctx, smb_share_t *si) 410*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 411*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (si) { 412*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_int32(ctx, 1); 413*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (ctx->ptr + sizeof (smb_share_t) <= ctx->end_ptr) { 414*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States (void) memcpy(ctx->ptr, si, sizeof (smb_share_t)); 415*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States ctx->ptr += sizeof (smb_share_t); 416*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 417*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States ctx->status = ENOSPC; 418*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 419*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 420*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_int32(ctx, 0); 421*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 422*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 423