You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by bj...@hyperreal.org on 1999/05/07 07:49:47 UTC
cvs commit: apache-1.3/src/os/os2 os.c os.h util_os2.c
bjh 99/05/06 22:49:47
Modified: src/os/os2 os.c os.h util_os2.c
Log:
Provide system error messages instead of just OS/2 error codes for dynamic
linking errors. I don't particularly like using static char buffers like
this but ap_os_dso_error() doesn't take a pool.
Revision Changes Path
1.3 +1 -3 apache-1.3/src/os/os2/os.c
Index: os.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/os/os2/os.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- os.c 1999/05/04 11:21:15 1.2
+++ os.c 1999/05/07 05:49:46 1.3
@@ -54,7 +54,5 @@
const char *ap_os_dso_error(void)
{
- static char message[30];
- sprintf( message, "OS/2 error code %d", rc );
- return message;
+ return ap_os_error_message(rc);
}
1.15 +3 -0 apache-1.3/src/os/os2/os.h
Index: os.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/os/os2/os.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- os.h 1999/05/04 11:21:16 1.14
+++ os.h 1999/05/07 05:49:46 1.15
@@ -35,6 +35,9 @@
/* Use a specialized kill() function */
int ap_os_kill(int pid, int sig);
+/* Maps an OS error code to an error message */
+char *ap_os_error_message(int err);
+
/* OS/2 doesn't have symlinks so S_ISLNK is always false */
#define S_ISLNK(m) 0
1.4 +32 -0 apache-1.3/src/os/os2/util_os2.c
Index: util_os2.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/os/os2/util_os2.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- util_os2.c 1999/05/01 05:15:52 1.3
+++ util_os2.c 1999/05/07 05:49:46 1.4
@@ -63,3 +63,35 @@
return rc;
}
+
+
+
+char *ap_os_error_message(int err)
+{
+ static char result[200];
+ char message[HUGE_STRING_LEN];
+ ULONG len;
+ char *pos;
+ int c;
+
+ if (DosGetMessage(NULL, 0, message, HUGE_STRING_LEN, err, "OSO001.MSG", &len) == 0) {
+ len--;
+ message[len] = 0;
+ pos = result;
+
+ if (len >= sizeof(result))
+ len = sizeof(result-1);
+
+ for (c=0; c<len; c++) {
+ while (isspace(message[c]) && isspace(message[c+1])) /* skip multiple whitespace */
+ c++;
+ *(pos++) = isspace(message[c]) ? ' ' : message[c];
+ }
+
+ *pos = 0;
+ } else {
+ sprintf(result, "OS/2 error %d", err);
+ }
+
+ return result;
+}