]> git.sur5r.net Git - openocd/blobdiff - src/helper/fileio.c
- only some cosmetic changes, convert \r\n to unix
[openocd] / src / helper / fileio.c
index 3a760cd82f8ba042c51e931fd35d9ed6a52a9d8c..3ee0b18bc6651f6d58abc7e3b479ca2c0319dd83 100644 (file)
@@ -97,9 +97,14 @@ int fileio_open_local(fileio_t *fileio)
                        return ERROR_FILEIO_OPERATION_FAILED;
                }
        }
-       
+
+       /* win32 always opens in binary mode */
+#ifndef _WIN32
        if (fileio->type == FILEIO_BINARY)
+#endif
+       {
                strcat(access, "b");
+       }
        
        if (!(fileio_local->file = fopen(fileio->url, access)))
        {
@@ -258,6 +263,50 @@ int fileio_read(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_read)
        }
 }
 
+int fileio_read_u32(fileio_t *fileio, u32 *data)
+{
+       u8 buf[4];
+       u32 size_read;
+       int retval;
+       
+       switch (fileio->location)
+       {
+               case FILEIO_LOCAL:
+                       if ((retval = fileio_local_read(fileio, 4, buf, &size_read)) != ERROR_OK)
+                               return retval;
+                       *data = be_to_h_u32(buf);
+                       break;
+               default:
+                       ERROR("BUG: should never get here");
+                       exit(-1);
+       }
+       
+       return ERROR_OK;
+}
+
+int fileio_local_fgets(fileio_t *fileio, u32 size, u8 *buffer)
+{
+       fileio_local_t *fileio_local = fileio->location_private;
+       
+       if( fgets(buffer, size, fileio_local->file) == NULL)
+               return ERROR_FILEIO_OPERATION_FAILED;
+       
+       return ERROR_OK;
+}
+
+int fileio_fgets(fileio_t *fileio, u32 size, u8 *buffer)
+{
+       switch (fileio->location)
+       {
+               case FILEIO_LOCAL:
+                       return fileio_local_fgets(fileio, size, buffer);
+                       break;
+               default:
+                       ERROR("BUG: should never get here");
+                       exit(-1);
+       }
+}
+
 int fileio_local_write(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_written)
 {
        fileio_local_t *fileio_local = fileio->location_private;
@@ -269,10 +318,37 @@ int fileio_local_write(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_written
 
 int fileio_write(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_written)
 {
+       int retval;
+       
+       switch (fileio->location)
+       {
+               case FILEIO_LOCAL:
+                       retval = fileio_local_write(fileio, size, buffer, size_written);
+                       break;
+               default:
+                       ERROR("BUG: should never get here");
+                       exit(-1);
+       }
+       
+       if (retval == ERROR_OK)
+               fileio->size += *size_written;
+       
+       return retval;;
+}
+
+int fileio_write_u32(fileio_t *fileio, u32 data)
+{
+       u8 buf[4];
+       u32 size_written;
+       int retval;
+       
+       h_u32_to_be(buf, data);
+       
        switch (fileio->location)
        {
                case FILEIO_LOCAL:
-                       return fileio_local_write(fileio, size, buffer, size_written);
+                       if ((retval = fileio_local_write(fileio, 4, buf, &size_written)) != ERROR_OK)
+                               return retval;
                        break;
                default:
                        ERROR("BUG: should never get here");