* 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. *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
/* this file contains various functionality useful to standalone systems */
#include <ifaddrs.h>
#endif
#ifdef HAVE_MALLOC_H
-#if !BUILD_ECOSBOARD
#include <malloc.h>
#endif
-#endif
/* 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, size_t *len)
+static int load_file(const char *fileName, char **data, size_t *len)
{
/* ensure returned length is always sane */
*len = 0;
fclose(pFile);
/* 0-byte after buffer (not included in *len) serves as a sentinel */
- char *buf = (char *)*data;
- buf[*len] = 0;
+ (*data)[*len] = 0;
return ERROR_OK;
}
/* NOTE!!! we only have line printing capability so we print the entire file as a single
* line. */
- void *data;
+ char *data;
size_t len;
- int retval = loadFile(CMD_ARGV[0], &data, &len);
+ int retval = load_file(CMD_ARGV[0], &data, &len);
if (retval == ERROR_OK) {
- command_print(CMD_CTX, "%s", (char *)data);
+ command_print(CMD_CTX, "%s", data);
free(data);
} else
command_print(CMD_CTX, "%s not found", CMD_ARGV[0]);
return ERROR_OK;
}
+#ifdef HAVE_MALLOC_H
COMMAND_HANDLER(handle_meminfo_command)
{
static int prev;
return ERROR_OK;
}
-
+#endif
COMMAND_HANDLER(handle_append_command)
{
/* NOTE!!! we only have line printing capability so we print the entire file as a single
* line. */
- void *data;
+ char *data;
size_t len;
- int retval = loadFile(CMD_ARGV[0], &data, &len);
+ int retval = load_file(CMD_ARGV[0], &data, &len);
if (retval != ERROR_OK)
return retval;
if (chunk > maxChunk)
chunk = maxChunk;
- if ((retval == ERROR_OK) && (fwrite(((char *)data) + pos, 1, chunk, f) != chunk))
+ if ((retval == ERROR_OK) && (fwrite(data + pos, 1, chunk, f) != chunk))
retval = ERROR_COMMAND_SYNTAX_ERROR;
if (retval != ERROR_OK)
return retval;
}
-#define SHOW_RESULT(a, b) LOG_ERROR(# a " failed %d\n", (int)b)
-
-#define IOSIZE 512
-void copyfile(char *name2, char *name1)
-{
-
- int err;
- char buf[IOSIZE];
- int fd1, fd2;
- ssize_t done, wrote;
-
- fd1 = open(name1, O_WRONLY | O_CREAT, 0664);
- if (fd1 < 0)
- SHOW_RESULT(open, fd1);
-
- fd2 = open(name2, O_RDONLY);
- if (fd2 < 0)
- SHOW_RESULT(open, fd2);
-
- for (;; ) {
- done = read(fd2, buf, IOSIZE);
- if (done < 0) {
- SHOW_RESULT(read, done);
- break;
- }
-
- if (done == 0)
- break;
-
- wrote = write(fd1, buf, done);
- if (wrote != done)
- SHOW_RESULT(write, wrote);
-
- if (wrote != done)
- break;
- }
-
- err = close(fd1);
- if (err < 0)
- SHOW_RESULT(close, err);
-
- err = close(fd2);
- if (err < 0)
- SHOW_RESULT(close, err);
-}
-
-/* utility fn to copy a directory */
-void copydir(char *name, char *destdir)
-{
- int err;
- DIR *dirp;
-
- dirp = opendir(destdir);
- if (dirp == NULL)
- mkdir(destdir, 0777);
- else
- err = closedir(dirp);
-
- dirp = opendir(name);
- if (dirp == NULL)
- SHOW_RESULT(opendir, -1);
-
- for (;; ) {
- struct dirent *entry = readdir(dirp);
-
- if (entry == NULL)
- break;
-
- if (strcmp(entry->d_name, ".") == 0)
- continue;
- if (strcmp(entry->d_name, "..") == 0)
- continue;
-
- int isDir = 0;
- struct stat buf;
- char fullPath[PATH_MAX];
- strncpy(fullPath, name, PATH_MAX);
- strcat(fullPath, "/");
- strncat(fullPath, entry->d_name, PATH_MAX - strlen(fullPath));
-
- if (stat(fullPath, &buf) == -1) {
- LOG_ERROR("unable to read status from %s", fullPath);
- break;
- }
- isDir = S_ISDIR(buf.st_mode) != 0;
-
- if (isDir)
- continue;
-
- /* diag_printf("<INFO>: entry %14s",entry->d_name); */
- char fullname[PATH_MAX];
- char fullname2[PATH_MAX];
-
- strcpy(fullname, name);
- strcat(fullname, "/");
- strcat(fullname, entry->d_name);
-
- strcpy(fullname2, destdir);
- strcat(fullname2, "/");
- strcat(fullname2, entry->d_name);
- /* diag_printf("from %s to %s\n", fullname, fullname2); */
- copyfile(fullname, fullname2);
-
- /* diag_printf("\n"); */
- }
-
- err = closedir(dirp);
- if (err < 0)
- SHOW_RESULT(stat, err);
-}
-
COMMAND_HANDLER(handle_rm_command)
{
if (CMD_ARGC != 1)
return JIM_ERR;
}
- char *name = (char *) Jim_GetString(argv[1], NULL);
+ const char *name = Jim_GetString(argv[1], NULL);
DIR *dirp = NULL;
dirp = opendir(name);
return JIM_OK;
}
+#ifdef HAVE_SYS_IOCTL_H
+#ifdef SIOCGIFHWADDR
/* not so pretty code to fish out eth0 mac address */
static int ioutil_Jim_Command_mac(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
return JIM_ERR;
}
+#endif
+#endif
static const struct command_registration ioutil_command_handlers[] = {
{
.help = "append a variable number of strings to a file",
.usage = "file_name [<string1>, [<string2>, ...]]",
},
+#ifdef HAVE_MALLOC_H
{
.name = "meminfo",
.handler = handle_meminfo_command,
.mode = COMMAND_ANY,
.help = "display free heap space",
},
+#endif
{
.name = "rm",
.mode = COMMAND_ANY,
.help = "show a listing of files",
.usage = "dirname",
},
+#ifdef HAVE_SYS_IOCTL_H
+#ifdef SIOCGIFHWADDR
{
.name = "mac",
.mode = COMMAND_ANY,
.jim_handler = ioutil_Jim_Command_mac,
.help = "show MAC address",
},
+#endif
+#endif
{
.name = "ip",
.jim_handler = ioutil_Jim_Command_ip,