svn commit: samba r21391 - in branches/SAMBA_4_0/source/librpc/ndr: .

metze at samba.org metze at samba.org
Fri Feb 16 15:58:56 GMT 2007


Author: metze
Date: 2007-02-16 15:58:56 +0000 (Fri, 16 Feb 2007)
New Revision: 21391

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21391

Log:
add supporting for 

uint16 size;
[relative,subcontext(0),subcontext_size(size),flag(STR_NOTERM|NDR_REMAINING)] string *string;

as 

uint16 size;
[relative,charset(UTF16)] uint8 *string[size];

isn't supported by pidl yet...

metze
Modified:
   branches/SAMBA_4_0/source/librpc/ndr/ndr_string.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/ndr/ndr_string.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/ndr/ndr_string.c	2007-02-16 15:56:24 UTC (rev 21390)
+++ branches/SAMBA_4_0/source/librpc/ndr/ndr_string.c	2007-02-16 15:58:56 UTC (rev 21391)
@@ -273,6 +273,32 @@
 		*s = as;
 		break;
 
+	case LIBNDR_FLAG_STR_NOTERM:
+		if (!(ndr->flags & LIBNDR_FLAG_REMAINING)) {
+			break;
+		}
+
+		len1 = ndr->data_size - ndr->offset;
+
+		NDR_PULL_NEED_BYTES(ndr, len1);
+		if (len1 == 0) {
+			as = talloc_strdup(ndr->current_mem_ctx, "");
+		} else {
+			ret = convert_string_talloc(ndr->current_mem_ctx,
+						    chset, CH_UNIX, 
+						    ndr->data+ndr->offset, 
+						    len1,
+						    (void **)&as);
+			if (ret == -1) {
+				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
+						      "Bad character conversion");
+			}
+		}
+		NDR_CHECK(ndr_pull_advance(ndr, len1));
+
+		*s = as;
+		break;
+
 	default:
 		return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
 				      ndr->flags & LIBNDR_STRING_FLAGS);
@@ -383,6 +409,11 @@
 	}
 
 	default:
+		if (ndr->flags & LIBNDR_FLAG_REMAINING) {
+			NDR_CHECK(ndr_push_bytes(ndr, dest, d_len));
+			break;		
+		}
+
 		return ndr_push_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
 				      ndr->flags & LIBNDR_STRING_FLAGS);
 	}



More information about the samba-cvs mailing list