/* Load the editor program into Lua. Returns 0 on success, 1 on error. */ int loadProgram(void) { int buflen; char *buf = editorRowsToString(&buflen); if (luaL_loadbuffer(l81.L,buf,buflen,l81.filename)) { programError(lua_tostring(l81.L, -1)); free(buf); return 1; } free(buf); if (lua_pcall(l81.L,0,0,0)) { programError(lua_tostring(l81.L, -1)); return 1; } l81.luaerr = 0; editorClearError(); return 0; }
/* Save the current file on disk. Return 0 on success, 1 on error. */ int editorSave(void) { int len; char *buf = editorRowsToString(&len); int fd = open(E.filename,O_WRONLY|O_TRUNC,0644); if (fd == -1) goto writeerr; if (write(fd,buf,len) != len) goto writeerr; close(fd); free(buf); E.dirty = 0; editorSetStatusMessage("%d bytes written on disk", len); return 0; writeerr: free(buf); if (fd != -1) close(fd); editorSetStatusMessage("Can't save! I/O error: %s",strerror(errno)); return 1; }
/* Save the current file on disk. Return 0 on success, 1 on error. */ int editorSave(void) { int len; char *buf = editorRowsToString(&len); int fd = open(E.filename,O_RDWR|O_CREAT,0644); if (fd == -1) goto writeerr; /* Use truncate + a single write(2) call in order to make saving * a bit safer, under the limits of what we can do in a small editor. */ if (ftruncate(fd,len) == -1) goto writeerr; if (write(fd,buf,len) != len) goto writeerr; close(fd); free(buf); E.dirty = 0; editorSetStatusMessage("%d bytes written on disk", len); return 0; writeerr: free(buf); if (fd != -1) close(fd); editorSetStatusMessage("Can't save! I/O error: %s",strerror(errno)); return 1; }