mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Merge branch 'master' of git://git.samba.org/samba into convenience
This commit is contained in:
commit
4903d20c21
@ -29,7 +29,6 @@
|
||||
|
||||
#include <tevent.h>
|
||||
#include <stdbool.h>
|
||||
#include "tevent_util.h"
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
@ -54,7 +53,8 @@ static PyObject *py_backend_list(PyObject *self)
|
||||
PyObject *ret;
|
||||
int i, len;
|
||||
|
||||
len = ev_str_list_length(backends);
|
||||
for (len = 0; backends[len]; len++);
|
||||
|
||||
ret = PyList_New(len);
|
||||
for (i = 0; i < len; i++)
|
||||
PyList_SetItem(ret, i, PyString_FromString(backends[i]));
|
||||
|
100
lib/util/util.c
100
lib/util/util.c
@ -836,4 +836,104 @@ _PUBLIC_ size_t utf16_len_n(const void *src, size_t n)
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -204,6 +204,21 @@ _PUBLIC_ void display_set_stderr(void);
|
||||
|
||||
/* 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.
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
/**
|
||||
* @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.
|
||||
*
|
||||
|
@ -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)
|
||||
{
|
||||
uint32 jobid;
|
||||
fstring sharename;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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",
|
||||
(unsigned int)fsp->rap_print_jobid ));
|
||||
return;
|
||||
|
@ -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) )
|
||||
{
|
||||
struct rap_jobid_key *jinfo = (struct rap_jobid_key*)data.dptr;
|
||||
if (sharename != NULL) {
|
||||
fstrcpy( sharename, jinfo->sharename );
|
||||
}
|
||||
*pjobid = jinfo->jobid;
|
||||
DEBUG(10,("rap_to_pjobid: jobid %u maps to RAP jobid %u\n",
|
||||
(unsigned int)*pjobid, (unsigned int)rap_jobid));
|
||||
|
@ -256,10 +256,9 @@ ssize_t write_file(struct smb_request *req,
|
||||
int write_path = -1;
|
||||
|
||||
if (fsp->print_file) {
|
||||
fstring sharename;
|
||||
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",
|
||||
(unsigned int)fsp->rap_print_jobid ));
|
||||
errno = EBADF;
|
||||
|
Loading…
Reference in New Issue
Block a user