command_handler: change to 'argc' to CMD_ARGC
[fw/openocd] / src / helper / ioutil.c
index 8fdbb2b66facff436898270543b9a5da3defb826..2e8229c5af7b3d07d2db962c07dcffbb2290a8f9 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2007-2008 by Øyvind Harboe                              *
+ *   Copyright (C) 2007-2008 by Øyvind Harboe                              *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
 #endif
 
 #include "log.h"
-#include "types.h"
-#include "configuration.h"
-#include "target.h"
-
-#include "command.h"
-
-#include <time_support.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <strings.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#if !BUILD_ECOSBOARD
-#include <malloc.h>
-#endif
-#include <errno.h>
-
+#include "time_support.h"
 
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <netinet/tcp.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <net/if.h>
+#ifdef HAVE_ARPA_INET_H
 #include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/socket.h>
+#endif
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#ifdef HAVE_NETDB_H
 #include <netdb.h>
-#include <netinet/in.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <string.h>
-
-#if !defined(__CYGWIN__)
+#endif
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+//#ifdef HAVE_NETINET_TCP_H
+//#include <netinet/tcp.h>
+//#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_IFADDRS_H
 #include <ifaddrs.h>
 #endif
+#ifdef HAVE_MALLOC_H
+#if !BUILD_ECOSBOARD
+#include <malloc.h>
+#endif
+#endif
 
-#include <unistd.h>
-#include <stdio.h>
 
-int handle_rm_command(struct command_context_s *cmd_ctx, char *cmd,
-               char **args, int argc)
+COMMAND_HANDLER(handle_rm_command)
 {
-       if (argc != 1)
+       if (CMD_ARGC != 1)
        {
                command_print(cmd_ctx, "rm <filename>");
                return ERROR_INVALID_ARGUMENTS;
@@ -96,12 +83,12 @@ int loadFile(const char *fileName, void **data, size_t *len)
 
        FILE * pFile;
        pFile = fopen(fileName,"rb");
-       if (pFile==NULL)
+       if (pFile == NULL)
        {
                LOG_ERROR("Can't open %s\n", fileName);
                return ERROR_FAIL;
        }
-       if (fseek(pFile, 0, SEEK_END)!=0)
+       if (fseek(pFile, 0, SEEK_END) != 0)
        {
                LOG_ERROR("Can't open %s\n", fileName);
                fclose(pFile);
@@ -116,14 +103,14 @@ int loadFile(const char *fileName, void **data, size_t *len)
        }
        *len = fsize;
 
-       if (fseek(pFile, 0, SEEK_SET)!=0)
+       if (fseek(pFile, 0, SEEK_SET) != 0)
        {
                LOG_ERROR("Can't open %s\n", fileName);
                fclose(pFile);
                return ERROR_FAIL;
        }
        *data = malloc(*len + 1);
-       if (*data==NULL)
+       if (*data == NULL)
        {
                LOG_ERROR("Can't open %s\n", fileName);
                fclose(pFile);
@@ -146,12 +133,9 @@ int loadFile(const char *fileName, void **data, size_t *len)
        return ERROR_OK;
 }
 
-
-
-int handle_cat_command(struct command_context_s *cmd_ctx, char *cmd,
-               char **args, int argc)
+COMMAND_HANDLER(handle_cat_command)
 {
-       if (argc != 1)
+       if (CMD_ARGC != 1)
        {
                command_print(cmd_ctx, "cat <filename>");
                return ERROR_INVALID_ARGUMENTS;
@@ -164,7 +148,7 @@ int handle_cat_command(struct command_context_s *cmd_ctx, char *cmd,
        int retval = loadFile(args[0], &data, &len);
        if (retval == ERROR_OK)
        {
-               command_print(cmd_ctx, "%s", data);
+               command_print(cmd_ctx, "%s", (char *)data);
                free(data);
        }
        else
@@ -174,10 +158,10 @@ int handle_cat_command(struct command_context_s *cmd_ctx, char *cmd,
 
        return ERROR_OK;
 }
-int handle_trunc_command(struct command_context_s *cmd_ctx, char *cmd,
-               char **args, int argc)
+
+COMMAND_HANDLER(handle_trunc_command)
 {
-       if (argc != 1)
+       if (CMD_ARGC != 1)
        {
                command_print(cmd_ctx, "trunc <filename>");
                return ERROR_INVALID_ARGUMENTS;
@@ -191,13 +175,12 @@ int handle_trunc_command(struct command_context_s *cmd_ctx, char *cmd,
        return ERROR_OK;
 }
 
-
-int handle_meminfo_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_meminfo_command)
 {
        static int prev = 0;
        struct mallinfo info;
 
-       if (argc != 0)
+       if (CMD_ARGC != 0)
        {
                command_print(cmd_ctx, "meminfo");
                return ERROR_INVALID_ARGUMENTS;
@@ -211,49 +194,54 @@ int handle_meminfo_command(struct command_context_s *cmd_ctx, char *cmd, char **
        }
        prev = info.fordblks;
 
-       command_print(cmd_ctx, "Available ram:   %d", info.fordblks );
+       command_print(cmd_ctx, "Available ram:   %d", info.fordblks);
 
        return ERROR_OK;
 }
 
 
-int handle_append_command(struct command_context_s *cmd_ctx, char *cmd,
-               char **args, int argc)
+COMMAND_HANDLER(handle_append_command)
 {
-       if (argc < 1)
+       if (CMD_ARGC < 1)
        {
                command_print(cmd_ctx,
                                "append <filename> [<string1>, [<string2>, ...]]");
                return ERROR_INVALID_ARGUMENTS;
        }
 
+       int retval = ERROR_FAIL;
        FILE *config_file = NULL;
        config_file = fopen(args[0], "a");
        if (config_file != NULL)
        {
-               int i;
                fseek(config_file, 0, SEEK_END);
 
-               for (i = 1; i < argc; i++)
+               unsigned i;
+               for (i = 1; i < CMD_ARGC; i++)
                {
-                       fwrite(args[i], strlen(args[i]), 1, config_file);
-                       if (i != argc - 1)
+                       if (fwrite(args[i], 1, strlen(args[i]), config_file) != strlen(args[i]))
+                               break;
+                       if (i != CMD_ARGC - 1)
                        {
-                               fwrite(" ", 1, 1, config_file);
+                               if (fwrite(" ", 1, 1, config_file) != 1)
+                                       break;
                        }
                }
-               fwrite("\n", 1, 1, config_file);
+               if ((i == CMD_ARGC) && (fwrite("\n", 1, 1, config_file) == 1))
+               {
+                       retval = ERROR_OK;
+               }
                fclose(config_file);
        }
 
-       return ERROR_OK;
+       return retval;
 }
 
 
 
-int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_cp_command)
 {
-       if (argc != 2)
+       if (CMD_ARGC != 2)
        {
                return ERROR_INVALID_ARGUMENTS;
        }
@@ -280,7 +268,7 @@ int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
                        chunk = maxChunk;
                }
 
-               if ((retval==ERROR_OK)&&(fwrite(((char *)data)+pos, 1, chunk, f)!=chunk))
+               if ((retval == ERROR_OK) && (fwrite(((char *)data) + pos, 1, chunk, f) != chunk))
                        retval = ERROR_INVALID_ARGUMENTS;
 
                if (retval != ERROR_OK)
@@ -288,7 +276,7 @@ int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
                        break;
                }
 
-               command_print(cmd_ctx, "%d", len - pos);
+               command_print(cmd_ctx, "%zu", len - pos);
 
                pos += chunk;
 
@@ -329,36 +317,36 @@ void copyfile(char *name2, char *name1)
        int fd1, fd2;
        ssize_t done, wrote;
 
-       fd1 = open(name1, O_WRONLY | O_CREAT);
+       fd1 = open(name1, O_WRONLY | O_CREAT, 0664);
        if (fd1 < 0)
-               SHOW_RESULT( open, fd1 );
+               SHOW_RESULT(open, fd1);
 
        fd2 = open(name2, O_RDONLY);
        if (fd2 < 0)
-               SHOW_RESULT( open, fd2 );
+               SHOW_RESULT(open, fd2);
 
        for (;;)
        {
-               done = read(fd2, buf, IOSIZE );
+               done = read(fd2, buf, IOSIZE);
                if (done < 0)
                {
-                       SHOW_RESULT( read, done );
+                       SHOW_RESULT(read, done);
                        break;
                }
 
-        if( done == 0 ) break;
+        if (done == 0) break;
 
                wrote = write(fd1, buf, done);
-        if( wrote != done ) SHOW_RESULT( write, wrote );
+        if (wrote != done) SHOW_RESULT(write, wrote);
 
-        if( wrote != done ) break;
+        if (wrote != done) break;
        }
 
        err = close(fd1);
-    if( err < 0 ) SHOW_RESULT( close, err );
+    if (err < 0) SHOW_RESULT(close, err);
 
        err = close(fd2);
-    if( err < 0 ) SHOW_RESULT( close, err );
+    if (err < 0) SHOW_RESULT(close, err);
 
 }
 
@@ -369,7 +357,7 @@ void copydir(char *name, char *destdir)
        DIR *dirp;
 
        dirp = opendir(destdir);
-       if (dirp==NULL)
+       if (dirp == NULL)
        {
                mkdir(destdir, 0777);
        } else
@@ -378,7 +366,7 @@ void copydir(char *name, char *destdir)
        }
 
        dirp = opendir(name);
-    if( dirp == NULL ) SHOW_RESULT( opendir, -1 );
+    if (dirp == NULL) SHOW_RESULT(opendir, -1);
 
        for (;;)
        {
@@ -427,7 +415,7 @@ void copydir(char *name, char *destdir)
        }
 
        err = closedir(dirp);
-    if( err < 0 ) SHOW_RESULT( stat, err );
+    if (err < 0) SHOW_RESULT(stat, err);
 }
 
 
@@ -483,7 +471,7 @@ zylinjtag_Jim_Command_ls(Jim_Interp *interp,
                if (entry == NULL)
                        break;
 
-               if ((strcmp(".", entry->d_name)==0)||(strcmp("..", entry->d_name)==0))
+               if ((strcmp(".", entry->d_name) == 0)||(strcmp("..", entry->d_name) == 0))
                        continue;
 
         Jim_ListAppendElement(interp, objPtr, Jim_NewStringObj(interp, entry->d_name, strlen(entry->d_name)));
@@ -495,32 +483,6 @@ zylinjtag_Jim_Command_ls(Jim_Interp *interp,
        return JIM_OK;
 }
 
-int handle_peek_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-       if (argc != 1)
-       {
-               return ERROR_COMMAND_SYNTAX_ERROR;
-       }
-       unsigned long addr = strtoul(args[0], NULL, 0);
-       volatile unsigned *address = (volatile unsigned *)addr;
-       unsigned value = *address;
-       command_print(cmd_ctx, "0x%x : 0x%x", address, value);
-       return ERROR_OK;
-}
-
-int handle_poke_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-       if (argc != 2)
-       {
-               return ERROR_INVALID_ARGUMENTS;
-       }
-       unsigned long addr = strtoul(args[0], NULL, 0);
-       volatile int *address = (volatile int *)addr;
-       int value=strtoul(args[1], NULL, 0);
-       *address=value;
-       return ERROR_OK;
-}
-
 static int
 zylinjtag_Jim_Command_peek(Jim_Interp *interp,
                                    int argc,
@@ -645,7 +607,7 @@ static int zylinjtag_Jim_Command_mac(Jim_Interp *interp, int argc,
        {
                //if (ifr->ifr_addr.sa_family == AF_INET)
                {
-                       if (strcmp("eth0", ifr->ifr_name)!=0)
+                       if (strcmp("eth0", ifr->ifr_name) != 0)
                                continue;
                        strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
                        if (ioctl(SockFD, SIOCGIFHWADDR, &ifreq) < 0)
@@ -683,7 +645,7 @@ static int zylinjtag_Jim_Command_mac(Jim_Interp *interp, int argc,
 
 
 
-int ioutil_init(struct command_context_s *cmd_ctx)
+int ioutil_init(struct command_context *cmd_ctx)
 {
        register_command(cmd_ctx, NULL, "rm", handle_rm_command, COMMAND_ANY,
                        "remove file");