diff options
author | Adam Heath <doogie@debian.org> | 2001-04-21 22:22:42 +0000 |
---|---|---|
committer | Adam Heath <doogie@debian.org> | 2001-04-21 22:22:42 +0000 |
commit | 95e4aed8a7c445e933f64e05481ea613dc5697f5 (patch) | |
tree | 220d03c784e9896f3036716155c8f1730fcf954a /lib/mlib.c | |
parent | 0b0b0808060caaa30e2130e8030423197ac413fc (diff) | |
download | dpkg-95e4aed8a7c445e933f64e05481ea613dc5697f5.tar.gz |
* main/help.c, main/processarc.c, main/filesdb.c, main/configure.c,
main/archives.c, lib/parse.c: Fix int/pointer casting warnings.
* include/dpkg.h.in, lib/mlib.c: Rewrote buffer_copy_setup, to avoid
int/pointer casting warnings. These means there are several
variations of buffer_copy_setup. Also, converted the desc parameter
to const.
Diffstat (limited to 'lib/mlib.c')
-rw-r--r-- | lib/mlib.c | 91 |
1 files changed, 54 insertions, 37 deletions
diff --git a/lib/mlib.c b/lib/mlib.c index b7b8cca50..a0f10e5bd 100644 --- a/lib/mlib.c +++ b/lib/mlib.c @@ -133,15 +133,15 @@ int waitsubproc(pid_t pid, const char *description, int sigpipeok, int warn) { return checksubprocerr(status,description,sigpipeok, warn); } -ssize_t buffer_write(buffer_data_t data, void *buf, ssize_t length, char *desc) { +ssize_t buffer_write(buffer_data_t data, void *buf, ssize_t length, const char *desc) { ssize_t ret= length; if(data->type & BUFFER_WRITE_SETUP) { switch(data->type ^ BUFFER_WRITE_SETUP) { case BUFFER_WRITE_MD5: { - unsigned char *hash= data->data; + unsigned char *hash= data->data.ptr; void ** array= malloc(sizeof(void *) * 2); - data->data= array; + data->data.ptr= array; array[0]= hash; array[1]= malloc(sizeof(struct MD5Context)); MD5Init((struct MD5Context *)array[1]); @@ -156,8 +156,8 @@ ssize_t buffer_write(buffer_data_t data, void *buf, ssize_t length, char *desc) { int i; unsigned char digest[16], *p = digest; - unsigned char *hash= (unsigned char *)((void **)data->data)[0]; - MD5Final(digest, (struct MD5Context *)((void **)data->data)[1]); + unsigned char *hash= (unsigned char *)((void **)data->data.ptr)[0]; + MD5Final(digest, (struct MD5Context *)((void **)data->data.ptr)[1]); for (i = 0; i < 16; ++i) { sprintf(hash, "%02x", *p++); hash += 2; @@ -169,27 +169,27 @@ ssize_t buffer_write(buffer_data_t data, void *buf, ssize_t length, char *desc) } switch(data->type) { case BUFFER_WRITE_BUF: - memcpy(data->data, buf, length); - (char*)data->data += length; + memcpy(data->data.ptr, buf, length); + (char*)data->data.ptr += length; break; case BUFFER_WRITE_VBUF: - varbufaddbuf((struct varbuf *)data->data, buf, length); + varbufaddbuf((struct varbuf *)data->data.ptr, buf, length); break; case BUFFER_WRITE_FD: - if((ret= write((int)data->data, buf, length)) < 0 && errno != EINTR) - ohshite(_("failed in buffer_write(fd) (%i, ret=%i, %s)"), (int)data->data, ret, desc); + if((ret= write(data->data.i, buf, length)) < 0 && errno != EINTR) + ohshite(_("failed in buffer_write(fd) (%i, ret=%zi %s)"), data->data.i, ret, desc); break; case BUFFER_WRITE_NULL: break; case BUFFER_WRITE_STREAM: - ret= fwrite(buf, 1, length, (FILE *)data->data); - if(feof((FILE *)data->data)) + ret= fwrite(buf, 1, length, (FILE *)data->data.ptr); + if(feof((FILE *)data->data.ptr)) ohshite(_("eof in buffer_write(stream): %s"), desc); - if(ferror((FILE *)data->data)) + if(ferror((FILE *)data->data.ptr)) ohshite(_("error in buffer_write(stream): %s"), desc); break; case BUFFER_WRITE_MD5: - MD5Update((struct MD5Context *)((void **)data->data)[1], buf, length); + MD5Update((struct MD5Context *)((void **)data->data.ptr)[1], buf, length); break; default: fprintf(stderr, _("unknown data type `%i' in buffer_write\n"), data->type); @@ -197,7 +197,7 @@ ssize_t buffer_write(buffer_data_t data, void *buf, ssize_t length, char *desc) return ret; } -ssize_t buffer_read(buffer_data_t data, void *buf, ssize_t length, char *desc) { +ssize_t buffer_read(buffer_data_t data, void *buf, ssize_t length, const char *desc) { ssize_t ret= length; if(data->type & BUFFER_READ_SETUP) { return 0; @@ -207,14 +207,14 @@ ssize_t buffer_read(buffer_data_t data, void *buf, ssize_t length, char *desc) { } switch(data->type) { case BUFFER_READ_FD: - if((ret= read((int)data->data, buf, length)) < 0 && errno != EINTR) + if((ret= read(data->data.i, buf, length)) < 0 && errno != EINTR) ohshite(_("failed in buffer_read(fd): %s"), desc); break; case BUFFER_READ_STREAM: - ret= fread(buf, 1, length, (FILE *)data->data); - if(feof((FILE *)data->data)) + ret= fread(buf, 1, length, (FILE *)data->data.ptr); + if(feof((FILE *)data->data.ptr)) return ret; - if(ferror((FILE *)data->data)) + if(ferror((FILE *)data->data.ptr)) ohshite(_("error in buffer_read(stream): %s"), desc); break; default: @@ -223,42 +223,59 @@ ssize_t buffer_read(buffer_data_t data, void *buf, ssize_t length, char *desc) { return ret; } -ssize_t buffer_copy_setup(void *argIn, int typeIn, void *procIn, - void *argOut, int typeOut, void *procOut, - ssize_t limit, const char *desc, ...) +#define buffer_copy_setup_dual(name, type1, name1, type2, name2) \ +inline ssize_t buffer_copy_setup_##name(type1 n1, int typeIn, void *procIn,\ + type2 n2, int typeOut, void *procOut,\ + ssize_t limit, const char *desc, ...)\ +{\ + va_list al;\ + buffer_arg a1, a2;\ + struct varbuf v;\ + ssize_t ret;\ + a1.name1 = n1; a2.name2 = n2;\ + varbufinit(&v);\ + va_start(al,desc);\ + varbufvprintf(&v, desc, al);\ + va_end(al);\ + ret = buffer_copy_setup(a1, typeIn, procIn,\ + a2, typeOut, procOut,\ + limit, v.buf);\ + varbuffree(&v);\ + return ret;\ +} + +buffer_copy_setup_dual(IntInt, int, i, int, i); +buffer_copy_setup_dual(IntPtr, int, i, void *, ptr); +buffer_copy_setup_dual(PtrInt, void *, ptr, int, i); +buffer_copy_setup_dual(PtrPtr, void *, ptr, void *, ptr); + +ssize_t buffer_copy_setup(buffer_arg argIn, int typeIn, void *procIn, + buffer_arg argOut, int typeOut, void *procOut, + ssize_t limit, const char *desc) { struct buffer_data read_data = { procIn, argIn, typeIn }, write_data = { procOut, argOut, typeOut }; - va_list al; - struct varbuf v; ssize_t ret; - varbufinit(&v); - - va_start(al,desc); - varbufvprintf(&v, desc, al); - va_end(al); - if ( procIn == NULL ) read_data.proc = buffer_read; if ( procOut == NULL ) write_data.proc = buffer_write; read_data.type |= BUFFER_READ_SETUP; - read_data.proc(&read_data, NULL, 0, v.buf); + read_data.proc(&read_data, NULL, 0, desc); read_data.type = typeIn; write_data.type |= BUFFER_WRITE_SETUP; - write_data.proc(&write_data, NULL, 0, v.buf); + write_data.proc(&write_data, NULL, 0, desc); write_data.type = typeOut; - ret = buffer_copy(&read_data, &write_data, limit, v.buf); + ret = buffer_copy(&read_data, &write_data, limit, desc); write_data.type |= BUFFER_WRITE_SHUTDOWN; - write_data.proc(&write_data, NULL, 0, v.buf); + write_data.proc(&write_data, NULL, 0, desc); read_data.type |= BUFFER_READ_SHUTDOWN; - read_data.proc(&read_data, NULL, 0, v.buf); - varbuffree(&v); + read_data.proc(&read_data, NULL, 0, desc); return ret; } -ssize_t buffer_copy(buffer_data_t read_data, buffer_data_t write_data, ssize_t limit, char *desc) { +ssize_t buffer_copy(buffer_data_t read_data, buffer_data_t write_data, ssize_t limit, const char *desc) { char *buf, *writebuf; long bytesread= 0, byteswritten= 0; int bufsize= 32768; |