Insure caught the fact that PTRDIFFs were being done between two unrelated
authorJeremy Allison <jra@samba.org>
Mon, 2 Jul 2001 00:33:15 +0000 (00:33 +0000)
committerJeremy Allison <jra@samba.org>
Mon, 2 Jul 2001 00:33:15 +0000 (00:33 +0000)
pointers.
Jeremy.
(This used to be commit 15c64199cb29e2fca6ee7353673dbb3f962e0e24)

source3/libsmb/clifile.c
source3/libsmb/clistr.c

index 42454b306f4728701c1fd3acfe3247f6699d502f..2c4eef9bbe1e8527eabe3ec595a73d5919b51105 100644 (file)
@@ -243,7 +243,7 @@ int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess,
 
        p = smb_buf(cli->outbuf);
        /* this alignment and termination is critical for netapp filers. Don't change */
-       p += clistr_align(cli, p, STR_CONVERT);
+       p += clistr_align_out(cli, p, STR_CONVERT);
        len = clistr_push(cli, p, fname, -1, STR_CONVERT);
        p += len;
        SSVAL(cli->outbuf,smb_ntcreate_NameLength, len);
index 762a24c22cacf2afbaa2441dd34d7a684e5a3988..6dd3b751b484677034e7c0a08d9aca3c2149fc66 100644 (file)
@@ -50,7 +50,7 @@ int clistr_push(struct cli_state *cli, void *dest, const char *src, int dest_len
                dest_len = sizeof(pstring);
        }
 
-       if (clistr_align(cli, dest, flags)) {
+       if (clistr_align_out(cli, dest, flags)) {
                *(char *)dest = 0;
                dest = (void *)((char *)dest + 1);
                dest_len--;
@@ -101,7 +101,7 @@ int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len
                dest_len = sizeof(pstring);
        }
 
-       if (clistr_align(cli, src, flags)) {
+       if (clistr_align_in(cli, src, flags)) {
                src = (const void *)((const char *)src + 1);
                if (src_len > 0) src_len--;
        }
@@ -146,8 +146,20 @@ return an alignment of either 0 or 1
 if unicode is not negotiated then return 0
 otherwise return 1 if offset is off
 ****************************************************************************/
-int clistr_align(struct cli_state *cli, const void *p, int flags)
+static int clistr_align(struct cli_state *cli, char *buf, const void *p, int flags)
 {
        if ((flags & STR_NOALIGN) || !UNICODE_FLAG(cli, flags)) return 0;
-       return PTR_DIFF(p, cli->outbuf) & 1;
+       return PTR_DIFF(p, buf) & 1;
 }
+
+int clistr_align_out(struct cli_state *cli, const void *p, int flags)
+{
+       return clistr_align(cli, cli->outbuf, p, flags);
+}
+
+int clistr_align_in(struct cli_state *cli, const void *p, int flags)
+{
+       return clistr_align(cli, cli->inbuf, p, flags);
+}
+
+