some improvements to bmp_write_file function (still untested!)
[my-code/api.git] / bmp / bmp.c
index 2476140..4d8c7ac 100644 (file)
--- a/bmp/bmp.c
+++ b/bmp/bmp.c
@@ -59,6 +59,11 @@ int bmp_write_file(t_bmp *bmp) {
  
   int fill,xsize,size;
 
+  if(!(bmp->mode&WRITE)) {
+    dprintf(bmp->outfd,"[bmp] write mode not specified\n");
+    return B_WRONG_MODE;
+  }
+
   xsize=bmp->width*3;
   fill=(4-(xsize%4))%4;
   size=(xsize+fill)*bmp->height;
@@ -79,7 +84,20 @@ int bmp_write_file(t_bmp *bmp) {
   bmp->info.ic=0;
 
   /* write it */
-  ...
+  if((bmp->fd=open(bmp->file,O_WRONLY)<0) {
+    dprintf(bmp->outfd,"[bmp] unable to open file %s\n",bmp->file);
+    return B_NO_FILE;
+  }
+
+  if(write(bmp->fd,&(bmp->hdr),BMP_H_SIZE)<BMP_H_SIZE) {
+    dprintf(bmp->outfd,"[bmp] unable to write bmp header\n");
+    return B_E_WRITE_DATA;
+  }
+
+  if(write(bmp->fd,&(bmp->info),BMP_I_SIZE)<BMP_I_SIZE) {
+    dprintf(bmp->outfd,"[bmp] unable to write bmp info\n");
+    return B_E_WRITE_DATA;
+  }
 
 
   return B_SUCCESS;
@@ -94,7 +112,7 @@ int bmp_read_file(t_bmp *bmp) {
 
   if(!(bmp->mode&READ)) {
     dprintf(bmp->outfd,"[bmp] read mode not specified");
-    return B_NO_READ_MODE;
+    return B_WRONG_MODE;
   }
 
   if((bmp->fd=open(bmp->file,O_RDONLY))<0) {