- Fixes '!=' whitespace
[fw/openocd] / src / helper / ioutil.c
index 80e43d4ead5b331ef1fc47ea846b2ec28246657a..de4e880ace19a5f6321069a4f687428b9c902b70 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
 
-#include <unistd.h>
-#include <stdio.h>
 
 int handle_rm_command(struct command_context_s *cmd_ctx, char *cmd,
                char **args, int argc)
@@ -88,8 +77,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)
@@ -97,27 +89,28 @@ int loadFile(const char *fileName, void **data, int *len)
                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);
                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)
+       if (fseek(pFile, 0, SEEK_SET) != 0)
        {
                LOG_ERROR("Can't open %s\n", fileName);
                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 +126,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 +147,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 +215,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 +225,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], 1, strlen(args[i]), 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 +254,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,17 +264,17 @@ 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;
                }
 
-               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)
@@ -283,7 +282,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;
 
@@ -324,7 +323,7 @@ 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 );
 
@@ -341,19 +340,19 @@ void copyfile(char *name2, char *name1)
                        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 );
 
 }
 
@@ -373,7 +372,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 (;;)
        {
@@ -422,7 +421,7 @@ void copydir(char *name, char *destdir)
        }
 
        err = closedir(dirp);
-    if( err < 0 ) SHOW_RESULT( stat, err );
+    if ( err < 0 ) SHOW_RESULT( stat, err );
 }
 
 
@@ -490,30 +489,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 +539,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 +573,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)
@@ -635,7 +613,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)