]>
git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - db/command.c
2 * Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of version 2 of the GNU General Public License as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it would be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * Further, this software is distributed without any warranty that it is
13 * free of the rightful claim of any third person regarding infringement
14 * or the like. Any license provided herein, whether implied or
15 * otherwise, applies only to this software file. Patent licenses, if
16 * any, provided herein do not apply to combinations of this program with
17 * other software, or any other product whatsoever.
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write the Free Software Foundation, Inc., 59
21 * Temple Place - Suite 330, Boston MA 02111-1307, USA.
23 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24 * Mountain View, CA 94043, or:
28 * For further information regarding this notice, see:
30 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
69 static int cmd_compare(const void *a
, const void *b
);
72 cmd_compare(const void *a
, const void *b
)
74 return strcmp(((const cmdinfo_t
*)a
)->name
,
75 ((const cmdinfo_t
*)b
)->name
);
82 cmdtab
= xrealloc((void *)cmdtab
, ++ncmds
* sizeof(*cmdtab
));
83 cmdtab
[ncmds
- 1] = *ci
;
84 qsort(cmdtab
, ncmds
, sizeof(*cmdtab
), cmd_compare
);
96 ct
= find_command(cmd
);
98 dbprintf("command %s not found\n", cmd
);
101 if (argc
-1 < ct
->argmin
|| (ct
->argmax
!= -1 && argc
-1 > ct
->argmax
)) {
102 dbprintf("bad argument count %d to %s, expected ", argc
-1, cmd
);
103 if (ct
->argmax
== -1)
104 dbprintf("at least %d", ct
->argmin
);
105 else if (ct
->argmin
== ct
->argmax
)
106 dbprintf("%d", ct
->argmin
);
108 dbprintf("between %d and %d", ct
->argmin
, ct
->argmax
);
109 dbprintf(" arguments\n");
113 return ct
->cfunc(argc
, argv
);
122 for (ct
= cmdtab
; ct
< &cmdtab
[ncmds
]; ct
++) {
123 if (strcmp(ct
->name
, cmd
) == 0 ||
124 (ct
->altname
&& strcmp(ct
->altname
, cmd
) == 0))
125 return (const cmdinfo_t
*)ct
;