Esempio n. 1
0
/* Just unit test */
int main(void){

	int exit_code;
	char* key;

	if((exit_code=params_init())){
		return exit_code;
	}

	/*
	 * use here...
	 */
	key = "prop1";
	printf("value for key %s: %s", key, params_get(key));

	return 0;
}
Esempio n. 2
0
/**
 * Duplicate URI
 *
 * @v uri		URI
 * @ret uri		Duplicate URI
 *
 * Creates a modifiable copy of a URI.
 */
struct uri * uri_dup ( const struct uri *uri ) {
	struct uri *dup;
	size_t len;

	/* Allocate new URI */
	len = uri_copy_fields ( uri, NULL );
	dup = zalloc ( len );
	if ( ! dup )
		return NULL;
	ref_init ( &dup->refcnt, uri_free );

	/* Copy fields */
	uri_copy_fields ( uri, dup );

	/* Copy parameters */
	dup->params = params_get ( uri->params );

	DBGC ( uri, "URI duplicated" );
	uri_dump ( uri );
	DBGC ( uri, "\n" );

	return dup;
}
Esempio n. 3
0
void
main_initialize()
{
    params_t params;
    
    // if we're in device mode...
    if (! usb_host_mode) {
        // register device mode callbacks
        terminal_register(main_command_cbfn, main_ctrlc_cbfn);
    #if MCF52221
        ftdi_register(main_reset_cbfn);
    #endif
    }
    
    // set default params
    params_get(&params);
    if (params.generation == -1) {
        memset(&params, 0, sizeof(params));
        params_default_aeskey(&params);
        params_default_files(&params);
        params_set(&params);
    }
}
Esempio n. 4
0
bool
walkfs(int pass)
{
    int a;
    int e;
    int ms;
    uint32 i;
    uint32 j;
    uint32 rv;
    uint32 pstart;
    uint32 rfilesize;
    VOLINFO vi;
    DIRINFO di;
    DIRENT de;
    bool skip;
    bool first;
    int wfilesize;
    uint32 namei[DEPTH];
    uint32 skips[DEPTH];
    static char dirname[MAX_PATH];
    static char rfilename[MAX_PATH];
    static char wfilename[MAX_PATH];
    static char tfilename[MAX_PATH];
    static byte scratch[SECTOR_SIZE];
    
    ms = ticks;
    
    printf("walkfs\n");

#if ! _WIN32
    while (adc_result[0] < 20000) {
        DFS_HostFlush(0);
        led_sad(code_battery);
        delay(1000);
    }
    led_unknown();
#endif
    
    params_get(&params);
    assert(params.roflip == true || params.roflip == false);

    memset(scratch, -1, sizeof(scratch));  // remove
    pstart = DFS_GetPtnStart(0, scratch, 0, NULL, NULL, NULL);
    if (pstart == DFS_ERRMISC) {
        return 0;
    }

    memset(scratch, -1, sizeof(scratch));  // remove
    if (DFS_GetVolInfo(0, scratch, pstart, &vi)) {
        return 0;
    }
    
    if (! vi.secperclus || (vi.secperclus & (vi.secperclus-1))) {
        printf("invalid fs cluster size %d\n", vi.secperclus);
        return 0;
    }
    
    printf("fs cluster size %d\n", vi.secperclus);

    i = 0;
    namei[i] = 0;
    skips[i] = 0;
    strcpy(dirname, "");
    
    first = 1;
    for (;;) {
XXX_LOOP_XXX:        
        if (panic) {
            return 0;
        }
        
        // open a new directory
        memset(scratch, -1, sizeof(scratch));  // remove
        di.scratch = scratch;
        if (DFS_OpenDir(&vi, (unsigned char *)dirname, &di)) {
            return 0;
        }

        memset(&de, 0, sizeof(de));

        skip = 0;
        for (j = 0; j < skips[i]; j++) {
            if (DFS_GetNext(&vi, &di, &de)) {
                skip = 1;
            }
        }

        // enumerate the directory
        if (! skip && ! DFS_GetNext(&vi, &di, &de)) {
            skips[i]++;
         
            if (! de.name[0] || de.name[0] == '.') {
                continue;
            }

#if ! _WIN32
            while (adc_result[0] < 20000) {
                DFS_HostFlush(0);
                led_sad(code_battery);
                delay(1000);
            }
            led_unknown();

            while ((MCF_GPIO_SETNQ & 0x10) == 0) {
                // we're paused
                DFS_HostFlush(0);
            }
#endif
            
            if (de.attr & ATTR_DIRECTORY) {
                if (i+1 < DEPTH) {
                    namei[i] = strlen(dirname);
                    if (namei[i]) {
                        strcat(dirname, "/");
                    }
                    strncat(dirname, (char *)de.name, 8);
                    tailtrim(dirname);
                    if (strncmp((char *)de.name+8, "   ", 3)) {
                        strcat(dirname, ".");
                        strncat(dirname, (char *)de.name+8, 3);
                        tailtrim(dirname);
                    }
                    i++;
                    skips[i] = 0;
                    printf("dir: '%s'\n", dirname);
                    goto XXX_LOOP_XXX;
                }
            } else if (! (de.attr & (ATTR_HIDDEN|ATTR_SYSTEM|ATTR_VOLUME_ID)) && !!(de.attr & ATTR_READ_ONLY) == params.roflip) {
                // force upper case
                for (a = 0; a < sizeof(de.name); a++) {
                    if (de.name[a] >= 'a' && de.name[a] <= 'z') {
                        de.name[a] = de.name[a] - 'a' + 'A';
                    }
                }
                
                if (pass == 0) {
                    // pass 0: check for extension match for tmp file
                    if (! strncmp("TMP", (char *)de.name+8, 3)) {
                        strcpy(rfilename, dirname);
                        if (strlen(rfilename)) {
                            strcat(rfilename, "/");
                        }
                        strncat(rfilename, (char *)de.name, 8);
                        tailtrim(rfilename);
                        if (strncmp((char *)de.name+8, "   ", 3)) {
                            strcat(rfilename, ".");
                            strncat(rfilename, (char *)de.name+8, 3);
                            tailtrim(rfilename);
                        }

                        // rfilename needs to be purged!
                        
                        rfilesize = (de.filesize_3<<24)|(de.filesize_2<<16)|(de.filesize_1<<8)|de.filesize_0;
                        printf("temp: '%s (%d bytes)'\n", rfilename, rfilesize);

                        // we have to rewrite rfilename
                        rv = encrypt_file(&vi, scratch, NULL, 0, rfilename, rfilesize);
                        if (! rv) {
                            printf("rewrite failed\n");
                            return 0;
                        }
                        
                        // and unlink it
                        rv = DFS_UnlinkFile(&vi, (unsigned char *)rfilename, scratch);
                        if (rv) {
                            printf("unlink failed\n");
                            return 0;
                        }

                        DFS_HostFlush(0);
                    }
                } else {
                    assert(pass == 1);
                    
                    // pass 1: check for extension match for image file
                    for (e = 0; e < NEXTS; e++) {
                        if (params.extensions[e][0] != 0 && params.extensions[e][0] != (char)-1) {
                            if (! strncmp(params.extensions[e], (char *)de.name+8, 3)) {
                                break;
                            }
                        }
                    }
                    
                    if (e != NEXTS) {
                        strcpy(rfilename, dirname);
                        if (strlen(rfilename)) {
                            strcat(rfilename, "/");
                        }
                        strncat(rfilename, (char *)de.name, 8);
                        tailtrim(rfilename);
                        if (strncmp((char *)de.name+8, "   ", 3)) {
                            strcat(rfilename, ".");
                            strncat(rfilename, (char *)de.name+8, 3);
                            tailtrim(rfilename);
                        }
                        
                        // rfilename needs to be encrypted!
                        
                        rfilesize = (de.filesize_3<<24)|(de.filesize_2<<16)|(de.filesize_1<<8)|de.filesize_0;
                        printf("encrypt: '%s (%d bytes)'\n", rfilename, rfilesize);
                        
                        if (first) {
                            // for the first rfilename we create a new (unallocated) .REC file directly
                            output_file(rfilename, ".REC", wfilename);
                            wfilesize = 0;
                        }
                        
                        // we'll encrypt to wfilename
                        
                        rv = encrypt_file(&vi, scratch, rfilename, rfilesize, wfilename, wfilesize);
                        if (! rv) {
                            printf("encryption failed\n");
                            return 0;
                        }
                        
                        // and then we rename wfilename to rfilename with .REC
                        if (! first) {
                            // and then rename the old file
                            output_file(rfilename, ".REC", tfilename);
                            rv = DFS_RenameFile(&vi, (unsigned char *)wfilename, (unsigned char *)tfilename, scratch);
                            if (rv) {
                                printf("rename failed\n");
                                return 0;
                            }
                        }
                        
                        // and rename rfilename to rfilename with .TMP
                        output_file(rfilename, ".TMP", wfilename);
                        wfilesize = rfilesize;
                        rv = DFS_RenameFile(&vi, (unsigned char *)rfilename, (unsigned char *)wfilename, scratch);
                        if (rv) {
                            printf("rename failed\n");
                            return 0;
                        }
                        
                        // we reuse an old (allocated) file
                        first = 0;
                    }
                }
            }
        } else {
            skip = 1;
        }

        if (! skip) {
            // we have more files in this directory
            goto XXX_LOOP_XXX;
        }

        // we're leaving this directory        
        if (pass == 1 && ! first) {
            // lastly we have to rewrite wfilename
            rv = encrypt_file(&vi, scratch, NULL, 0, wfilename, wfilesize);
            if (! rv) {
                printf("rewrite failed\n");
                return 0;
            }
            
            // and unlink it
            rv = DFS_UnlinkFile(&vi, (unsigned char *)wfilename, scratch);
            if (rv) {
                printf("unlink failed\n");
                return 0;
            }

            DFS_HostFlush(0);
            
            first = 1;
        }

        // if this is the root dirtectory...        
        if (! i) {
            // we're done
            break;
        }

        // continue a previous directory
        i--;
        dirname[namei[i]] = '\0';
    }
    
    DFS_HostFlush(0);
    total_ticks += ticks-ms;
    
    return 1;
}