void attribute_shutdown(enum osl_close_flags flags);
void get_attribute_bitmap(uint64_t *atts, char *buf);
int get_attribute_bitnum_by_name(const char *att_name, unsigned char *bitnum);
-int com_lsatt(int fd, int argc, const char **argv);
-int com_setatt(int fd, int argc, const char **argv);
-int com_addatt(int fd, int argc, const char **argv);
-int com_rmatt(int fd, int argc, const char **argv);
int get_attribute_text(uint64_t *atts, const char *delim, char **text);
/* aft */
int get_audio_file_path_of_row(const struct osl_row *row, char **path);
int get_afsi_object_of_row(const void *row, struct osl_object *obj);
int audio_file_loop(void *private_data, osl_rbtree_loop_func *func);
-int com_touch(int fd, int argc, const char **argv);
-int com_add(int fd, int argc, const char **argv);
-int com_afs_ls(int fd, int argc, const char **argv);
-int com_afs_rm(int fd, int argc, const char **argv);
/* mood */
int mood_open(char *mood_name);
#define DECLARE_BLOB_SYMBOLS(table_name, cmd_prefix) \
int table_name ## _init(struct table_info *ti); \
void table_name ## _shutdown(enum osl_close_flags flags); \
- int com_add ## cmd_prefix(int fd, int argc, const char **argv); \
- int com_rm ## cmd_prefix(int fd, int argc, const char **argv); \
- int com_cat ## cmd_prefix(int fd, int argc, const char **argv); \
- int com_ls ## cmd_prefix(int fd, int argc, const char **argv); \
- int com_mv ## cmd_prefix(int fd, int argc, const char **argv); \
int cmd_prefix ## _get_name_by_id(uint32_t id, char **name); \
extern struct osl_table *table_name ## _table;
#include "list.h"
#include "user_list.h"
#include "server_command_list.h"
+#include "afs_command_list.h"
/** commands including options must be shorter than this */
#define MAX_COMMAND_LEN 4096
for (; cmd->name; cmd++)
if (!strcmp(cmd->name, name))
return cmd;
+ /* not found, look for commands supported by afs */
+ for (cmd = afs_cmds; cmd; cmd++)
+ if (!strcmp(cmd->name, name))
+ return cmd;
return NULL;
}
mmd_unlock();
ret = send_list_of_commands(fd, cmd, handler);
free(handler);
- return ret;
+ if (ret < 0)
+ return ret;
+ cmd = afs_cmds;
+ ret = send_list_of_commands(fd, cmd, "afs");
}
/* argument given for help */
cmd = get_cmd_ptr(argv[1], &handler);
#!/bin/bash
-dump_array_member()
-{
- echo '{'
- echo ".name = \"$name_txt\","
- if test $line_handler -eq 0; then
- echo ".handler = com_$name_txt,"
- else
- echo ".handler = NULL,"
- echo ".line_handler = com_$name_txt,"
- fi
- if test -n "$perms_txt"; then
- echo ".perms = $perms_txt,"
- fi
- echo ".description = \"$desc_txt\","
- echo ".usage = \"$usage_txt\","
- echo ".help = "
- echo "$help_txt" | sed -e 's/^/\"/g' -e 's/$/\\n\"/g'
- echo '},'
-}
-
read_header()
{
local key value i
array_name=${value%command_list}cmds
;;
SF:)
- source_file="$value"
+ source_files="$value"
;;
AT:)
array_type="$value"
;;
SN:)
section_name="$value"
+ ;;
+ TM:)
+ template_members="$value"
esac
done
if test -z "$header_comment" -o -z "$c_file_comment" \
help_txt=""
perms_txt=""
line_handler=0
+ template=0
+ template_name=""
+ template_prototype=""
mkdir -p man/man1
while read key value; do
case "$key" in
N:)
name_txt="$value"
;;
+ T:)
+ template_name="$value"
+ template=1
+ ;;
+ O:)
+ template_prototype="$value"
+ template=1
+ ;;
P:)
perms_txt="$value"
;;
;;
esac
done
- if test -n "$name_txt" -a -n "$desc_txt" -a -n "$usage_txt" \
- -a -n "$help_txt"; then
- ret=1
- return
+ if test $template -eq 0; then
+ if test -n "$name_txt" -a -n "$desc_txt" -a -n "$usage_txt" \
+ -a -n "$help_txt"; then
+ ret=1
+ return
+ fi
+ else
+ if test -n "$template_name" -a -n "$template_prototype" \
+ -a -n "$name_txt " -a -n "$template_members" \
+ -a -n "$desc_txt" -a -n "$usage_txt" \
+ -a -n "$help_txt"; then
+ ret=1
+ return
+ fi
fi
if test -z "$name_txt" -a -z "$desc_txt" -a -z "$usage_txt" \
-a -z "$help_txt"; then
return
fi
ret=-1
- return
+ #return
echo "!ERROR!"
echo "N: $name_txt"
echo "D: $desc_txt"
echo "S: $usage_txt"
echo "P: $perms_txt"
echo "H: $help_txt"
+ echo "O: $template_prototype"
}
dump_man()
done
}
+dump_proto()
+{
+ local source_file match=""
+
+ echo '/**'
+ echo " * $desc_txt"
+ echo ' *'
+ echo ' * \param fd The file descriptor to send output to.'
+ if test $line_handler -eq 0; then
+ echo ' * \param argc The number of arguments.'
+ echo ' * \param argv The argument vector.'
+ else
+ echo ' * \param cmdline The full command line.'
+ fi
+ echo ' * '
+ echo " * Usage: $usage_txt"
+ echo ' * '
+ echo "$help_txt" | sed -e 's/^/ * /g'
+ echo ' */'
+ if test -n "$prototype"; then
+ echo "$prototype"
+ echo
+ return
+ fi
+ for source_file in $source_files; do
+ match=$(grep "^\(__noreturn \)*int com_$name_txt(" $source_file | head -n 1 | sed -e 's/$/;/1')
+ if test -n "$match"; then
+ echo "$match"
+ break
+ fi
+ done
+ echo
+}
+
+dump_array_member()
+{
+ echo '{'
+ echo ".name = \"$name_txt\","
+ if test $line_handler -eq 0; then
+ echo ".handler = com_$name_txt,"
+ else
+ echo ".handler = NULL,"
+ echo ".line_handler = com_$name_txt,"
+ fi
+ if test -n "$perms_txt"; then
+ echo ".perms = $perms_txt,"
+ fi
+ echo ".description = \"$desc_txt\","
+ echo ".usage = \"$usage_txt\","
+ echo ".help = "
+ echo "$help_txt" | sed -e 's/^/\"/g' -e 's/$/\\n\"/g'
+ echo '},'
+}
+
+
+template_loop()
+{
+ local t_name="$name_txt"
+ local t_perms="$perms_txt"
+ local t_desc="$desc_txt"
+ local t_usage="$usage_txt"
+ local t_help="$help_txt"
+ local t_source_files="$source_files"
+ local member
+ for member in $template_members; do
+ local sed_cmd="sed -e s/@member@/$member/g"
+ #echo "sed_cmd: $sed_cmd"
+ name_txt=$(echo $t_name | $sed_cmd)
+ #name_txt="$tname"
+ perms_txt=$(echo $t_perms | $sed_cmd)
+ desc_txt=$(echo $t_desc | $sed_cmd)
+ usage_txt=$(echo $t_usage | $sed_cmd)
+ help_txt=$(echo $t_help | $sed_cmd)
+ prototype=$(echo "$template_prototype" | $sed_cmd)
+ $1
+ done
+
+}
+
com_c_file()
{
echo "/** \file $output_file.c $c_file_comment */"
if test $ret -eq 0; then
break
fi
- dump_array_member
+ if test $template -eq 0; then
+ dump_array_member
+ continue
+ fi
+ template_loop dump_array_member
done
echo '{.name = NULL}};'
}
-dump_proto()
-{
- echo '/**'
- echo " * $desc_txt"
- echo ' *'
- echo ' * \param fd the file descriptor to send output to'
- if test $line_handler -eq 0; then
- echo ' * \param argc the number of arguments'
- echo ' * \param argv the argument vector'
- else
- echo ' * \param cmdline the full command line'
- fi
- echo ' * '
- echo " * usage: $usage_txt"
- echo ' * '
- echo "$help_txt" | sed -e 's/^/ * /g'
- echo ' */'
- grep "^\(__noreturn \)*int com_$name_txt(" $source_file | sed -e 's/$/;/1'
- echo
-}
-
com_header()
{
echo "/** \file $output_file.h $header_comment */"
if test $ret -eq 0; then
break
fi
- dump_proto
+ if test $template -eq 0; then
+ dump_proto
+ continue
+ fi
+ template_loop dump_proto
done
}