diff options
author | germeier <germeier> | 2002-10-27 17:37:24 +0000 |
---|---|---|
committer | germeier <germeier> | 2002-10-27 17:37:24 +0000 |
commit | 037e02905b802686be908d4f8cd989f0c5002b99 (patch) | |
tree | 2491218ec9c05b4fd54d12dfe21bf5c0674584e2 /libmpio/directory.c | |
parent | 13b7579bd45e89304b8697a6fb471bf0524f49d4 (diff) | |
download | mpiosh-037e02905b802686be908d4f8cd989f0c5002b99.tar.gz mpiosh-037e02905b802686be908d4f8cd989f0c5002b99.tar.bz2 mpiosh-037e02905b802686be908d4f8cd989f0c5002b99.zip |
implemented the switch command
finished support for writing files directly from memory (for config files)
Diffstat (limited to 'libmpio/directory.c')
-rw-r--r-- | libmpio/directory.c | 75 |
1 files changed, 55 insertions, 20 deletions
diff --git a/libmpio/directory.c b/libmpio/directory.c index 4795b3d..c5bdc8e 100644 --- a/libmpio/directory.c +++ b/libmpio/directory.c @@ -1,6 +1,6 @@ /* * - * $Id: directory.c,v 1.9 2002/10/27 02:45:28 germeier Exp $ + * $Id: directory.c,v 1.10 2002/10/27 17:37:25 germeier Exp $ * * Library for USB MPIO-* * @@ -607,26 +607,10 @@ mpio_dentry_find_name_8_3(mpio_t *m, BYTE mem, BYTE *filename) WORD wdummy; BYTE fname[129]; BYTE fname_8_3[13]; - BYTE filename_8_3[13]; DWORD ddummy; BYTE *found = 0; int i, j, len; - /* format given filename to a "standard" 8.3 filename */ - memset(filename_8_3, 0x20, 13); - filename_8_3[12]=0; - len=strlen(filename); - i=j=0; - while ((i<13) && (j <len)) - { - if (filename[j] == '.') - i=8; - filename_8_3[i] = filename[j]; - - i++; - j++; - } - p = mpio_directory_open(m, mem); while ((p) && (!found)) { mpio_dentry_get_real (m, mem, p, @@ -634,9 +618,8 @@ mpio_dentry_find_name_8_3(mpio_t *m, BYTE mem, BYTE *filename) fname_8_3, &wdummy, &bdummy, &bdummy, &bdummy, &bdummy, &ddummy); - - if ((strcmp(fname_8_3, filename_8_3) == 0) && - (strcmp(filename_8_3,fname_8_3) == 0)) { + if ((strcmp(fname_8_3, filename) == 0) && + (strcmp(filename,fname_8_3) == 0)) { found = p; p = NULL; } @@ -719,3 +702,55 @@ mpio_dentry_delete(mpio_t *m, BYTE mem, BYTE *filename) return 0; } + +void +mpio_dentry_switch(mpio_t *m, mpio_mem_t mem, BYTE *file1, BYTE *file2) +{ + mpio_smartmedia_t *sm; + BYTE *p1, *p2; + BYTE *current; + int size1 , size2; + BYTE tmp[DIR_SIZE]; + + if (mem == MPIO_INTERNAL_MEM) sm = &m->internal; + if (mem == MPIO_EXTERNAL_MEM) sm = &m->external; + + if (file1 == file2) + return; + + if (file1<file2) + { + p1 = file1; + p2 = file2; + } else { + p1 = file2; + p2 = file1; + } + size1 = mpio_dentry_get_size(m, mem, p1); + size2 = mpio_dentry_get_size(m, mem, p2); + + current = tmp; + memset(tmp, 0xff, DIR_SIZE); + /* before the first file */ + if (p1 != sm->dir) + { + memcpy(current, sm->dir, p1 - sm->dir); + current += (p1 - sm->dir); + } + /* the second file*/ + memcpy(current, p2, size2); + current += size2; + /* between the files */ + memcpy(current, p1+size1, (p2-p1-size1)); + current += (p2-p1-size1); + /* the first file */ + memcpy(current, p1, size1); + current += size1; + /* and the rest */ + memcpy(current, p2+size2, (sm->dir+DIR_SIZE-p2-size2)); + + /* really update the directory */ + memcpy(sm->dir, tmp, DIR_SIZE); + + return; +} |