summaryrefslogtreecommitdiff
path: root/misc/mc/files/patch-src-user.c
diff options
context:
space:
mode:
authorMax Khon <fjoe@FreeBSD.org>2004-06-14 20:56:00 +0000
committerMax Khon <fjoe@FreeBSD.org>2004-06-14 20:56:00 +0000
commit694ecd186a9b12f5115b130cb96dc3428c8dc76b (patch)
treef1a6e73aac755d8e00dfb5f10ac6a3618d9becf9 /misc/mc/files/patch-src-user.c
parent- Strip binaries (diff)
- Fix CAN-2004-0226, CAN-2004-0231, CAN-2004-0232.
- Do not use :: in patch file names. - Patch for CAN-2003-1023 is now contained in patch-vfs-direntry.c. - Bump PORTREVISION. Submitted by: Jakub Jelinek <jakub@redhat.com>
Notes
Notes: svn path=/head/; revision=111487
Diffstat (limited to 'misc/mc/files/patch-src-user.c')
-rw-r--r--misc/mc/files/patch-src-user.c183
1 files changed, 183 insertions, 0 deletions
diff --git a/misc/mc/files/patch-src-user.c b/misc/mc/files/patch-src-user.c
new file mode 100644
index 000000000000..259640750a81
--- /dev/null
+++ b/misc/mc/files/patch-src-user.c
@@ -0,0 +1,183 @@
+--- src/user.c.orig Fri Nov 29 09:03:53 2002
++++ src/user.c Tue Jun 15 03:15:09 2004
+@@ -138,19 +138,14 @@
+ }
+
+ /* Copy the variable name */
+- var_name = g_malloc (dots - p);
+- strncpy (var_name, p+4, dots-2 - (p+3));
+- var_name [dots-2 - (p+3)] = 0;
+-
++ var_name = g_strndup (p + 4, dots - p - 5);
+ value = getenv (var_name);
+ g_free (var_name);
+ if (value){
+ *v = g_strdup (value);
+ return q-p;
+ }
+- var_name = g_malloc (q - dots + 1);
+- strncpy (var_name, dots, q - dots + 1);
+- var_name [q-dots] = 0;
++ var_name = g_strndup (dots, q - dots);
+ *v = var_name;
+ return q-p;
+ }
+@@ -300,13 +295,15 @@
+
+ /* Copies a whitespace separated argument from p to arg. Returns the
+ point after argument. */
+-static char *extract_arg (char *p, char *arg)
++static char *extract_arg (char *p, char *arg, size_t size)
+ {
+ while (*p && (*p == ' ' || *p == '\t' || *p == '\n'))
+ p++;
+ /* support quote space .mnu */
+- while (*p && (*p != ' ' || *(p-1) == '\\') && *p != '\t' && *p != '\n')
++ while (size > 1 && *p && (*p != ' ' || *(p-1) == '\\') && *p != '\t' && *p != '\n') {
+ *arg++ = *p++;
++ size--;
++ }
+ *arg = 0;
+ if (!*p || *p == '\n')
+ p --;
+@@ -389,29 +386,29 @@
+ p--;
+ break;
+ case 'f': /* file name pattern */
+- p = extract_arg (p, arg);
++ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel && regexp_match (arg, panel->dir.list [panel->selected].fname, match_file);
+ break;
+ case 'y': /* syntax pattern */
+ if (edit_widget && edit_widget->syntax_type) {
+- p = extract_arg (p, arg);
++ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel &&
+ regexp_match (arg, edit_widget->syntax_type, match_normal);
+ }
+ break;
+ case 'd':
+- p = extract_arg (p, arg);
++ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel && regexp_match (arg, panel->cwd, match_file);
+ break;
+ case 't':
+- p = extract_arg (p, arg);
++ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel && test_type (panel, arg);
+ break;
+ case 'x': /* executable */
+ {
+ struct stat status;
+
+- p = extract_arg (p, arg);
++ p = extract_arg (p, arg, sizeof (arg));
+ if (stat (arg, &status) == 0)
+ *condition = is_exe (status.st_mode);
+ else
+@@ -431,50 +428,43 @@
+ static void
+ debug_out (char *start, char *end, int cond)
+ {
+- static char msg [256];
++ static char *msg;
+ int len;
+
+ if (start == NULL && end == NULL){
+- if (cond == 0){
+- /* Init */
+- msg [0] = 0;
+- } else {
+- /* Show output */
+- if (!debug_flag)
+- return;
++ /* Show output */
++ if (debug_flag && msg) {
+ len = strlen (msg);
+ if (len)
+ msg [len - 1] = 0;
+ message (0, _(" Debug "), "%s", msg);
+- debug_flag = 0;
+ }
++ debug_flag = 0;
++ g_free (msg);
++ msg = NULL;
+ } else {
++ char *type, *p;
++
+ /* Save debug info for later output */
+ if (!debug_flag)
+ return;
+ /* Save the result of the condition */
+ if (debug_error){
+- strcat (msg, _(" ERROR: "));
++ type = _(" ERROR: ");
+ debug_error = 0;
+ }
+ else if (cond)
+- strcat (msg, _(" True: "));
++ type = _(" True: ");
+ else
+- strcat (msg, _(" False: "));
+- /* Copy condition statement */
+- len = strlen (msg);
+- if (end == NULL){
+- /* Copy one character */
+- msg [len] = *start;
+- msg [len + 1] = 0;
+- } else {
+- /* Copy many characters */
+- while (start < end){
+- msg [len++] = *start++;
+- }
+- msg [len] = 0;
+- }
+- strcat (msg, " \n");
++ type = _(" False: ");
++ /* This is for debugging, don't need to be super efficient. */
++ if (end == NULL)
++ p = g_strdup_printf ("%s%s%c \n", msg ? msg : "", type, *start);
++ else
++ p = g_strdup_printf ("%s%s%.*s \n", msg ? msg : "", type,
++ (int) (end - start), start);
++ g_free (msg);
++ msg = p;
+ }
+ }
+
+@@ -486,8 +476,6 @@
+ char operator;
+ char *debug_start, *debug_end;
+
+- /* Init debugger */
+- debug_out (NULL, NULL, 0);
+ /* Repeat till end of line */
+ while (*p && *p != '\n') {
+ /* support quote space .mnu */
+@@ -578,6 +566,8 @@
+ break;
+ while (*commands == ' ' || *commands == '\t')
+ commands++;
++ if (*commands == '0')
++ break;
+ }
+ col++;
+ if (*commands == '\n')
+@@ -734,7 +724,7 @@
+ } else if (*p == '+'){
+ if (*(p+1) == '='){
+ /* Combined adding and default */
+- p = test_line (edit_widget, p, &accept_entry);
++ p = test_line (edit_widget, p + 1, &accept_entry);
+ if (selected == 0 && accept_entry)
+ selected = menu_lines;
+ } else {
+@@ -744,7 +734,7 @@
+ } else if (*p == '='){
+ if (*(p+1) == '+'){
+ /* Combined adding and default */
+- p = test_line (edit_widget, p, &accept_entry);
++ p = test_line (edit_widget, p + 1, &accept_entry);
+ if (selected == 0 && accept_entry)
+ selected = menu_lines;
+ } else {