Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Sunxi Tools
Commits
66acd46f
Commit
66acd46f
authored
Aug 10, 2012
by
Henrik Nordstrom
Browse files
fel: Correct fel write operation on files > 8K
parent
5142a242
Changes
2
Show whitespace changes
Inline
Side-by-side
fel-copy.c
0 → 100644
View file @
66acd46f
/*
* (C) Copyright 2011 Henrik Nordstrom <henrik@henriknordstrom.net>
*
* 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 the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
/*
Build instructions:
arm-none-linux-gnueabi-gcc -g -Os -fno-common -ffixed-r8 -msoft-float -fno-builtin -ffreestanding -nostdinc -mno-thumb-interwork -Wall -Wstrict-prototypes -fno-stack-protector -Wno-format-nonliteral -Wno-format-security -fno-toplevel-reorder fel-copy.c -c
arm-none-linux-gnueabi-objcopy -O binary fel-copy.o fel-copy.bin
Parameters:
0x2100 Destination address
0x2104 Source address
0x2108 Length
Source address is updated, allowing repeated copy to same destination
*/
#define CONFIG_BASE 0x2100
void
copy
(
void
)
{
unsigned
long
*
b
=
(
void
*
)
CONFIG_BASE
;
unsigned
long
**
ptr
=
(
void
*
)
b
++
;
unsigned
long
*
a
=
*
ptr
;
unsigned
long
i
=
*
b
++
;
while
(
i
--
)
{
*
b
++
=
*
a
++
;
}
*
ptr
=
a
;
}
fel.c
View file @
66acd46f
...
...
@@ -225,12 +225,11 @@ void *load_file(const char *name, size_t *size)
assert
(
in
);
while
(
1
)
{
ssize_t
n
=
fread
(
buf
+
offset
,
1
,
bufsize
-
offset
,
in
)
;
a
ss
ert
(
n
>=
0
);
ssize_t
le
n
=
bufsize
-
offset
;
ss
ize_t
n
=
fread
(
buf
+
offset
,
1
,
len
,
in
);
offset
+=
n
;
if
(
bufsize
>=
offset
)
{
if
(
n
<
len
)
break
;
}
bufsize
<<=
1
;
buf
=
realloc
(
buf
,
bufsize
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment