]> git.sur5r.net Git - openocd/blobdiff - src/helper/ioutil.c
Eliminate MixedCaps symbol from public JTAG TAP API:
[openocd] / src / helper / ioutil.c
index 80e43d4ead5b331ef1fc47ea846b2ec28246657a..c07bd9b278862107f0d43ecef72bddc6011366a2 100644 (file)
 #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>
-
-
+#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
+//#ifdef HAVE_STRINGS_H
+//#include <strings.h>
+//#endif
 
-#include <unistd.h>
-#include <stdio.h>
 
 int handle_rm_command(struct command_context_s *cmd_ctx, char *cmd,
                char **args, int argc)
@@ -88,8 +80,11 @@ int handle_rm_command(struct command_context_s *cmd_ctx, char *cmd,
 
 /* loads a file and returns a pointer to it in memory. The file contains
  * a 0 byte(sentinel) after len bytes - the length of the file. */
-int loadFile(const char *fileName, void **data, int *len)
+int loadFile(const char *fileName, void **data, size_t *len)
 {
+       // ensure returned length is always sane
+       *len = 0;
+
        FILE * pFile;
        pFile = fopen(fileName,"rb");
        if (pFile==NULL)
@@ -103,13 +98,14 @@ int loadFile(const char *fileName, void **data, int *len)
                fclose(pFile);
                return ERROR_FAIL;
        }
-       *len=ftell(pFile);
-       if (*len==-1)
+       long fsize = ftell(pFile);
+       if (fsize == -1)
        {
                LOG_ERROR("Can't open %s\n", fileName);
                fclose(pFile);
                return ERROR_FAIL;
        }
+       *len = fsize;
 
        if (fseek(pFile, 0, SEEK_SET)!=0)
        {
@@ -117,7 +113,7 @@ int loadFile(const char *fileName, void **data, int *len)
                fclose(pFile);
                return ERROR_FAIL;
        }
-       *data=malloc(*len+1);
+       *data = malloc(*len + 1);
        if (*data==NULL)
        {
                LOG_ERROR("Can't open %s\n", fileName);
@@ -133,12 +129,12 @@ int loadFile(const char *fileName, void **data, int *len)
                return ERROR_FAIL;
        }
        fclose(pFile);
-       *(((char *)(*data))+*len)=0; /* sentinel */
-
-       return ERROR_OK;
-
 
+       // 0-byte after buffer (not included in *len) serves as a sentinel
+       char *buf = (char *)*data;
+       buf[*len] = 0;
 
+       return ERROR_OK;
 }
 
 
@@ -154,12 +150,12 @@ int handle_cat_command(struct command_context_s *cmd_ctx, char *cmd,
 
        // NOTE!!! we only have line printing capability so we print the entire file as a single line.
        void *data;
-       int len;
+       size_t len;
 
        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
@@ -222,6 +218,7 @@ int handle_append_command(struct command_context_s *cmd_ctx, char *cmd,
                return ERROR_INVALID_ARGUMENTS;
        }
 
+       int retval=ERROR_FAIL;
        FILE *config_file = NULL;
        config_file = fopen(args[0], "a");
        if (config_file != NULL)
@@ -231,17 +228,22 @@ int handle_append_command(struct command_context_s *cmd_ctx, char *cmd,
 
                for (i = 1; i < argc; i++)
                {
-                       fwrite(args[i], strlen(args[i]), 1, config_file);
+                       if (fwrite(args[i], strlen(args[i]), 1, config_file)!=strlen(args[i]))
+                               break;
                        if (i != argc - 1)
                        {
-                               fwrite(" ", 1, 1, config_file);
+                               if (fwrite(" ", 1, 1, config_file)!=1)
+                                       break;
                        }
                }
-               fwrite("\n", 1, 1, config_file);
+               if ((i==argc)&&(fwrite("\n", 1, 1, config_file)==1))
+               {
+                       retval=ERROR_OK;
+               }
                fclose(config_file);
        }
 
-       return ERROR_OK;
+       return retval;
 }
 
 
@@ -255,7 +257,7 @@ int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
 
        // NOTE!!! we only have line printing capability so we print the entire file as a single line.
        void *data;
-       int len;
+       size_t len;
 
        int retval = loadFile(args[0], &data, &len);
        if (retval != ERROR_OK)
@@ -265,11 +267,11 @@ int handle_cp_command(struct command_context_s *cmd_ctx, char *cmd, char **args,
        if (f == NULL)
                retval = ERROR_INVALID_ARGUMENTS;
 
-       int pos = 0;
+       size_t pos = 0;
        for (;;)
        {
-               int chunk = len - pos;
-               static const int maxChunk = 512 * 1024; // ~1/sec
+               size_t chunk = len - pos;
+               static const size_t maxChunk = 512 * 1024; // ~1/sec
                if (chunk > maxChunk)
                {
                        chunk = maxChunk;
@@ -490,30 +492,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;
-       }
-       volatile int *address=(volatile int *)strtoul(args[0], NULL, 0);
-       int 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;
-       }
-       volatile int *address=(volatile int *)strtoul(args[0], NULL, 0);
-       int value=strtoul(args[1], NULL, 0);
-       *address=value;
-       return ERROR_OK;
-}
-
 static int
 zylinjtag_Jim_Command_peek(Jim_Interp *interp,
                                    int argc,
@@ -564,6 +542,7 @@ zylinjtag_Jim_Command_poke(Jim_Interp *interp,
 static int zylinjtag_Jim_Command_ip(Jim_Interp *interp, int argc,
                Jim_Obj * const *argv)
 {
+#if !defined(__CYGWIN__)
        Jim_Obj *tclOutput = Jim_NewStringObj(interp, "", 0);
 
        struct ifaddrs *ifa = NULL, *ifp = NULL;
@@ -597,13 +576,15 @@ static int zylinjtag_Jim_Command_ip(Jim_Interp *interp, int argc,
        }
 
        freeifaddrs(ifp);
-
+#else
+       Jim_Obj *tclOutput = Jim_NewStringObj(interp, "fixme!!!", 0);
+       LOG_ERROR("NOT IMPLEMENTED!!!");
+#endif
        Jim_SetResult(interp, tclOutput);
 
        return JIM_OK;
 }
 
-
 /* not so pretty code to fish out eth0 mac address */
 static int zylinjtag_Jim_Command_mac(Jim_Interp *interp, int argc,
                Jim_Obj * const *argv)