2009-01-06 Sandra Loosemore <sandra@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / gdbserver / utils.c
CommitLineData
c906108c 1/* General utility routines for the remote server for GDB.
6aba47ca 2 Copyright (C) 1986, 1989, 1993, 1995, 1996, 1997, 1999, 2000, 2002, 2003,
0fb0cc75 3 2007, 2008, 2009 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "server.h"
21#include <stdio.h>
22#include <string.h>
68070c10
PA
23#include <stdlib.h>
24#if HAVE_ERRNO_H
25#include <errno.h>
26#endif
27#if HAVE_MALLOC_H
28#include <malloc.h>
29#endif
c906108c
SS
30
31/* Generally useful subroutines used throughout the program. */
32
bca929d3
DE
33static void malloc_failure (size_t size) ATTR_NORETURN;
34
35static void
36malloc_failure (size_t size)
37{
38 fprintf (stderr, "gdbserver: ran out of memory while trying to allocate %lu bytes\n",
39 (unsigned long) size);
40 exit (1);
41}
42
43/* Allocate memory without fail.
44 If malloc fails, this will print a message to stderr and exit. */
45
46void *
47xmalloc (size_t size)
48{
49 void *newmem;
50
51 if (size == 0)
52 size = 1;
53 newmem = malloc (size);
54 if (!newmem)
55 malloc_failure (size);
56
57 return newmem;
58}
59
60/* Allocate memory without fail and set it to zero.
61 If malloc fails, this will print a message to stderr and exit. */
62
63void *
64xcalloc (size_t nelem, size_t elsize)
65{
66 void *newmem;
67
68 if (nelem == 0 || elsize == 0)
69 nelem = elsize = 1;
70
71 newmem = calloc (nelem, elsize);
72 if (!newmem)
73 malloc_failure (nelem * elsize);
74
75 return newmem;
76}
77
78/* Copy a string into a memory buffer.
79 If malloc fails, this will print a message to stderr and exit. */
80
81char *
82xstrdup (const char *s)
83{
84 char *ret = strdup (s);
85 if (ret == NULL)
86 malloc_failure (strlen (s) + 1);
87 return ret;
88}
89
c906108c
SS
90/* Print the system error message for errno, and also mention STRING
91 as the file name for which the error was encountered.
92 Then return to command level. */
93
94void
fba45db2 95perror_with_name (char *string)
c906108c 96{
5c44784c 97 const char *err;
c906108c
SS
98 char *combined;
99
43d5792c
DJ
100 err = strerror (errno);
101 if (err == NULL)
c906108c
SS
102 err = "unknown error";
103
104 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
105 strcpy (combined, string);
106 strcat (combined, ": ");
107 strcat (combined, err);
108
109 error ("%s.", combined);
110}
111
112/* Print an error message and return to command level.
113 STRING is the error message, used as a fprintf string,
114 and ARG is passed as an argument to it. */
115
0729219d 116void
c5aa993b 117error (const char *string,...)
c906108c
SS
118{
119 extern jmp_buf toplevel;
120 va_list args;
c906108c 121 va_start (args, string);
c906108c 122 fflush (stdout);
c906108c 123 vfprintf (stderr, string, args);
c906108c 124 fprintf (stderr, "\n");
c5aa993b 125 longjmp (toplevel, 1);
c906108c
SS
126}
127
128/* Print an error message and exit reporting failure.
129 This is for a error that we cannot continue from.
130 STRING and ARG are passed to fprintf. */
131
132/* VARARGS */
0729219d 133void
0a30fbc4 134fatal (const char *string,...)
c906108c
SS
135{
136 va_list args;
c906108c 137 va_start (args, string);
24a09b5f 138 fprintf (stderr, "gdbserver: ");
c906108c
SS
139 vfprintf (stderr, string, args);
140 fprintf (stderr, "\n");
141 va_end (args);
142 exit (1);
143}
0a30fbc4
DJ
144
145/* VARARGS */
146void
147warning (const char *string,...)
148{
149 va_list args;
150 va_start (args, string);
24a09b5f 151 fprintf (stderr, "gdbserver: ");
0a30fbc4
DJ
152 vfprintf (stderr, string, args);
153 fprintf (stderr, "\n");
154 va_end (args);
155}
This page took 0.598836 seconds and 4 git commands to generate.