ul_result execute(app_ctx * ctx) { ul_page buffer[UL_WRPAGS]; ul_result ret; unsigned int page = min(ctx->uldev.type->pages, ctx->startPage); unsigned int count = min(ctx->uldev.type->pages - page, ctx->pageCount); fprintf(stderr, "Writing %u pages starting at page 0x%02X (lenient: %s)\n", count, page, ctx->lenient ? "true" : "false"); while (count > 0) { if (!fread(buffer, sizeof(buffer), 1, stdin)) { fprintf(stderr, "* End of input stream *\n"); return UL_ERROR; } ret = ul_write(&ctx->uldev, page, buffer); if (ret) { fprintf(stderr, "* Error writing page 0x%02X (%d) *\n", page, ret); if (ctx->lenient == false || ret == UL_WRONGPASS) { return ret; } } page += UL_WRPAGS; count -= UL_WRPAGS; } return UL_OK; }
int ul_appfile(const char *path, const char *fsrc, const char *fdest) { int pf_src, pf_dest; char filename[PATH_SIZE]; char buf[TBUF_SIZE]; ssize_t real_read; if (ul_fullpath(path, fsrc, filename, sizeof(filename)) < 0) { return -1; } if (!ul_fexist(path, fsrc)) { ul_writelog(UL_LOG_FATAL, "[appfile] file : %s do not exist.\n", fsrc); return -1; } pf_src = ul_open(filename, O_RDONLY,0776); if (pf_src < 0) { ul_writelog(UL_LOG_FATAL,"[appfile] open %s error", fsrc); return -1; } if (ul_fullpath(path, fdest, filename, sizeof(filename)) < 0) { return -1; } pf_dest= ul_open(filename, O_WRONLY|O_APPEND|O_CREAT, 0666); if (pf_dest < 0) { ul_close(pf_src); ul_writelog(UL_LOG_FATAL, "[appfile] open %s error", fdest); return -1; } while((real_read=ul_read(pf_src, buf, TBUF_SIZE)) == TBUF_SIZE) { ul_write(pf_dest, buf, TBUF_SIZE); } ul_write(pf_dest, buf, (size_t)real_read); ul_close(pf_src); ul_close(pf_dest); return 1; }
ssize_t ul_writefile(const char *path, const char *fname, void *buf, int size) { int fno; ssize_t rsize; char fullname[PATH_SIZE]; if (ul_fullpath(path, fname, fullname, sizeof(fullname)) < 0) { return -1; } fno = ul_open(fullname, O_WRONLY|O_CREAT|O_TRUNC, 0666); fchmod (fno, 0666); if (fno < 0) { ul_writelog(UL_LOG_FATAL, "[writefile] open (%s) error", fullname); return -1; } rsize = ul_write(fno, buf, size); if (rsize < 0){ ul_writelog(UL_LOG_FATAL, "[writefile] write(%s) error", fullname); } ul_close(fno); return rsize; }