Ejemplo n.º 1
0
void file_setSize(FileHandle* h, size_t neededSize) {
    size_t fileSize = file_getSize(h);
    h->file = freopen(NULL, "ab", h->file);
    for (; fileSize<neededSize; fileSize++)
        fputc(0, h->file);
    h->file = freopen(NULL, h->flags, h->file);
}
Ejemplo n.º 2
0
bool readConfigFile() {
    FileHandle* file = file_open(INI_PATH, "r");
    char line[100];
    void (*configParser)(char*) = generalParseConfig;

    if (file == NULL)
        goto end;

    while (file_tell(file) < file_getSize(file)) {
        file_gets(line, 100, file);
        char c=0;
        while (*line != '\0' && ((c = line[strlen(line)-1]) == ' ' || c == '\n' || c == '\r'))
            line[strlen(line)-1] = '\0';
        if (line[0] == '[') {
            char* endBrace;
            if ((endBrace = strrchr(line, ']')) != 0) {
                *endBrace = '\0';
                const char* section = line+1;
                if (strcasecmp(section, "general") == 0) {
                    configParser = generalParseConfig;
                }
                else if (strcasecmp(section, "console") == 0) {
                    configParser = menuParseConfig;
                }
                else if (strcasecmp(section, "controls") == 0) {
                    configParser = controlsParseConfig;
                }
            }
        }
        else
            configParser(line);
    }
    file_close(file);
end:
    controlsCheckConfig();

    return file != NULL;
}
Ejemplo n.º 3
0
static void diskcache_retrieveThread(void *userdata) {
    struct diskcache_RetrieveThreadInfo *rti = userdata;

    // peek on file size:
    size_t size = file_getSize(rti->resourcepath);

    // open file for reading with proper file locking:
    FILE *f = diskcache_openLockedFile(rti->resourcepath, 0);
    if (!f) {
        // we couldn't open the file.
        rti->callback(NULL, 0, rti->userdata);
        free(rti->resourcepath);
        free(rti);
        return;
    }

    // see if file size has changed until we got that lock:
    size_t newsize = file_getSize(rti->resourcepath);
    if (newsize < size) {
        // we don't like shrinking files.
        // is it just being deleted?
        diskcache_closeLockedFile(f);
        rti->callback(NULL, 0, rti->userdata);
        free(rti->resourcepath);
        free(rti);
        return;
    }
    size = newsize;

    // allocate data buffer:
    char *data = malloc(size);
    if (!data) {
        // no point in continuing.
        diskcache_closeLockedFile(f);
        rti->callback(NULL, 0, rti->userdata);
        free(rti->resourcepath);
        free(rti);
        return;
    } 

    // read data:
    if (fread(data, 1, size, f) != size) {
        // failed to read all (any?) data.
        diskcache_closeLockedFile(f);
        rti->callback(NULL, 0, rti->userdata);
        free(rti->resourcepath);
        free(rti);
        free(data);
        return;
    }

    // close file:
    diskcache_closeLockedFile(f);

    // issue callback:
    rti->callback(data, size, rti->userdata);

    // free resources:
    free(rti->resourcepath);
    free(rti);
}
Ejemplo n.º 4
0
int main(int argc, char** argv)
{
	unsigned char* pucBuf = NULL;
	int nBufSize = 512;
	int nReadFileSize = 0;
	int nWriteCycleBufSize = 0;
	pthread_t tid = -1;
	int nSum = 0;

	CYCLEBUFFERCXT_S* psCycBufCxt = createCycleBuffer(CYCLEBUFFERLEN);
	if (NULL == psCycBufCxt)
	{
		printf("createCycleBuffer failed!\n");	
		return -1;
	}

	if (0 != initCycleBuffer(psCycBufCxt, 0, 0))
	{
		printf("initCycleBuffer failed!\n");	
		return -1;
	}

	nFd = file_open_rw(AUDIOFILEPATH);
	if (-1 == nFd)
	{
		printf("file_open_rw failed!\n");
		if (NULL != psCycBufCxt)
			destroyCycleBuffer(psCycBufCxt);
		return -1;
	}

	originFileSize = file_getSize(nFd);
	printf("%s size is %d\n", AUDIOFILEPATH, originFileSize);

	pucBuf = (unsigned char*)malloc(sizeof(unsigned char)*nBufSize);
	if (NULL == pucBuf)
	{
		printf("file_open_rw failed!\n");
		if (NULL != psCycBufCxt)
			destroyCycleBuffer(psCycBufCxt);

		file_close(nFd);
		return -1;
	}

	if (0 != pthread_create(&tid, NULL, doThread, (void*)psCycBufCxt))
	{
		printf("create pthread failed!\n");
		if (NULL != psCycBufCxt)
			destroyCycleBuffer(psCycBufCxt);

		file_close(nFd);
		return -1;
	}


	while(1)
	{
		nReadFileSize = file_read(nFd, pucBuf, nBufSize);

		nWriteCycleBufSize = writeCycleBuffer(psCycBufCxt, pucBuf, nReadFileSize);
		if (-1 == nWriteCycleBufSize)
		{
			printf("writeCycleBuffer failed!\n");	
		}
		printf("write cycle buffer nWriteCycleBufSize=%d\n", nWriteCycleBufSize);

		nSum += nReadFileSize;
		if (nSum == originFileSize)
			break;
		sleep(1);
	}
	printf("read file over!\n");


	pthread_join(tid, NULL);

	if (NULL != psCycBufCxt)
		destroyCycleBuffer(psCycBufCxt);

	file_close(nFd);

	return 0;
}