OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [readline/] [shell.c] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jlechner
/* shell.c -- readline utility functions that are normally provided by
2
              bash when readline is linked as part of the shell. */
3
 
4
/* Copyright (C) 1997 Free Software Foundation, Inc.
5
 
6
   This file is part of the GNU Readline Library, a library for
7
   reading lines of text with interactive input and history editing.
8
 
9
   The GNU Readline Library is free software; you can redistribute it
10
   and/or modify it under the terms of the GNU General Public License
11
   as published by the Free Software Foundation; either version 2, or
12
   (at your option) any later version.
13
 
14
   The GNU Readline Library is distributed in the hope that it will be
15
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
16
   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   The GNU General Public License is often shipped with GNU software, and
20
   is generally kept in a file called COPYING or LICENSE.  If you do not
21
   have a copy of the license, write to the Free Software Foundation,
22
   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
23
#define READLINE_LIBRARY
24
 
25
#if defined (HAVE_CONFIG_H)
26
#  include <config.h>
27
#endif
28
 
29
#include <sys/types.h>
30
 
31
#if defined (HAVE_UNISTD_H)
32
#  include <unistd.h>
33
#endif /* HAVE_UNISTD_H */
34
 
35
#if defined (HAVE_STDLIB_H)
36
#  include <stdlib.h>
37
#else
38
#  include "ansi_stdlib.h"
39
#endif /* HAVE_STDLIB_H */
40
 
41
#if defined (HAVE_STRING_H)
42
#  include <string.h>
43
#else
44
#  include <strings.h>
45
#endif /* !HAVE_STRING_H */
46
 
47
#if defined (HAVE_LIMITS_H)
48
#  include <limits.h>
49
#endif
50
 
51
#if defined (HAVE_FCNTL_H)
52
#include <fcntl.h>
53
#endif
54
#if defined (HAVE_PWD_H)
55
#include <pwd.h>
56
#endif
57
 
58
#include <stdio.h>
59
 
60
#include "rlstdc.h"
61
#include "rlshell.h"
62
#include "xmalloc.h"
63
 
64
#if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS)
65
extern struct passwd *getpwuid PARAMS((uid_t));
66
#endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */
67
 
68
#ifndef NULL
69
#  define NULL 0
70
#endif
71
 
72
#ifndef CHAR_BIT
73
#  define CHAR_BIT 8
74
#endif
75
 
76
/* Nonzero if the integer type T is signed.  */
77
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
78
 
79
/* Bound on length of the string representing an integer value of type T.
80
   Subtract one for the sign bit if T is signed;
81
   302 / 1000 is log10 (2) rounded up;
82
   add one for integer division truncation;
83
   add one more for a minus sign if t is signed.  */
84
#define INT_STRLEN_BOUND(t) \
85
  ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \
86
   + 1 + TYPE_SIGNED (t))
87
 
88
/* All of these functions are resolved from bash if we are linking readline
89
   as part of bash. */
90
 
91
/* Does shell-like quoting using single quotes. */
92
char *
93
sh_single_quote (string)
94
     char *string;
95
{
96
  register int c;
97
  char *result, *r, *s;
98
 
99
  result = (char *)xmalloc (3 + (4 * strlen (string)));
100
  r = result;
101
  *r++ = '\'';
102
 
103
  for (s = string; s && (c = *s); s++)
104
    {
105
      *r++ = c;
106
 
107
      if (c == '\'')
108
        {
109
          *r++ = '\\';  /* insert escaped single quote */
110
          *r++ = '\'';
111
          *r++ = '\'';  /* start new quoted string */
112
        }
113
    }
114
 
115
  *r++ = '\'';
116
  *r = '\0';
117
 
118
  return (result);
119
}
120
 
121
/* Set the environment variables LINES and COLUMNS to lines and cols,
122
   respectively. */
123
void
124
sh_set_lines_and_columns (lines, cols)
125
     int lines, cols;
126
{
127
  char *b;
128
 
129
#if defined (HAVE_SETENV)
130
  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
131
  sprintf (b, "%d", lines);
132
  setenv ("LINES", b, 1);
133
  free (b);
134
 
135
  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
136
  sprintf (b, "%d", cols);
137
  setenv ("COLUMNS", b, 1);
138
  free (b);
139
#else /* !HAVE_SETENV */
140
#  if defined (HAVE_PUTENV)
141
  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
142
  sprintf (b, "LINES=%d", lines);
143
  putenv (b);
144
 
145
  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
146
  sprintf (b, "COLUMNS=%d", cols);
147
  putenv (b);
148
#  endif /* HAVE_PUTENV */
149
#endif /* !HAVE_SETENV */
150
}
151
 
152
char *
153
sh_get_env_value (varname)
154
     const char *varname;
155
{
156
  return ((char *)getenv (varname));
157
}
158
 
159
char *
160
sh_get_home_dir ()
161
{
162
  char *home_dir;
163
  struct passwd *entry;
164
 
165
  home_dir = (char *)NULL;
166
#if defined (HAVE_GETPWUID)
167
  entry = getpwuid (getuid ());
168
  if (entry)
169
    home_dir = entry->pw_dir;
170
#endif
171
  return (home_dir);
172
}
173
 
174
#if !defined (O_NDELAY)
175
#  if defined (FNDELAY)
176
#    define O_NDELAY FNDELAY
177
#  endif
178
#endif
179
 
180
int
181
sh_unset_nodelay_mode (fd)
182
     int fd;
183
{
184
#if defined (HAVE_FCNTL)
185
  int flags, bflags;
186
 
187
  if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
188
    return -1;
189
 
190
  bflags = 0;
191
 
192
#ifdef O_NONBLOCK
193
  bflags |= O_NONBLOCK;
194
#endif
195
 
196
#ifdef O_NDELAY
197
  bflags |= O_NDELAY;
198
#endif
199
 
200
  if (flags & bflags)
201
    {
202
      flags &= ~bflags;
203
      return (fcntl (fd, F_SETFL, flags));
204
    }
205
#endif
206
 
207
  return 0;
208
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.