First set of speed improvements from Ying Chen <ying@almaden.ibm.com>.
authorJeremy Allison <jra@samba.org>
Tue, 25 Jan 2000 22:57:51 +0000 (22:57 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 25 Jan 2000 22:57:51 +0000 (22:57 +0000)
Inline several commonly used functions as macros.
Jeremy.

source/include/proto.h
source/include/smb.h
source/lib/util.c
source/smbd/blocking.c
source/smbd/dir.c
source/smbd/nttrans.c
source/smbd/process.c

index f78f19cb40129d4e48b9c963463a74ce1dae6b7b..aa6e4104c1086311cb60e77fb26dbcca5aabad67 100644 (file)
@@ -269,7 +269,6 @@ char *tmpdir(void);
 BOOL in_group(gid_t group, gid_t current_gid, int ngroups, gid_t *groups);
 char *Atoic(char *p, int *n, char *c);
 char *get_numlist(char *p, uint32 **num, int *count);
-void putip(void *dest,void *src);
 char *dns_to_netbios_name(char *dns_name);
 int name_mangle( char *In, char *Out, char name_type );
 BOOL file_exist(char *fname,SMB_STRUCT_STAT *sbuf);
@@ -278,16 +277,9 @@ time_t file_modtime(char *fname);
 BOOL directory_exist(char *dname,SMB_STRUCT_STAT *st);
 SMB_OFF_T get_file_size(char *file_name);
 char *attrib_string(uint16 mode);
-void unix_format(char *fname);
-void dos_format(char *fname);
 void show_msg(char *buf);
-int smb_len(char *buf);
-void _smb_setlen(char *buf,int len);
 void smb_setlen(char *buf,int len);
 int set_message(char *buf,int num_words,int num_bytes,BOOL zero);
-int smb_buflen(char *buf);
-char *smb_buf(char *buf);
-int smb_offset(char *p,char *buf);
 void dos_clean_name(char *s);
 void unix_clean_name(char *s);
 BOOL reduce_name(char *s,char *dir,BOOL widelinks);
@@ -295,20 +287,17 @@ void expand_mask(char *Mask,BOOL doext);
 void make_dir_struct(char *buf,char *mask,char *fname,SMB_OFF_T size,int mode,time_t date);
 void close_low_fds(void);
 int set_blocking(int fd, BOOL set);
-int TvalDiff(struct timeval *tvalold,struct timeval *tvalnew);
 SMB_OFF_T transfer_file(int infd,int outfd,SMB_OFF_T n,char *header,int headlen,int align);
 int name_extract(char *buf,int ofs,char *name);
 int name_len(char *s1);
 void msleep(int t);
 BOOL unix_do_match(char *str, char *regexp, BOOL case_sig);
-BOOL exact_match(char *str, char *regexp, BOOL case_sig);
 BOOL mask_match(char *str, char *regexp, BOOL case_sig, BOOL trans2);
 void become_daemon(void);
 BOOL yesno(char *p);
 int set_filelen(int fd, SMB_OFF_T len);
 void *Realloc(void *p,size_t size);
 BOOL get_myname(char *my_name);
-BOOL ip_equal(struct in_addr ip1,struct in_addr ip2);
 int interpret_protocol(char *str,int def);
 BOOL is_ipaddress(const char *str);
 uint32 interpret_addr(char *str);
@@ -343,7 +332,6 @@ char *tab_depth(int depth);
 int str_checksum(const char *s);
 void zero_free(void *p, size_t size);
 int set_maxfiles(int requested_max);
-void reg_get_subkey(char *full_keyname, char *key_name, char *subkey_name);
 BOOL reg_split_key(char *full_keyname, uint32 *reg_type, char *key_name);
 char *smbd_mktemp(char *template);
 void *memdup(void *p, size_t size);
@@ -2604,7 +2592,6 @@ void dptr_idlecnum(connection_struct *conn);
 void dptr_closepath(char *path,uint16 spid);
 int dptr_create(connection_struct *conn,char *path, BOOL old_handle, BOOL expect_close,uint16 spid);
 BOOL dptr_fill(char *buf1,unsigned int key);
-BOOL dptr_zero(char *buf);
 void *dptr_fetch(char *buf,int *num);
 void *dptr_fetch_lanman2(int dptr_num);
 BOOL dir_check_ftype(connection_struct *conn,int mode,SMB_STRUCT_STAT *st,int dirtype);
index 8d4a367179139949180aa124d9a96eb5b5a8de8e..58c43e76c76a385e03d8cab678a511b72d1c602a 100644 (file)
@@ -1382,6 +1382,76 @@ struct bitmap {
 /* where to find the base of the SMB packet proper */
 #define smb_base(buf) (((char *)(buf))+4)
 
+/* Extra macros added by Ying Chen at IBM - speed increase by inlining. */
+#define smb_buf(buf) (buf + smb_size + CVAL(buf,smb_wct)*2)
+#define smb_buflen(buf) (SVAL(buf,smb_vwv0 + (int)CVAL(buf, smb_wct)*2))
+
+/* Note that chain_size must be available as an extern int to this macro. */
+#define smb_offset(p,buf) (PTR_DIFF(p,buf+4) + chain_size)
+
+#define smb_len(buf) (PVAL(buf,3)|(PVAL(buf,2)<<8)|((PVAL(buf,1)&1)<<16))
+#define _smb_setlen(buf,len) buf[0] = 0; buf[1] = (len&0x10000)>>16; \
+        buf[2] = (len&0xFF00)>>8; buf[3] = len&0xFF;
+
+/*********************************************************
+* Routine to check if a given string matches exactly.
+* Case can be significant or not.
+**********************************************************/
+
+#define exact_match(str, regexp, case_sig) \
+  ((case_sig?strcmp(str,regexp):strcasecmp(str,regexp)) == 0)
+
+/*******************************************************************
+find the difference in milliseconds between two struct timeval
+values
+********************************************************************/
+
+#define TvalDiff(tvalold,tvalnew) \
+  (((tvalnew)->tv_sec - (tvalold)->tv_sec)*1000 +  \
+        ((int)(tvalnew)->tv_usec - (int)(tvalold)->tv_usec)/1000)
+
+/****************************************************************************
+true if two IP addresses are equal
+****************************************************************************/
+
+#define ip_equal(ip1,ip2) ((ip1).s_addr == (ip2).s_addr)
+
+/*****************************************************************
+ splits out the last subkey of a key
+ *****************************************************************/  
+
+#define reg_get_subkey(full_keyname, key_name, subkey_name) \
+       split_at_last_component(full_keyname, key_name, '\\', subkey_name)
+
+/****************************************************************************
+ Used by dptr_zero.
+****************************************************************************/
+
+#define DPTR_MASK ((uint32)(((uint32)1)<<31))
+
+/****************************************************************************
+ Return True if the offset is at zero.
+****************************************************************************/
+
+#define dptr_zero(buf) ((IVAL(buf,1)&~DPTR_MASK) == 0)
+
+/*******************************************************************
+copy an IP address from one buffer to another
+********************************************************************/
+
+#define putip(dest,src) memcpy(dest,src,4)
+
+/****************************************************************************
+ Make a filename into unix format.
+****************************************************************************/
+
+#define unix_format(fname) string_replace(fname,'\\','/')
+
+/****************************************************************************
+ Make a file into DOS format.
+****************************************************************************/
+
+#define dos_format(fname) string_replace(fname,'/','\\')
 
 /* we don't allow server strings to be longer than 48 characters as
    otherwise NT will not honour the announce packets */
@@ -1640,6 +1710,11 @@ enum ssl_version_enum {SMB_SSL_V2,SMB_SSL_V3,SMB_SSL_V23,SMB_SSL_TLS1};
 extern int unix_ERR_class;
 extern int unix_ERR_code;
 
+/*
+ * Used in chaining code.
+ */
+extern int chain_size;
+
 /*
  * Map the Core and Extended Oplock requesst bits down
  * to common bits (EXCLUSIVE_OPLOCK & BATCH_OPLOCK).
index 001baa0e3e333b3c13d668dcf428541dbbcb2b15..0db12e92c6c186f6287ddd127d8ace1e8cedde21 100644 (file)
@@ -194,15 +194,6 @@ char *get_numlist(char *p, uint32 **num, int *count)
        return p;
 }
 
-/*******************************************************************
-copy an IP address from one buffer to another
-********************************************************************/
-void putip(void *dest,void *src)
-{
-  memcpy(dest,src,4);
-}
-
-
 #define TRUNCATE_NETBIOS_NAME 1
 
 /*******************************************************************
@@ -434,24 +425,6 @@ char *attrib_string(uint16 mode)
   return(attrstr);
 }
 
-
-
-/****************************************************************************
-  make a file into unix format
-****************************************************************************/
-void unix_format(char *fname)
-{
-  string_replace(fname,'\\','/');
-}
-
-/****************************************************************************
-  make a file into dos format
-****************************************************************************/
-void dos_format(char *fname)
-{
-  string_replace(fname,'/','\\');
-}
-
 /*******************************************************************
   show a smb message structure
 ********************************************************************/
@@ -496,24 +469,6 @@ void show_msg(char *buf)
 
        dump_data(10, smb_buf(buf), bcc);
 }
-/*******************************************************************
-  return the length of an smb packet
-********************************************************************/
-int smb_len(char *buf)
-{
-  return( PVAL(buf,3) | (PVAL(buf,2)<<8) | ((PVAL(buf,1)&1)<<16) );
-}
-
-/*******************************************************************
-  set the length of an smb packet
-********************************************************************/
-void _smb_setlen(char *buf,int len)
-{
-  buf[0] = 0;
-  buf[1] = (len&0x10000)>>16;
-  buf[2] = (len&0xFF00)>>8;
-  buf[3] = len&0xFF;
-}
 
 /*******************************************************************
   set the length and marker of an smb packet
@@ -541,46 +496,6 @@ int set_message(char *buf,int num_words,int num_bytes,BOOL zero)
   return (smb_size + num_words*2 + num_bytes);
 }
 
-/*******************************************************************
-return the number of smb words
-********************************************************************/
-static int smb_numwords(char *buf)
-{
-  return (CVAL(buf,smb_wct));
-}
-
-/*******************************************************************
-return the size of the smb_buf region of a message
-********************************************************************/
-int smb_buflen(char *buf)
-{
-  return(SVAL(buf,smb_vwv0 + smb_numwords(buf)*2));
-}
-
-/*******************************************************************
-  return a pointer to the smb_buf data area
-********************************************************************/
-static int smb_buf_ofs(char *buf)
-{
-  return (smb_size + CVAL(buf,smb_wct)*2);
-}
-
-/*******************************************************************
-  return a pointer to the smb_buf data area
-********************************************************************/
-char *smb_buf(char *buf)
-{
-  return (buf + smb_buf_ofs(buf));
-}
-
-/*******************************************************************
-return the SMB offset into an SMB buffer
-********************************************************************/
-int smb_offset(char *p,char *buf)
-{
-  return(PTR_DIFF(p,buf+4) + chain_size);
-}
-
 /*******************************************************************
 reduce a file name, removing .. elements.
 ********************************************************************/
@@ -796,15 +711,6 @@ static void expand_one(char *Mask,int len)
     }
 }
 
-/****************************************************************************
-parse out a directory name from a path name. Assumes dos style filenames.
-****************************************************************************/
-static void dirname_dos(char *path,char *buf)
-{
-       split_at_last_component(path, buf, '\\', NULL);
-}
-
-
 /****************************************************************************
 expand a wildcard expression, replacing *s with ?s
 ****************************************************************************/
@@ -821,7 +727,7 @@ void expand_mask(char *Mask,BOOL doext)
 
   /* parse the directory and filename */
   if (strchr(Mask,'\\'))
-    dirname_dos(Mask,dirpart);
+    split_at_last_component(Mask,dirpart,'\\',NULL);
 
   filename_dos(Mask,filepart);
 
@@ -956,19 +862,6 @@ int set_blocking(int fd, BOOL set)
 #undef FLAG_TO_SET
 }
 
-
-/*******************************************************************
-find the difference in milliseconds between two struct timeval
-values
-********************************************************************/
-int TvalDiff(struct timeval *tvalold,struct timeval *tvalnew)
-{
-  return((tvalnew->tv_sec - tvalold->tv_sec)*1000 + 
-        ((int)tvalnew->tv_usec - (int)tvalold->tv_usec)/1000);  
-}
-
-
-
 /****************************************************************************
 transfer some data between two fd's
 ****************************************************************************/
@@ -1374,16 +1267,6 @@ static BOOL do_match(char *str, char *regexp, int case_sig, BOOL win9x_semantics
   return False;
 }
 
-/*********************************************************
-* Routine to check if a given string matches exactly.
-* Case can be significant or not.
-**********************************************************/
-
-BOOL exact_match(char *str, char *regexp, BOOL case_sig)
-{
-  return ((case_sig?strcmp(str,regexp):strcasecmp(str,regexp)) == 0);
-}
-
 /*********************************************************
 * Routine to match a given string with a regexp - uses
 * simplified regexp that takes * and ? only. Case can be
@@ -1805,16 +1688,6 @@ BOOL get_myname(char *my_name)
        return(True);
 }
 
-
-/****************************************************************************
-true if two IP addresses are equal
-****************************************************************************/
-BOOL ip_equal(struct in_addr ip1,struct in_addr ip2)
-{
-       return ip1.s_addr == ip2.s_addr;
-}
-
-
 /****************************************************************************
 interpret a protocol description string, with a default
 ****************************************************************************/
@@ -3153,15 +3026,6 @@ int set_maxfiles(int requested_max)
 #endif
 }
 
-
-/*****************************************************************
- splits out the last subkey of a key
- *****************************************************************/  
-void reg_get_subkey(char *full_keyname, char *key_name, char *subkey_name)
-{
-       split_at_last_component(full_keyname, key_name, '\\', subkey_name);
-}
-
 /*****************************************************************
  splits out the start of the key (HKLM or HKU) and the rest of the key
  *****************************************************************/  
index 292eb2455eb2f32ac1a5f2b5a5389f5415842bc9..c90f475b46303a9dd929f747f2592035e4981e54 100644 (file)
@@ -22,7 +22,6 @@
 #include "includes.h"
 extern int DEBUGLEVEL;
 extern int Client;
-extern int chain_size;
 extern char *OutBuffer;
 
 /****************************************************************************
index cae6281e9144f4094bd1a30c02cd706d53730fd3..f3f261f0b2938c52be5220dd6daca72f62b6ea2a 100644 (file)
@@ -493,8 +493,6 @@ int dptr_create(connection_struct *conn,char *path, BOOL old_handle, BOOL expect
   return(dptr->dnum);
 }
 
-#define DPTR_MASK ((uint32)(((uint32)1)<<31))
-
 /****************************************************************************
  Fill the 5 byte server reserved dptr field.
 ****************************************************************************/
@@ -516,16 +514,6 @@ BOOL dptr_fill(char *buf1,unsigned int key)
   return(True);
 }
 
-
-/****************************************************************************
- Return True if the offset is at zero.
-****************************************************************************/
-
-BOOL dptr_zero(char *buf)
-{
-  return((IVAL(buf,1)&~DPTR_MASK) == 0);
-}
-
 /****************************************************************************
  Fetch the dir ptr and seek it given the 5 byte server field.
 ****************************************************************************/
index 81536156e54e03de50848d2a1951de8929948f67..f4015d50df8bc2d22658a349e6d842efa7e67988 100644 (file)
@@ -27,7 +27,6 @@ extern int Protocol;
 extern int Client;  
 extern int smb_read_error;
 extern int global_oplock_break;
-extern int chain_size;
 extern BOOL case_sensitive;
 extern BOOL case_preserve;
 extern BOOL short_case_preserve;
index d3551b96b1125d1bba4f148a633ec7e06dbae851..7d6e171d0532f1e9006bf58baed0998ad2cd23de 100644 (file)
@@ -561,7 +561,6 @@ static int construct_reply(char *inbuf,char *outbuf,int size,int bufsize)
   int type = CVAL(inbuf,smb_com);
   int outsize = 0;
   int msg_type = CVAL(inbuf,0);
-  extern int chain_size;
 
   GetTimeOfDay(&smb_last_time);
 
@@ -726,7 +725,6 @@ int chain_reply(char *inbuf,char *outbuf,int size,int bufsize)
   int outsize2;
   char inbuf_saved[smb_wct];
   char outbuf_saved[smb_wct];
-  extern int chain_size;
   int wct = CVAL(outbuf,smb_wct);
   int outsize = smb_size + 2*wct + SVAL(outbuf,smb_vwv0+2*wct);