s3: Factor out parse_streams_blob
authorVolker Lendecke <vl@samba.org>
Mon, 26 Jul 2010 08:08:38 +0000 (10:08 +0200)
committerVolker Lendecke <vl@samba.org>
Mon, 26 Jul 2010 21:01:37 +0000 (23:01 +0200)
source3/libsmb/clirap.c

index b1303f68d5e4a11d274e00e6ecc8909d2a3252ec..f94c16d55f9f40cb321a71771301574adc5edb0a 100644 (file)
@@ -900,6 +900,11 @@ NTSTATUS cli_qpathinfo2(struct cli_state *cli, const char *fname,
  Get the stream info
 ****************************************************************************/
 
+static bool parse_streams_blob(TALLOC_CTX *mem_ctx, const uint8_t *data,
+                              size_t data_len,
+                              unsigned int *pnum_streams,
+                              struct stream_struct **pstreams);
+
 bool cli_qpathinfo_streams(struct cli_state *cli, const char *fname,
                           TALLOC_CTX *mem_ctx,
                           unsigned int *pnum_streams,
@@ -911,10 +916,8 @@ bool cli_qpathinfo_streams(struct cli_state *cli, const char *fname,
        char *param;
        char *rparam=NULL, *rdata=NULL;
        char *p;
-       unsigned int num_streams;
-       struct stream_struct *streams;
-       unsigned int ofs;
        size_t namelen = 2*(strlen(fname)+1);
+       bool ret;
 
        param = SMB_MALLOC_ARRAY(char, 6+namelen+2);
        if (param == NULL) {
@@ -949,6 +952,22 @@ bool cli_qpathinfo_streams(struct cli_state *cli, const char *fname,
                return false;
        }
 
+       ret = parse_streams_blob(mem_ctx, (uint8_t *)rdata, data_len,
+                                pnum_streams, pstreams);
+       SAFE_FREE(rdata);
+       SAFE_FREE(rparam);
+       return ret;
+}
+
+static bool parse_streams_blob(TALLOC_CTX *mem_ctx, const uint8_t *rdata,
+                              size_t data_len,
+                              unsigned int *pnum_streams,
+                              struct stream_struct **pstreams)
+{
+       unsigned int num_streams;
+       struct stream_struct *streams;
+       unsigned int ofs;
+
        num_streams = 0;
        streams = NULL;
        ofs = 0;
@@ -1013,17 +1032,12 @@ bool cli_qpathinfo_streams(struct cli_state *cli, const char *fname,
                ofs += len;
        }
 
-       SAFE_FREE(rdata);
-       SAFE_FREE(rparam);
-
        *pnum_streams = num_streams;
        *pstreams = streams;
        return true;
 
  fail:
        TALLOC_FREE(streams);
-       SAFE_FREE(rdata);
-       SAFE_FREE(rparam);
        return false;
 }