updated: [0434e3d] manually merged 235_remove_g_snprintf



The following commit has been merged in the master branch:
commit 0434e3de5d20323bed8b7b2dbff74c1d00a221ec
Merge: 3410eb32290abe51e6845483ed7a3723823a768a e4a4f77ac28f064d0fd5611a1b48689594289408
Author: Enrico Weigelt, metux IT service <weigelt metux de>
Date:   Mon Feb 2 20:53:03 2009 +0100

    manually merged 235_remove_g_snprintf

diff --combined ChangeLog
index 2c39360,a54e8eb..3b5bab1
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,20 -1,7 +1,21 @@@
 +2009-02-01 Enrico Weigelt, metux ITS <weigelt metux de>
 +
 +	* src/util.c: fixed name_trunc() on NULL or empty parameters
 +	* src/achown.c: fixed unitialized var in init_chown_advanced()
 +	  (patch from andrew_b)
 +
 +2009-01-31 Enrico Weigelt, metux ITS <weigelt metux de>, Patrick Winnertz <winnie debian org>, Slava Zanko <slavazanko gmail com>, Sergei Trofimovich  <slyfox inbox ru>
 +
 +	* edit/editcmd.c, mhl/escape.h, mhl/string.h, mhl/types.h, src/Makefile.am,
 +	* src/boxes.c, src/command.c, src/complete.c, src/complete.h, src/file.c,
 +	* src/find.c, src/main.c, src/panelize.c, src/util.c, src/utilunix.c,
 +	* src/widget.c, src/widget.h, src/wtools.c, vfs/fish.c:
 +	  fixed shell escaping issues in commandline completion engine
 +
  2009-01-31 Enrico Weigelt, metux ITS <weigelt metux de>
  
  	* replaced buggy concat_dir_and_file() by mhl_str_dir_plus_file() (in mhl/string.h)
+ 	* replaced g_snprintf() by snprintf()
  
  2009-01-30 Enrico Weigelt, metux ITS <weigelt metux de>
  
@@@ -31,11 -18,6 +32,11 @@@
  	  This solves "strange" rename cases, when copying/moving is performed into
  	  deleted directory.
  
 +2009-01-27 Enrico Weigelt, metux ITS <weigelt metux de>
 +
 +	* mhl/escape.h, src/complete.c, vfs/fish.c: introduced new type 
 +	  SHELL_ESCAPED_STR for more type safety
 +
  2009-01-27 Enrico Weigelt, metux IT service <weigelt metux de>
  
  	* mhl/escape.h, mhl/string.h: fixed comments to use /* ... */
diff --combined edit/editcmd.c
index 07286b6,792322d..7dae88a
--- a/edit/editcmd.c
+++ b/edit/editcmd.c
@@@ -626,7 -626,7 +626,7 @@@ edit_raw_key_query (const char *heading
  		    NULL, heading,
  		    DLG_CENTER | DLG_TRYUP | DLG_WANT_TAB);
      add_widget (raw_dlg,
 -		input_new (3 - cancel, w - 5, INPUT_COLOR, 2, "", 0));
 +		input_new (3 - cancel, w - 5, INPUT_COLOR, 2, "", 0, INPUT_COMPLETE_DEFAULT));
      add_widget (raw_dlg, label_new (3 - cancel, 2, query));
      if (cancel)
  	add_widget (raw_dlg,
@@@ -2337,7 -2337,7 +2337,7 @@@ edit_goto_cmd (WEdit *edit
      char *error;
      char s[32];
  
-     g_snprintf (s, sizeof (s), "%ld", line);
+     snprintf (s, sizeof (s), "%ld", line);
      f = input_dialog (_(" Goto line "), _(" Enter line: "), MC_HISTORY_EDIT_GOTO_LINE,
  		      line ? s : "");
      if (!f)
diff --combined src/boxes.c
index 48ac3a9,23030ec..a46aeec
--- a/src/boxes.c
+++ b/src/boxes.c
@@@ -197,7 -197,7 +197,7 @@@ display_init (int radio_sel, char *init
  
      status =
  	input_new (10, 9, INPUT_COLOR, DISPLAY_X - 14, _status[radio_sel],
 -		   "mini-input");
 +		   "mini-input", INPUT_COMPLETE_DEFAULT);
      add_widget (dd, status);
      input_set_point (status, 0);
  
@@@ -207,7 -207,7 +207,7 @@@
  
      user =
  	input_new (7, 9, INPUT_COLOR, DISPLAY_X - 14, init_text,
 -		   "user-fmt-input");
 +		   "user-fmt-input", INPUT_COMPLETE_DEFAULT);
      add_widget (dd, user);
      input_set_point (user, 0);
  
@@@ -571,7 -571,7 +571,7 @@@ sel_charset_button (int action
  	: codepages[new_display_codepage].name;
  
      /* avoid strange bug with label repainting */
-     g_snprintf (buf, sizeof (buf), "%-27s", cpname);
+     snprintf (buf, sizeof (buf), "%-27s", cpname);
      label_set_text (cplabel, buf);
      return 0;
  }
@@@ -772,12 -772,12 +772,12 @@@ configure_vfs (void
      ret_use_netrc = use_netrc;
      ret_ftpfs_use_passive_connections = ftpfs_use_passive_connections;
      ret_ftpfs_use_passive_connections_over_proxy = ftpfs_use_passive_connections_over_proxy;
-     g_snprintf(buffer3, sizeof (buffer3), "%i", ftpfs_directory_timeout);
+     snprintf(buffer3, sizeof (buffer3), "%i", ftpfs_directory_timeout);
      confvfs_widgets[8].text = buffer3;
      confvfs_widgets[10].text = ftpfs_anonymous_passwd;
      confvfs_widgets[5].text = ftpfs_proxy_host;
  #endif
-     g_snprintf (buffer2, sizeof (buffer2), "%i", vfs_timeout);
+     snprintf (buffer2, sizeof (buffer2), "%i", vfs_timeout);
      confvfs_widgets [3 + VFS_WIDGETBASE].text = buffer2;
  
      if (quick_dialog (&confvfs_dlg) != B_CANCEL) {
@@@ -1085,17 -1085,17 +1085,17 @@@ vfs_smb_get_authinfo (const char *host
  
      g_free (title);
  
 -    in_user  = input_new (5, istart, INPUT_COLOR, ilen, user, "auth_name");
 +    in_user  = input_new (5, istart, INPUT_COLOR, ilen, user, "auth_name", INPUT_COMPLETE_DEFAULT);
      add_widget (auth_dlg, in_user);
  
 -    in_domain = input_new (3, istart, INPUT_COLOR, ilen, domain, "auth_domain");
 +    in_domain = input_new (3, istart, INPUT_COLOR, ilen, domain, "auth_domain", INPUT_COMPLETE_DEFAULT);
      add_widget (auth_dlg, in_domain);
      add_widget (auth_dlg, button_new (9, b2, B_CANCEL, NORMAL_BUTTON,
                   buts[1], 0));
      add_widget (auth_dlg, button_new (9, b0, B_ENTER, DEFPUSH_BUTTON,
                   buts[0], 0));
  
 -    in_password  = input_new (7, istart, INPUT_COLOR, ilen, "", "auth_password");
 +    in_password  = input_new (7, istart, INPUT_COLOR, ilen, "", "auth_password", INPUT_COMPLETE_DEFAULT);
      in_password->completion_flags = 0;
      in_password->is_password = 1;
      add_widget (auth_dlg, in_password);
diff --combined src/charsets.c
index f2e69e0,ec1aca1..4e807c0
--- a/src/charsets.c
+++ b/src/charsets.c
@@@ -27,8 -27,6 +27,8 @@@
  
  #include <iconv.h>
  
 +#include <mhl/string.h>
 +
  #include "global.h"
  #include "charsets.h"
  
@@@ -198,7 -196,7 +198,7 @@@ init_translation_table (int cpsource, i
  
      cd = iconv_open (cpdisp, cpsour);
      if (cd == (iconv_t) - 1) {
- 	g_snprintf (errbuf, sizeof (errbuf),
+ 	snprintf (errbuf, sizeof (errbuf),
  		    _("Cannot translate from %s to %s"), cpsour, cpdisp);
  	return errbuf;
      }
@@@ -212,7 -210,7 +212,7 @@@
  
      cd = iconv_open (cpsour, cpdisp);
      if (cd == (iconv_t) - 1) {
- 	g_snprintf (errbuf, sizeof (errbuf),
+ 	snprintf (errbuf, sizeof (errbuf),
  		    _("Cannot translate from %s to %s"), cpdisp, cpsour);
  	return errbuf;
      }
diff --combined src/file.c
index cb61307,1ae15fd..5fb0bfd
--- a/src/file.c
+++ b/src/file.c
@@@ -50,8 -50,6 +50,8 @@@
  #include <sys/stat.h>
  #include <unistd.h>
  
 +#include <mhl/memory.h>
 +#include <mhl/escape.h>
  #include <mhl/string.h>
  
  #include "global.h"
@@@ -67,7 -65,6 +67,7 @@@
  #include "widget.h"
  #include "wtools.h"
  #include "background.h"		/* we_are_background */
 +#include "util.h"
  
  /* Needed for current_panel, other_panel and WTree */
  #include "dir.h"
@@@ -181,43 -178,37 +181,43 @@@ do_transform_source (FileOpContext *ctx
      for (next_reg = 1, j = 0, k = 0; j < strlen (ctx->dest_mask); j++) {
  	switch (ctx->dest_mask[j]) {
  	case '\\':
 -	    j++;
 -	    if (!isdigit ((unsigned char) ctx->dest_mask[j])) {
 -		/* Backslash followed by non-digit */
 -		switch (ctx->dest_mask[j]) {
 -		case 'U':
 -		    case_conv |= UP_SECT;
 -		    case_conv &= ~LOW_SECT;
 -		    break;
 -		case 'u':
 -		    case_conv |= UP_CHAR;
 -		    break;
 -		case 'L':
 -		    case_conv |= LOW_SECT;
 -		    case_conv &= ~UP_SECT;
 -		    break;
 -		case 'l':
 -		    case_conv |= LOW_CHAR;
 -		    break;
 -		case 'E':
 -		    case_conv = NO_CONV;
 -		    break;
 -		default:
 -		    /* Backslash as quote mark */
 -		    fntarget[k++] =
 -			convert_case (ctx->dest_mask[j], &case_conv);
 -		}
 +	    if (mhl_shell_is_char_escaped (&ctx->dest_mask[j])){
 +		fntarget[k++] = ctx->dest_mask[j++];
 +		fntarget[k++] = ctx->dest_mask[j];
  		break;
  	    } else {
 -		/* Backslash followed by digit */
 -		next_reg = ctx->dest_mask[j] - '0';
 -		/* Fall through */
 +		j++;
 +		if (!isdigit ((unsigned char) ctx->dest_mask[j])) {
 +		    /* Backslash followed by non-digit */
 +		    switch (ctx->dest_mask[j]) {
 +		    case 'U':
 +			case_conv |= UP_SECT;
 +			case_conv &= ~LOW_SECT;
 +			break;
 +		    case 'u':
 +			case_conv |= UP_CHAR;
 +			break;
 +		    case 'L':
 +			case_conv |= LOW_SECT;
 +			case_conv &= ~UP_SECT;
 +			break;
 +		    case 'l':
 +			case_conv |= LOW_CHAR;
 +			break;
 +		    case 'E':
 +			case_conv = NO_CONV;
 +			break;
 +		    default:
 +			/* Backslash as quote mark */
 +			fntarget[k++] =
 +			    convert_case (ctx->dest_mask[j], &case_conv);
 +		    }
 +		    break;
 +		} else {
 +		    /* Backslash followed by digit */
 +		    next_reg = ctx->dest_mask[j] - '0';
 +		    /* Fall through */
 +		}
  	    }
  
  	case '*':
@@@ -802,7 -793,7 +802,7 @@@ copy_file_file (FileOpContext *ctx, con
  	    }
  	}
  
 -	if (!appending) {
 +	if (!appending && ctx->preserve) {
  	    while (mc_chmod (dst_path, (src_mode & ctx->umask_kill))) {
  		temp_status = file_error (
  			_(" Cannot chmod target file \"%s\" \n %s "), dst_path);
@@@ -1701,10 -1692,10 +1701,10 @@@ panel_operate_generate_prompt (const WP
  
      if (single_source) {
  	i = fmd_xlen - strlen (format_string) - 4;
- 	g_snprintf (cmd_buf, sizeof (cmd_buf), format_string,
+ 	snprintf (cmd_buf, sizeof (cmd_buf), format_string,
  		    name_trunc (single_source, i));
      } else {
- 	g_snprintf (cmd_buf, sizeof (cmd_buf), format_string,
+ 	snprintf (cmd_buf, sizeof (cmd_buf), format_string,
  		    panel->marked);
  	i = strlen (cmd_buf) + 6 - fmd_xlen;
  	if (i > 0) {
@@@ -1905,7 -1896,7 +1905,7 @@@ panel_operate (void *source_panel, File
  		g_free (dest);
  		dest = temp2;
  		temp = NULL;
 -
 +		
  		switch (operation) {
  		case OP_COPY:
  		    /*
@@@ -1997,9 -1988,6 +1997,9 @@@
  		else {
  		    char *temp2 = mhl_str_dir_plus_file (dest, temp);
  
 +		    source_with_path = mhl_shell_unescape_buf(source_with_path);
 +		    temp2 = mhl_shell_unescape_buf(temp2);
 +
  		    switch (operation) {
  		    case OP_COPY:
  			/*
@@@ -2126,7 -2114,7 +2126,7 @@@ real_do_file_error (enum OperationMode 
  int
  file_error (const char *format, const char *file)
  {
-     g_snprintf (cmd_buf, sizeof (cmd_buf), format,
+     snprintf (cmd_buf, sizeof (cmd_buf), format,
  		path_trunc (file, 30), unix_error_string (errno));
  
      return do_file_error (cmd_buf);
@@@ -2142,7 -2130,7 +2142,7 @@@ files_error (const char *format, const 
      strcpy (nfile1, path_trunc (file1, 15));
      strcpy (nfile2, path_trunc (file2, 15));
  
-     g_snprintf (cmd_buf, sizeof (cmd_buf), format, nfile1, nfile2,
+     snprintf (cmd_buf, sizeof (cmd_buf), format, nfile1, nfile2,
  		unix_error_string (errno));
  
      return do_file_error (cmd_buf);
diff --combined src/find.c
index ca06df9,bb0a1e2..8d90bc8
--- a/src/find.c
+++ b/src/find.c
@@@ -276,16 -276,16 +276,16 @@@ find_parameters (char **start_dir, cha
      add_widget (find_dlg, case_sense);
  
      in_with =
 -	input_new (8, istart, INPUT_COLOR, ilen, in_contents, "content");
 +	input_new (8, istart, INPUT_COLOR, ilen, in_contents, "content", INPUT_COMPLETE_DEFAULT);
      add_widget (find_dlg, in_with);
  
      add_widget (find_dlg, recursively_cbox);
      in_name =
 -	input_new (5, istart, INPUT_COLOR, ilen, in_start_name, "name");
 +	input_new (5, istart, INPUT_COLOR, ilen, in_start_name, "name", INPUT_COMPLETE_DEFAULT);
      add_widget (find_dlg, in_name);
  
      in_start =
 -	input_new (3, istart, INPUT_COLOR, ilen, in_start_dir, "start");
 +	input_new (3, istart, INPUT_COLOR, ilen, in_start_dir, "start", INPUT_COMPLETE_DEFAULT);
      add_widget (find_dlg, in_start);
  
      add_widget (find_dlg, label_new (8, 3, labs[2]));
@@@ -530,7 -530,7 +530,7 @@@ search_content (Dlg_head *h, const cha
      if (file_fd == -1)
  	return 0;
  
-     g_snprintf (buffer, sizeof (buffer), _("Grepping in %s"), name_trunc (filename, FIND2_X_USE));
+     snprintf (buffer, sizeof (buffer), _("Grepping in %s"), name_trunc (filename, FIND2_X_USE));
  
      status_update (buffer);
      mc_refresh ();
@@@ -666,7 -666,7 +666,7 @@@ do_search (struct Dlg_head *h
  	    if (verbose){
  		char buffer [BUF_SMALL];
  
- 		g_snprintf (buffer, sizeof (buffer), _("Searching %s"), 
+ 		snprintf (buffer, sizeof (buffer), _("Searching %s"), 
  			    name_trunc (directory, FIND2_X_USE));
  		status_update (buffer);
  	    }
diff --combined src/main.c
index 89fd0fd,359d549..a24c337
--- a/src/main.c
+++ b/src/main.c
@@@ -67,6 -67,7 +67,6 @@@
  #include "widget.h"
  #include "command.h"
  #include "wtools.h"
 -#include "complete.h"		/* For the free_completion */
  
  #include "chmod.h"
  #include "chown.h"
@@@ -1649,7 -1650,7 +1649,7 @@@ load_hint (int force
      } else {
  	char text[BUF_SMALL];
  
- 	g_snprintf (text, sizeof (text), _("GNU Midnight Commander %s\n"),
+ 	snprintf (text, sizeof (text), _("GNU Midnight Commander %s\n"),
  		    VERSION);
  	set_hintbar (text);
      }
diff --combined src/util.c
index aebf59a,6f5d443..deeff58
--- a/src/util.c
+++ b/src/util.c
@@@ -35,7 -35,6 +35,7 @@@
  #include <sys/stat.h>
  #include <unistd.h>
  
 +#include <mhl/escape.h>
  #include <mhl/string.h>
  
  #include "global.h"
@@@ -230,27 -229,22 +230,27 @@@ fake_name_quote (const char *s, int quo
   * Return static buffer, no need to free() it.
   */
  const char *
 -name_trunc (const char *txt, int trunc_len)
 +name_trunc (const char *txt, size_t trunc_len)
  {
      static char x[MC_MAXPATHLEN + MC_MAXPATHLEN];
 -    int txt_len;
 +    size_t txt_len;
      char *p;
  
 -    if ((size_t) trunc_len > sizeof (x) - 1) {
 +    if (!txt)
 +	return NULL;
 +    if (!*txt)
 +	return txt;
 +
 +    if (trunc_len > sizeof (x) - 1) {
  	trunc_len = sizeof (x) - 1;
      }
      txt_len = strlen (txt);
      if (txt_len <= trunc_len) {
  	strcpy (x, txt);
      } else {
 -	int y = (trunc_len / 2) + (trunc_len % 2);
 -	strncpy (x, txt, y);
 -	strncpy (x + y, txt + txt_len - (trunc_len / 2), trunc_len / 2);
 +	size_t y = (trunc_len / 2) + (trunc_len % 2);
 +	strncpy (x, txt, (size_t) y);
 +	strncpy (x + y, txt + (txt_len - (trunc_len / 2)), trunc_len / 2);
  	x[y] = '~';
      }
      x[trunc_len] = 0;
@@@ -266,7 -260,7 +266,7 @@@
   * reasons.
   */
  const char *
 -path_trunc (const char *path, int trunc_len) {
 +path_trunc (const char *path, size_t trunc_len) {
      const char *ret;
      char *secure_path = strip_password (g_strdup (path), 1);
      
@@@ -291,7 -285,7 +291,7 @@@ size_trunc (double size
  	    xtra = "M";
  	}
      }
-     g_snprintf (x, sizeof (x), "%.0f%s", (size/divisor), xtra);
+     snprintf (x, sizeof (x), "%.0f%s", (size/divisor), xtra);
      return x;
  }
  
@@@ -350,18 -344,18 +350,18 @@@ size_trunc_len (char *buffer, int len, 
  	if (size == 0) {
  	    if (j == units) {
  		/* Empty files will print "0" even with minimal width.  */
- 		g_snprintf (buffer, len + 1, "0");
+ 		snprintf (buffer, len + 1, "0");
  		break;
  	    }
  
  	    /* Use "~K" or just "K" if len is 1.  Use "B" for bytes.  */
- 	    g_snprintf (buffer, len + 1, (len > 1) ? "~%s" : "%s",
+ 	    snprintf (buffer, len + 1, (len > 1) ? "~%s" : "%s",
  			(j > 1) ? suffix[j - 1] : "B");
  	    break;
  	}
  
  	if (size < power10 [len - (j > 0)]) {
- 	    g_snprintf (buffer, len + 1, "%lu%s", (unsigned long) size, suffix[j]);
+ 	    snprintf (buffer, len + 1, "%lu%s", (unsigned long) size, suffix[j]);
  	    break;
  	}
  
@@@ -635,7 -629,7 +635,7 @@@ set_int (const char *file, const char *
  {
      char buffer [BUF_TINY];
  
-     g_snprintf (buffer, sizeof (buffer), "%d", value);
+     snprintf (buffer, sizeof (buffer), "%d", value);
      return WritePrivateProfileString (app_text, key, buffer, file);
  }
  
@@@ -851,11 -845,11 +851,11 @@@ unix_error_string (int error_num
      gchar *strerror_currentlocale;
  	
      strerror_currentlocale = g_locale_from_utf8(g_strerror (error_num), -1, NULL, NULL, NULL);
-     g_snprintf (buffer, sizeof (buffer), "%s (%d)",
+     snprintf (buffer, sizeof (buffer), "%s (%d)",
  		strerror_currentlocale, error_num);
      g_free(strerror_currentlocale);
  #else
-     g_snprintf (buffer, sizeof (buffer), "%s (%d)",
+     snprintf (buffer, sizeof (buffer), "%s (%d)",
  		g_strerror (error_num), error_num);
  #endif
      return buffer;
@@@ -1522,3 -1516,4 +1522,3 @@@ Q_ (const char *s
      sep = strchr(result, '|');
      return (sep != NULL) ? sep + 1 : result;
  }
 -
diff --combined src/utilunix.c
index 4b088e5,7cefb5a..77b07b9
--- a/src/utilunix.c
+++ b/src/utilunix.c
@@@ -41,8 -41,6 +41,8 @@@
  #endif
  #include <unistd.h>
  
 +#include <mhl/string.h>
 +
  #include "global.h"
  #include "execute.h"
  #include "wtools.h"		/* message() */
@@@ -95,7 -93,7 +95,7 @@@ char *get_owner (int uid
  	return pwd->pw_name;
      }
      else {
- 	g_snprintf (ibuf, sizeof (ibuf), "%d", uid);
+ 	snprintf (ibuf, sizeof (ibuf), "%d", uid);
  	return ibuf;
      }
  }
@@@ -115,7 -113,7 +115,7 @@@ char *get_group (int gid
  	i_cache_add (gid, gid_cache, GID_CACHE_SIZE, grp->gr_name, &gid_last);
  	return grp->gr_name;
      } else {
- 	g_snprintf (gbuf, sizeof (gbuf), "%d", gid);
+ 	snprintf (gbuf, sizeof (gbuf), "%d", gid);
  	return gbuf;
      }
  }
@@@ -256,10 -254,10 +256,10 @@@ mc_tmpdir (void
      pwd = getpwuid (getuid ());
  
      if (pwd)
- 	g_snprintf (buffer, sizeof (buffer), "%s/mc-%s", sys_tmp,
+ 	snprintf (buffer, sizeof (buffer), "%s/mc-%s", sys_tmp,
  		pwd->pw_name);
      else
- 	g_snprintf (buffer, sizeof (buffer), "%s/mc-%lu", sys_tmp,
+ 	snprintf (buffer, sizeof (buffer), "%s/mc-%lu", sys_tmp,
  		(unsigned long) getuid ());
  
      canonicalize_pathname (buffer);
@@@ -308,11 -306,11 +308,11 @@@
  	if (fallback_ok) {
  	    fprintf (stderr, _("Temporary files will be created in %s\n"),
  		     sys_tmp);
- 	    g_snprintf (buffer, sizeof (buffer), "%s", sys_tmp);
+ 	    snprintf (buffer, sizeof (buffer), "%s", sys_tmp);
  	    error = NULL;
  	} else {
  	    fprintf (stderr, _("Temporary files will not be created\n"));
- 	    g_snprintf (buffer, sizeof (buffer), "%s", "/dev/null/");
+ 	    snprintf (buffer, sizeof (buffer), "%s", "/dev/null/");
  	}
  
  	fprintf (stderr, "%s\n", _("Press any key to continue..."));
@@@ -428,7 -426,7 +428,7 @@@ canonicalize_pathname (char *path
  	if (p[0] == PATH_SEP && p[1] == PATH_SEP) {
  	    s = p + 1;
  	    while (*(++s) == PATH_SEP);
 -	    strcpy (p + 1, s);
 +	    mhl_strmove (p + 1, s);
  	}
  	p++;
      }
@@@ -437,7 -435,7 +437,7 @@@
      p = lpath;
      while (*p) {
  	if (p[0] == PATH_SEP && p[1] == '.' && p[2] == PATH_SEP)
 -	    strcpy (p, p + 2);
 +	    mhl_strmove (p, p + 2);
  	else
  	    p++;
      }
@@@ -453,7 -451,7 +453,7 @@@
  	    lpath[1] = 0;
  	    return;
  	} else {
 -	    strcpy (lpath, lpath + 2);
 +	    mhl_strmove (lpath, lpath + 2);
  	}
      }
  
@@@ -499,10 -497,10 +499,10 @@@
  	if (p[3] != 0) {
  	    if (s == lpath && *s == PATH_SEP) {
  		/* "/../foo" -> "/foo" */
 -		strcpy (s + 1, p + 4);
 +		mhl_strmove (s + 1, p + 4);
  	    } else {
  		/* "token/../foo" -> "foo" */
 -		strcpy (s, p + 4);
 +		mhl_strmove (s, p + 4);
  	    }
  	    p = (s > lpath) ? s - 1 : s;
  	    continue;
diff --combined src/widget.c
index f85cc2a,4312677..597438f
--- a/src/widget.c
+++ b/src/widget.c
@@@ -43,6 -43,7 +43,6 @@@
  #include "dialog.h"
  #include "widget.h"
  #include "win.h"
 -#include "complete.h"
  #include "key.h"	/* XCTRL and ALT macros  */
  #include "profile.h"	/* for history loading and saving */
  #include "wtools.h"	/* For common_dialog_repaint() */
@@@ -157,15 -158,15 +157,15 @@@ button_callback (Widget *w, widget_msg_
  
  	switch (b->flags) {
  	case DEFPUSH_BUTTON:
- 	    g_snprintf (buf, sizeof (buf), "[< %s >]", b->text);
+ 	    snprintf (buf, sizeof (buf), "[< %s >]", b->text);
  	    off = 3;
  	    break;
  	case NORMAL_BUTTON:
- 	    g_snprintf (buf, sizeof (buf), "[ %s ]", b->text);
+ 	    snprintf (buf, sizeof (buf), "[ %s ]", b->text);
  	    off = 2;
  	    break;
  	case NARROW_BUTTON:
- 	    g_snprintf (buf, sizeof (buf), "[%s]", b->text);
+ 	    snprintf (buf, sizeof (buf), "[%s]", b->text);
  	    off = 1;
  	    break;
  	case HIDDEN_BUTTON:
@@@ -870,7 -871,7 +870,7 @@@ history_get (const char *input_name
      for (i = 0;; i++) {
  	char key_name[BUF_TINY];
  	char this_entry[BUF_LARGE];
- 	g_snprintf (key_name, sizeof (key_name), "%d", i);
+ 	snprintf (key_name, sizeof (key_name), "%d", i);
  	GetPrivateProfileString (input_name, key_name, "", this_entry,
  				 sizeof (this_entry), profile);
  	if (!*this_entry)
@@@ -934,7 -935,7 +934,7 @@@ history_put (const char *input_name, GL
  	/* We shouldn't have null entries, but let's be sure */
  	if (text && *text) {
  	    char key_name[BUF_TINY];
- 	    g_snprintf (key_name, sizeof (key_name), "%d", i++);
+ 	    snprintf (key_name, sizeof (key_name), "%d", i++);
  	    WritePrivateProfileString (input_name, key_name, text,
  				       profile);
  	}
@@@ -1659,7 -1660,7 +1659,7 @@@ input_event (Gpm_Event * event, void *d
  
  WInput *
  input_new (int y, int x, int color, int len, const char *def_text,
 -	   const char *histname)
 +	   const char *histname, INPUT_COMPLETE_FLAGS completion_flags)
  {
      WInput *in = g_new (WInput, 1);
      int initial_buffer_len;
@@@ -1688,7 -1689,9 +1688,7 @@@
      initial_buffer_len = 1 + max ((size_t) len, strlen (def_text));
      in->widget.options |= W_IS_INPUT;
      in->completions = NULL;
 -    in->completion_flags =
 -	INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_HOSTNAMES |
 -	INPUT_COMPLETE_VARIABLES | INPUT_COMPLETE_USERNAMES;
 +    in->completion_flags = completion_flags;
      in->current_max_len = initial_buffer_len;
      in->buffer = g_malloc (initial_buffer_len);
      in->color = color;
diff --combined vfs/fish.c
index 6d45387,1723d04..d01e6cd
--- a/vfs/fish.c
+++ b/vfs/fish.c
@@@ -144,7 -144,7 +144,7 @@@ fish_command (struct vfs_class *me, str
      enable_interrupt_key ();
  
      status = write (SUP.sockw, str, strlen (str));
 -    g_free (str);
 +    mhl_mem_free (str);
  
      disable_interrupt_key ();
      if (status < 0)
@@@ -168,10 -168,10 +168,10 @@@ fish_free_archive (struct vfs_class *me
  	close (SUP.sockr);
  	SUP.sockw = SUP.sockr = -1;
      }
 -    g_free (SUP.host);
 -    g_free (SUP.user);
 -    g_free (SUP.cwdir);
 -    g_free (SUP.password);
 +    mhl_mem_free (SUP.host);
 +    mhl_mem_free (SUP.user);
 +    mhl_mem_free (SUP.cwdir);
 +    mhl_mem_free (SUP.password);
  }
  
  static void
@@@ -228,7 -228,7 +228,7 @@@ fish_open_archive_int (struct vfs_clas
  	if (SUP.flags > FISH_FLAG_RSH)
  	{
  	    argv[i++] = "-p";
- 	    g_snprintf (gbuf, sizeof (gbuf), "%d", SUP.flags);
+ 	    snprintf (gbuf, sizeof (gbuf), "%d", SUP.flags);
  	    argv[i++] = gbuf;
  	}
  
@@@ -260,7 -260,7 +260,7 @@@
  		p = g_strconcat (_(" fish: Password required for "),
  				 SUP.user, " ", (char *) NULL);
  		op = vfs_get_password (p);
 -		g_free (p);
 +		mhl_mem_free (p);
  		if (op == NULL)
  		    ERRNOR (EPERM, -1);
  		SUP.password = op;
@@@ -323,7 -323,7 +323,7 @@@ fish_open_archive (struct vfs_class *me
      p = vfs_split_url (strchr (op, ':') + 1, &host, &user, &flags,
  		       &password, 0, URL_NOSLASH);
  
 -    g_free (p);
 +    mhl_mem_free (p);
  
      SUP.host = host;
      SUP.user = user;
@@@ -350,12 -350,12 +350,12 @@@ fish_archive_same (struct vfs_class *me
      op = vfs_split_url (strchr (op, ':') + 1, &host, &user, &flags, 0, 0,
  			URL_NOSLASH);
  
 -    g_free (op);
 +    mhl_mem_free (op);
  
      flags = ((strcmp (host, SUP.host) == 0)
  	     && (strcmp (user, SUP.user) == 0) && (flags == SUP.flags));
 -    g_free (host);
 -    g_free (user);
 +    mhl_mem_free (host);
 +    mhl_mem_free (user);
  
      return flags;
  }
@@@ -367,7 -367,7 +367,7 @@@ fish_dir_load(struct vfs_class *me, str
      char buffer[8192];
      struct vfs_s_entry *ent = NULL;
      FILE *logfile;
 -    char *quoted_path;
 +    SHELL_ESCAPED_STR quoted_path;
      int reply_code;
  
  #if 0
@@@ -462,8 -462,8 +462,8 @@@
  	"else\n"
  		  "echo '### 500'\n"
  	"fi\n",
 -	    quoted_path, quoted_path, quoted_path, quoted_path, quoted_path, quoted_path);
 -    mhl_mem_free (quoted_path);
 +	    quoted_path.s, quoted_path.s, quoted_path.s, quoted_path.s, quoted_path.s, quoted_path.s);
 +    mhl_mem_free (quoted_path.s);
      ent = vfs_s_generate_entry(me, NULL, dir, 0);
      while (1) {
  	int res = vfs_s_get_line_interruptible (me, buffer, sizeof (buffer), SUP.sockr); 
@@@ -594,7 -594,7 +594,7 @@@
      vfs_s_free_entry (me, ent);
      reply_code = fish_decode_reply(buffer + 4, 0);
      if (reply_code == COMPLETE) {
 -	g_free (SUP.cwdir);
 +	mhl_mem_free (SUP.cwdir);
  	SUP.cwdir = g_strdup (remote_path);
  	print_vfs_message (_("%s: done."), me->name);
  	return 0;
@@@ -618,7 -618,7 +618,7 @@@ fish_file_store(struct vfs_class *me, s
      struct stat s;
      int was_error = 0;
      int h;
 -    char *quoted_name;
 +    SHELL_ESCAPED_STR quoted_name;
  
      h = open (localname, O_RDONLY);
  
@@@ -659,7 -659,7 +659,7 @@@
       */
  
      quoted_name = mhl_shell_escape_dup(name);
 -    print_vfs_message(_("fish: store %s: sending command..."), quoted_name );
 +    print_vfs_message(_("fish: store %s: sending command..."), quoted_name.s );
  
      /* FIXME: File size is limited to ULONG_MAX */
      if (!fh->u.fish.append)
@@@ -683,8 -683,8 +683,8 @@@
  			"    rest=`expr $rest - $n`\n"
  			"done\n"
  		 "}; echo '### 200'\n",
 -		 (unsigned long) s.st_size, quoted_name,
 -		 quoted_name, (unsigned long) s.st_size,
 +		 (unsigned long) s.st_size, quoted_name.s,
 +		 quoted_name.s, (unsigned long) s.st_size,
  		 (unsigned long) s.st_size);
      else
  	n = fish_command (me, super, WAIT_REPLY,
@@@ -700,8 -700,8 +700,8 @@@
  			"    rest=`expr $rest - $n`\n"
  			"done\n"
  		 "}; echo '### 200'\n",
 -		 (unsigned long) s.st_size, quoted_name,
 -		 quoted_name, (unsigned long) s.st_size);
 +		 (unsigned long) s.st_size, quoted_name.s,
 +		 quoted_name.s, (unsigned long) s.st_size);
  
      if (n != PRELIM) {
  	close (h);
@@@ -735,14 -735,14 +735,14 @@@
  			  (unsigned long) s.st_size);
      }
      close(h);
 -    mhl_mem_free(quoted_name);
 +    mhl_mem_free(quoted_name.s);
      if ((fish_get_reply (me, SUP.sockr, NULL, 0) != COMPLETE) || was_error)
          ERRNOR (E_REMOTE, -1);
      return 0;
  error_return:
      close(h);
      fish_get_reply(me, SUP.sockr, NULL, 0);
 -    mhl_mem_free(quoted_name);
 +    mhl_mem_free(quoted_name.s);
      return -1;
  }
  
@@@ -750,7 -750,7 +750,7 @@@ static in
  fish_linear_start (struct vfs_class *me, struct vfs_s_fh *fh, off_t offset)
  {
      char *name;
 -    char *quoted_name;
 +    SHELL_ESCAPED_STR quoted_name;
      if (offset)
          ERRNOR (E_NOTSUPP, 0);
      name = vfs_s_fullpath (me, fh->ino);
@@@ -779,8 -779,8 +779,8 @@@
  		"else\n"
  		"echo '### 500'\n"
  		"fi\n",
 -		quoted_name, quoted_name, quoted_name, quoted_name );
 -    g_free (quoted_name);
 +		quoted_name.s, quoted_name.s, quoted_name.s, quoted_name.s );
 +    mhl_mem_free (quoted_name.s);
      if (offset != PRELIM) ERRNOR (E_REMOTE, 0);
      fh->linear = LS_LINEAR_OPEN;
      fh->u.fish.got = 0;
@@@ -889,29 -889,28 +889,29 @@@ fish_send_command(struct vfs_class *me
  #define PREFIX \
      char buf[BUF_LARGE]; \
      const char *crpath; \
 -    char *rpath, *mpath = g_strdup (path); \
 +    char *mpath = mhl_str_dup (path); \
 +    SHELL_ESCAPED_STR rpath; \
      struct vfs_s_super *super; \
      if (!(crpath = vfs_s_get_path_mangle (me, mpath, &super, 0))) { \
 -	g_free (mpath); \
 +	mhl_mem_free (mpath); \
  	return -1; \
      } \
      rpath = mhl_shell_escape_dup(crpath); \
 -    g_free (mpath);
 +    mhl_mem_free (mpath);
  
  #define POSTFIX(flags) \
 -    g_free (rpath); \
 +    mhl_mem_free (rpath.s); \
      return fish_send_command(me, super, buf, flags);
  
  static int
  fish_chmod (struct vfs_class *me, const char *path, int mode)
  {
      PREFIX
-     g_snprintf(buf, sizeof(buf), "#CHMOD %4.4o /%s\n"
+     snprintf(buf, sizeof(buf), "#CHMOD %4.4o /%s\n"
  				 "chmod %4.4o /%s 2>/dev/null\n"
  				 "echo '### 000'\n", 
 -	    mode & 07777, rpath,
 -	    mode & 07777, rpath);
 +	    mode & 07777, rpath.s,
 +	    mode & 07777, rpath.s);
      POSTFIX(OPT_FLUSH);
  }
  
@@@ -920,24 -919,24 +920,24 @@@ static int fish_##name (struct vfs_clas
  { \
      char buf[BUF_LARGE]; \
      const char *crpath1, *crpath2; \
 -    char *rpath1, *rpath2, *mpath1, *mpath2; \
 +    char *mpath1, *mpath2; \
      struct vfs_s_super *super1, *super2; \
      if (!(crpath1 = vfs_s_get_path_mangle (me, mpath1 = g_strdup(path1), &super1, 0))) { \
 -	g_free (mpath1); \
 +	mhl_mem_free (mpath1); \
  	return -1; \
      } \
      if (!(crpath2 = vfs_s_get_path_mangle (me, mpath2 = g_strdup(path2), &super2, 0))) { \
 -	g_free (mpath1); \
 -	g_free (mpath2); \
 +	mhl_mem_free (mpath1); \
 +	mhl_mem_free (mpath2); \
  	return -1; \
      } \
 -    rpath1 = mhl_shell_escape_dup (crpath1); \
 -    g_free (mpath1); \
 -    rpath2 = mhl_shell_escape_dup (crpath2); \
 -    g_free (mpath2); \
 -    snprintf(buf, sizeof(buf), string "\n", rpath1, rpath2, rpath1, rpath2); \
 -    mhl_mem_free (rpath1); \
 -    mhl_mem_free (rpath2); \
 +    SHELL_ESCAPED_STR rpath1 = mhl_shell_escape_dup (crpath1); \
 +    mhl_mem_free (mpath1); \
 +    SHELL_ESCAPED_STR rpath2 = mhl_shell_escape_dup (crpath2); \
 +    mhl_mem_free (mpath2); \
 +    g_snprintf(buf, sizeof(buf), string "\n", rpath1.s, rpath2.s, rpath1.s, rpath2.s); \
 +    mhl_mem_free (rpath1.s); \
 +    mhl_mem_free (rpath2.s); \
      return fish_send_command(me, super2, buf, OPT_FLUSH); \
  }
  
@@@ -950,15 -949,15 +950,15 @@@ FISH_OP(link,   "#LINK /%s /%s\n
  
  static int fish_symlink (struct vfs_class *me, const char *setto, const char *path)
  {
 -    char *qsetto;
 +    SHELL_ESCAPED_STR qsetto;
      PREFIX
      qsetto = mhl_shell_escape_dup (setto);
-     g_snprintf(buf, sizeof(buf),
+     snprintf(buf, sizeof(buf),
              "#SYMLINK %s /%s\n"
  	    "ln -s %s /%s 2>/dev/null\n"
  	    "echo '### 000'\n",
 -	    qsetto, rpath, qsetto, rpath);
 -    mhl_mem_free (qsetto);
 +	    qsetto.s, rpath.s, qsetto.s, rpath.s);
 +    mhl_mem_free (qsetto.s);
      POSTFIX(OPT_FLUSH);
  }
  
@@@ -979,20 -978,20 +979,20 @@@ fish_chown (struct vfs_class *me, cons
      sgroup = gr->gr_name;
      {
  	PREFIX
- 	g_snprintf (buf, sizeof(buf),
+ 	snprintf (buf, sizeof(buf),
      	    "#CHOWN %s /%s\n"
  	    "chown %s /%s 2>/dev/null\n"
  	    "echo '### 000'\n", 
 -	    sowner, rpath,
 -	    sowner, rpath);
 +	    sowner, rpath.s,
 +	    sowner, rpath.s);
  	fish_send_command (me, super, buf, OPT_FLUSH); 
  	/* FIXME: what should we report if chgrp succeeds but chown fails? */
- 	g_snprintf (buf, sizeof(buf),
+ 	snprintf (buf, sizeof(buf),
              "#CHGRP /%s \"/%s\"\n"
  	    "chgrp %s \"/%s\" 2>/dev/null\n"
  	    "echo '### 000'\n", 
 -	    sgroup, rpath,
 -	    sgroup, rpath);
 +	    sgroup, rpath.s,
 +	    sgroup, rpath.s);
  	/* fish_send_command(me, super, buf, OPT_FLUSH); */
  	POSTFIX (OPT_FLUSH)
      }
@@@ -1001,11 -1000,11 +1001,11 @@@
  static int fish_unlink (struct vfs_class *me, const char *path)
  {
      PREFIX
-     g_snprintf(buf, sizeof(buf),
+     snprintf(buf, sizeof(buf),
              "#DELE /%s\n"
  	    "rm -f /%s 2>/dev/null\n"
  	    "echo '### 000'\n",
 -	    rpath, rpath);
 +	    rpath.s, rpath.s);
      POSTFIX(OPT_FLUSH);
  }
  
@@@ -1015,22 -1014,22 +1015,22 @@@ static int fish_mkdir (struct vfs_clas
  
      (void) mode;
  
-     g_snprintf(buf, sizeof(buf),
+     snprintf(buf, sizeof(buf),
              "#MKD /%s\n"
  	    "mkdir /%s 2>/dev/null\n"
  	    "echo '### 000'\n",
 -	    rpath, rpath);
 +	    rpath.s, rpath.s);
      POSTFIX(OPT_FLUSH);
  }
  
  static int fish_rmdir (struct vfs_class *me, const char *path)
  {
      PREFIX
-     g_snprintf(buf, sizeof(buf),
+     snprintf(buf, sizeof(buf),
              "#RMD /%s\n"
  	    "rmdir /%s 2>/dev/null\n"
  	    "echo '### 000'\n",
 -	    rpath, rpath);
 +	    rpath.s, rpath.s);
      POSTFIX(OPT_FLUSH);
  }
  
@@@ -1085,7 -1084,7 +1085,7 @@@ fish_fill_names (struct vfs_class *me, 
  		if (SUP.flags > FISH_FLAG_RSH)
  		{
  		    break;
- 		    g_snprintf (gbuf, sizeof (gbuf), ":%d", SUP.flags);
+ 		    snprintf (gbuf, sizeof (gbuf), ":%d", SUP.flags);
  		    flags = gbuf;
  		}
  		break;
@@@ -1094,7 -1093,7 +1094,7 @@@
  	name = g_strconcat ("/#sh:", SUP.user, "@", SUP.host, flags,
  			    "/", SUP.cwdir, (char *) NULL);
  	(*func)(name);
 -	g_free (name);
 +	mhl_mem_free (name);
  	super = super->next;
      }
  }

-- 
Midnight Commander Development


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]