1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-04 08:23:50 +03:00

More rpcclient merge issues:

* fixes some readline bugs from the merge
        * first attempt at commands (spoolenum almost works)
        * no changes to existing functions in HEAD; only additions
          of new functions.  I'll weed out what I can as I go.




--jerry
This commit is contained in:
Gerald Carter
-
parent 12e2a21e1b
commit 61d2aad5dc
16 changed files with 1471 additions and 14 deletions

View File

@@ -26,6 +26,35 @@ extern int DEBUGLEVEL;
#include "includes.h"
/*******************************************************************
search for a memory buffer that falls within the specified offset
********************************************************************/
static const prs_struct *prs_find(const prs_struct *buf, uint32 offset)
{
const prs_struct *f = NULL;
#if 0 /* comment out by JERRY */
if (buf == NULL)
return False;
f = buf;
while (f != NULL && offset >= f->end)
{
DEBUG(200, ("prs_find: next[%d..%d]\n", f->start, f->end));
f = f->next;
}
if (f != NULL)
{
DEBUG(200, ("prs_find: found [%d..%d]\n", f->start, f->end));
}
#endif
return f;
}
/*******************************************************************
dump a prs to a file
********************************************************************/
@@ -63,10 +92,10 @@ void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name)
DEBUG(5+depth, ("%s%06x %s %s\n", tab_depth(depth), ps->data_offset, fn_name, desc));
}
/*******************************************************************
Initialise a parse structure - malloc the data if requested.
********************************************************************/
BOOL prs_init(prs_struct *ps, uint32 size, uint8 align, BOOL io)
{
ZERO_STRUCTP(ps);
@@ -805,6 +834,89 @@ BOOL prs_uint32_post(char *name, prs_struct *ps, int depth, uint32 *data32,
return True;
}
/*******************************************************************
frees a memory buffer.
********************************************************************/
void prs_free_data(prs_struct *buf)
{
if (buf == NULL)
return;
if (buf->data_p != NULL)
{
free(buf->data_p);
buf->data_p = NULL;
}
buf->buffer_size = 0;
}
/*******************************************************************
reallocate a memory buffer
********************************************************************/
BOOL prs_realloc_data(prs_struct *buf, size_t new_size)
{
char *new_data;
/* prs_sma_init(); JERRY */
prs_debug(buf, 200, "prs_realloc_data - before", "prs_realloc_data");
SMB_ASSERT(((ssize_t) new_size) >= 0);
if (new_size == 0)
{
prs_free_data(buf);
return True;
}
/* new_data = sma_realloc(prs_sma_region, buf->data_p, new_size); */
new_data = realloc(buf->data_p, new_size);
if (new_data != NULL)
{
if (new_size > buf->buffer_size)
{
memset(&new_data[buf->buffer_size], 0,
new_size - buf->buffer_size);
}
buf->data_p = new_data;
buf->buffer_size = new_size;
}
else if (buf->buffer_size >= new_size)
{
DEBUG(3, ("prs_realloc_data: warning - "
"could not realloc to %d\n", new_size));
}
else
{
DEBUG(3, ("prs_realloc_data: error - "
"could not realloc to %d\n", new_size));
prs_free_data(buf);
return False;
}
prs_debug(buf, 200, "prs_realloc_data - after", "prs_realloc_data");
return True;
}
/*******************************************************************
return the memory location specified by may return NULL.
********************************************************************/
char *prs_data(const prs_struct *buf, uint32 offset)
{
buf = prs_find(buf, offset);
if (buf != NULL)
{
/* return &(buf->data[offset - buf->start]); */
return &(buf->data_p[offset]);
}
return NULL;
}
/* useful function to store a structure in rpc wire format */
int tdb_prs_store(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps)
{