1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

Merge branch 'master' of git://git.samba.org/samba into convenience

This commit is contained in:
Jelmer Vernooij 2009-03-01 16:41:57 +01:00
commit 4903d20c21
7 changed files with 122 additions and 119 deletions

View File

@ -29,7 +29,6 @@
#include <tevent.h> #include <tevent.h>
#include <stdbool.h> #include <stdbool.h>
#include "tevent_util.h"
typedef struct { typedef struct {
PyObject_HEAD PyObject_HEAD
@ -54,7 +53,8 @@ static PyObject *py_backend_list(PyObject *self)
PyObject *ret; PyObject *ret;
int i, len; int i, len;
len = ev_str_list_length(backends); for (len = 0; backends[len]; len++);
ret = PyList_New(len); ret = PyList_New(len);
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
PyList_SetItem(ret, i, PyString_FromString(backends[i])); PyList_SetItem(ret, i, PyString_FromString(backends[i]));

View File

@ -836,4 +836,104 @@ _PUBLIC_ size_t utf16_len_n(const void *src, size_t n)
return len; return len;
} }
/**
* @file
* @brief String utilities.
**/
static bool next_token_internal_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep,
bool ltrim)
{
char *s;
char *saved_s;
char *pbuf;
bool quoted;
size_t len=1;
*pp_buff = NULL;
if (!ptr) {
return(false);
}
s = (char *)*ptr;
/* default to simple separators */
if (!sep) {
sep = " \t\n\r";
}
/* find the first non sep char, if left-trimming is requested */
if (ltrim) {
while (*s && strchr_m(sep,*s)) {
s++;
}
}
/* nothing left? */
if (!*s) {
return false;
}
/* When restarting we need to go from here. */
saved_s = s;
/* Work out the length needed. */
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if (*s == '\"') {
quoted = !quoted;
} else {
len++;
}
}
/* We started with len = 1 so we have space for the nul. */
*pp_buff = talloc_array(ctx, char, len);
if (!*pp_buff) {
return false;
}
/* copy over the token */
pbuf = *pp_buff;
s = saved_s;
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if ( *s == '\"' ) {
quoted = !quoted;
} else {
*pbuf++ = *s;
}
}
*ptr = (*s) ? s+1 : s;
*pbuf = 0;
return true;
}
bool next_token_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
}
/*
* Get the next token from a string, return false if none found. Handles
* double-quotes. This version does not trim leading separator characters
* before looking for a token.
*/
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
}

View File

@ -204,6 +204,21 @@ _PUBLIC_ void display_set_stderr(void);
/* The following definitions come from lib/util/util_str.c */ /* The following definitions come from lib/util/util_str.c */
bool next_token_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep);
/**
* Get the next token from a string, return false if none found. Handles
* double-quotes. This version does not trim leading separator characters
* before looking for a token.
*/
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep);
/** /**
Trim the specified elements off the front and back of a string. Trim the specified elements off the front and back of a string.

View File

@ -35,118 +35,6 @@ const char toupper_ascii_fast_table[128] = {
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f
}; };
/**
* @file
* @brief String utilities.
**/
static bool next_token_internal_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep,
bool ltrim)
{
char *s;
char *saved_s;
char *pbuf;
bool quoted;
size_t len=1;
*pp_buff = NULL;
if (!ptr) {
return(false);
}
s = (char *)*ptr;
/* default to simple separators */
if (!sep) {
sep = " \t\n\r";
}
/* find the first non sep char, if left-trimming is requested */
if (ltrim) {
while (*s && strchr_m(sep,*s)) {
s++;
}
}
/* nothing left? */
if (!*s) {
return false;
}
/* When restarting we need to go from here. */
saved_s = s;
/* Work out the length needed. */
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if (*s == '\"') {
quoted = !quoted;
} else {
len++;
}
}
/* We started with len = 1 so we have space for the nul. */
*pp_buff = TALLOC_ARRAY(ctx, char, len);
if (!*pp_buff) {
return false;
}
/* copy over the token */
pbuf = *pp_buff;
s = saved_s;
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if ( *s == '\"' ) {
quoted = !quoted;
} else {
*pbuf++ = *s;
}
}
*ptr = (*s) ? s+1 : s;
*pbuf = 0;
return true;
}
#if 0
/*
* Get the next token from a string, return false if none found. Handles
* double-quotes. This version trims leading separator characters before
* looking for a token.
*/
bool next_token(const char **ptr, char *buff, const char *sep, size_t bufsize)
{
return next_token_internal(ptr, buff, sep, bufsize, true);
}
#endif
bool next_token_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
}
/*
* Get the next token from a string, return false if none found. Handles
* double-quotes. This version does not trim leading separator characters
* before looking for a token.
*/
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
}
/** /**
* Case insensitive string compararison. * Case insensitive string compararison.
* *

View File

@ -88,7 +88,6 @@ NTSTATUS print_fsp_open(struct smb_request *req, connection_struct *conn,
void print_fsp_end(files_struct *fsp, enum file_close_type close_type) void print_fsp_end(files_struct *fsp, enum file_close_type close_type)
{ {
uint32 jobid; uint32 jobid;
fstring sharename;
if (fsp->fh->private_options & FILE_DELETE_ON_CLOSE) { if (fsp->fh->private_options & FILE_DELETE_ON_CLOSE) {
/* /*
@ -102,7 +101,7 @@ void print_fsp_end(files_struct *fsp, enum file_close_type close_type)
string_free(&fsp->fsp_name); string_free(&fsp->fsp_name);
} }
if (!rap_to_pjobid(fsp->rap_print_jobid, sharename, &jobid)) { if (!rap_to_pjobid(fsp->rap_print_jobid, NULL, &jobid)) {
DEBUG(3,("print_fsp_end: Unable to convert RAP jobid %u to print jobid.\n", DEBUG(3,("print_fsp_end: Unable to convert RAP jobid %u to print jobid.\n",
(unsigned int)fsp->rap_print_jobid )); (unsigned int)fsp->rap_print_jobid ));
return; return;

View File

@ -117,7 +117,9 @@ bool rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) ) if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) )
{ {
struct rap_jobid_key *jinfo = (struct rap_jobid_key*)data.dptr; struct rap_jobid_key *jinfo = (struct rap_jobid_key*)data.dptr;
if (sharename != NULL) {
fstrcpy( sharename, jinfo->sharename ); fstrcpy( sharename, jinfo->sharename );
}
*pjobid = jinfo->jobid; *pjobid = jinfo->jobid;
DEBUG(10,("rap_to_pjobid: jobid %u maps to RAP jobid %u\n", DEBUG(10,("rap_to_pjobid: jobid %u maps to RAP jobid %u\n",
(unsigned int)*pjobid, (unsigned int)rap_jobid)); (unsigned int)*pjobid, (unsigned int)rap_jobid));

View File

@ -256,10 +256,9 @@ ssize_t write_file(struct smb_request *req,
int write_path = -1; int write_path = -1;
if (fsp->print_file) { if (fsp->print_file) {
fstring sharename;
uint32 jobid; uint32 jobid;
if (!rap_to_pjobid(fsp->rap_print_jobid, sharename, &jobid)) { if (!rap_to_pjobid(fsp->rap_print_jobid, NULL, &jobid)) {
DEBUG(3,("write_file: Unable to map RAP jobid %u to jobid.\n", DEBUG(3,("write_file: Unable to map RAP jobid %u to jobid.\n",
(unsigned int)fsp->rap_print_jobid )); (unsigned int)fsp->rap_print_jobid ));
errno = EBADF; errno = EBADF;