root/source3/libsmb/clistr.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. clistr_push_fn
  2. clistr_pull_fn
  3. clistr_pull_talloc_fn
  4. clistr_align_out
  5. clistr_align_in

   1 /* 
   2    Unix SMB/CIFS implementation.
   3    client string routines
   4    Copyright (C) Andrew Tridgell 2001
   5    Copyright (C) Andrew Bartlett <abartlet@samba.org> 2003
   6 
   7    This program is free software; you can redistribute it and/or modify
   8    it under the terms of the GNU General Public License as published by
   9    the Free Software Foundation; either version 3 of the License, or
  10    (at your option) any later version.
  11    
  12    This program is distributed in the hope that it will be useful,
  13    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15    GNU General Public License for more details.
  16    
  17    You should have received a copy of the GNU General Public License
  18    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19 */
  20 
  21 #include "includes.h"
  22 
  23 size_t clistr_push_fn(const char *function,
     /* [<][>][^][v][top][bottom][index][help] */
  24                         unsigned int line,
  25                         struct cli_state *cli,
  26                         void *dest,
  27                         const char *src,
  28                         int dest_len,
  29                         int flags)
  30 {
  31         size_t buf_used = PTR_DIFF(dest, cli->outbuf);
  32         if (dest_len == -1) {
  33                 if (((ptrdiff_t)dest < (ptrdiff_t)cli->outbuf) || (buf_used > cli->bufsize)) {
  34                         DEBUG(0, ("Pushing string of 'unlimited' length into non-SMB buffer!\n"));
  35                         return push_string_fn(function, line,
  36                                               cli->outbuf,
  37                                               SVAL(cli->outbuf, smb_flg2),
  38                                               dest, src, -1, flags);
  39                 }
  40                 return push_string_fn(function, line, cli->outbuf,
  41                                       SVAL(cli->outbuf, smb_flg2),
  42                                       dest, src, cli->bufsize - buf_used,
  43                                       flags);
  44         }
  45 
  46         /* 'normal' push into size-specified buffer */
  47         return push_string_fn(function, line, cli->outbuf,
  48                               SVAL(cli->outbuf, smb_flg2),
  49                               dest, src, dest_len, flags);
  50 }
  51 
  52 size_t clistr_pull_fn(const char *function,
     /* [<][>][^][v][top][bottom][index][help] */
  53                         unsigned int line,
  54                         const char *inbuf,
  55                         char *dest,
  56                         const void *src,
  57                         int dest_len,
  58                         int src_len,
  59                         int flags)
  60 {
  61         return pull_string_fn(function, line, inbuf,
  62                               SVAL(inbuf, smb_flg2), dest, src, dest_len,
  63                               src_len, flags);
  64 }
  65 
  66 size_t clistr_pull_talloc_fn(const char *function,
     /* [<][>][^][v][top][bottom][index][help] */
  67                                 unsigned int line,
  68                                 TALLOC_CTX *ctx,
  69                                 const char *inbuf,
  70                                 char **pp_dest,
  71                                 const void *src,
  72                                 int src_len,
  73                                 int flags)
  74 {
  75         return pull_string_talloc_fn(function,
  76                                         line,
  77                                         ctx,
  78                                         inbuf,
  79                                         SVAL(inbuf, smb_flg2),
  80                                         pp_dest,
  81                                         src,
  82                                         src_len,
  83                                         flags);
  84 }
  85 
  86 size_t clistr_align_out(struct cli_state *cli, const void *p, int flags)
     /* [<][>][^][v][top][bottom][index][help] */
  87 {
  88         return align_string(cli->outbuf, (const char *)p, flags);
  89 }
  90 
  91 size_t clistr_align_in(struct cli_state *cli, const void *p, int flags)
     /* [<][>][^][v][top][bottom][index][help] */
  92 {
  93         return align_string(cli->inbuf, (const char *)p, flags);
  94 }

/* [<][>][^][v][top][bottom][index][help] */