summaryrefslogtreecommitdiff
path: root/source3/lib/util.c
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>1997-10-04 16:51:43 +0000
committerLuke Leighton <lkcl@samba.org>1997-10-04 16:51:43 +0000
commit07cc8fd8e8edd58110800f3b6b7aaec94687b579 (patch)
tree3a84c01129db95ba31803aebf9552840df5248fa /source3/lib/util.c
parenta193401384a0e861c1857d256963c9178644c301 (diff)
downloadsamba-07cc8fd8e8edd58110800f3b6b7aaec94687b579.tar.gz
samba-07cc8fd8e8edd58110800f3b6b7aaec94687b579.tar.bz2
samba-07cc8fd8e8edd58110800f3b6b7aaec94687b579.zip
proto.h:
- recreated, as usual. smb.h: - added RPC_HDR structure - the 18 byte MSRPC header smbparse.c: - added smb_io_rpc_hdr() function to read/write the RPC_HDR structure. util.c: - added align2, align4, align_offset functions. - added skip_unicode_string, unistrcpy, unistrncpy functions. - modified unistrcpy and unistrncpy to return the number of unicode characters returned, effectively making skip_unicode_string redundant. (This used to be commit b0ad811cda3dcffed5b24104229813cdb17b014f)
Diffstat (limited to 'source3/lib/util.c')
-rw-r--r--source3/lib/util.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 01e2dae154..c5cfdd99f7 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -4182,6 +4182,80 @@ enum remote_arch_types get_remote_arch()
return ra_type;
}
+
+/*******************************************************************
+skip past some unicode strings in a buffer
+********************************************************************/
+char *skip_unicode_string(char *buf,int n)
+{
+ while (n--)
+ {
+ while (*buf)
+ buf += 2;
+ buf += 2;
+ }
+ return(buf);
+}
+
+/*******************************************************************
+Return a ascii version of a unicode string
+Hack alert: uses fixed buffer and only handles ascii strings
+********************************************************************/
+#define MAXUNI 1024
+char *unistr(char *buf)
+{
+ static char lbufs[8][MAXUNI];
+ static int nexti;
+ char *lbuf = lbufs[nexti];
+ char *p;
+ nexti = (nexti+1)%8;
+ for (p = lbuf; *buf && p -lbuf < MAXUNI-2; p++, buf += 2)
+ *p = *buf;
+ *p = 0;
+ return lbuf;
+}
+
+/*******************************************************************
+strncpy for unicode strings
+********************************************************************/
+int unistrncpy(char *dst, char *src, int len)
+{
+ int num_wchars = 0;
+
+ while (*src && len > 0)
+ {
+ *dst++ = *src++;
+ *dst++ = *src++;
+ len--;
+ num_wchars++;
+ }
+ *dst++ = 0;
+ *dst++ = 0;
+
+ return num_wchars;
+}
+
+
+/*******************************************************************
+strcpy for unicode strings. returns length (in num of wide chars)
+********************************************************************/
+int unistrcpy(char *dst, char *src)
+{
+ int num_wchars = 0;
+
+ while (*src)
+ {
+ *dst++ = *src++;
+ *dst++ = *src++;
+ num_wchars++;
+ }
+ *dst++ = 0;
+ *dst++ = 0;
+
+ return num_wchars;
+}
+
+
/*******************************************************************
safe string copy into a fstring
********************************************************************/
@@ -4231,3 +4305,42 @@ void pstrcpy(char *dest, char *src)
strlen(src)));
}
}
+
+
+/*******************************************************************
+align a pointer to a multiple of 4 bytes
+********************************************************************/
+char *align4(char *q, char *base)
+{
+ if ((q - base) & 3)
+ {
+ q += 4 - ((q - base) & 3);
+ }
+ return q;
+}
+
+/*******************************************************************
+align a pointer to a multiple of 2 bytes
+********************************************************************/
+char *align2(char *q, char *base)
+{
+ if ((q - base) & 1)
+ {
+ q++;
+ }
+ return q;
+}
+
+/*******************************************************************
+align a pointer to a multiple of align_offset bytes. looks like it
+will work for offsets of 0, 2 and 4...
+********************************************************************/
+char *align_offset(char *q, char *base, int align_offset)
+{
+ if (align_offset != 0 && ((q - base) & (align_offset-1)))
+ {
+ q += align_offset - ((q - base) & (align_offset));
+ }
+ return q;
+}
+