Fixes to improve portability (especially to OS X, Solaris, OpenBSD).
[ircu2.10.12-pk.git] / ircd / umkpasswd.c
index 56d24dccdfc456b5473f8c69bc6b3fb8c7803a5c..bf2a075aa48832b5c121ea53714a68861ecb743f 100644 (file)
@@ -27,7 +27,6 @@
 #include <string.h>
 #include <time.h>
 #include <assert.h>
-#include <libgen.h>
 
 /* ircu headers */
 #include "ircd_alloc.h"
@@ -162,6 +161,34 @@ crypt_mechs_t* crypt_mech;
 return 0;
 }
 
+char *basename_into(char *tmp, char *target)
+{
+  unsigned int len, ii;
+
+  len = strlen(tmp);
+  for (ii = len; ii > 0; )
+    if (tmp[--ii] == '/')
+      break;
+  if (ii < len - 1)
+    return tmp + ii + (tmp[ii] == '/');
+  else if (tmp[ii] != '/')
+    return tmp;
+  else if (ii == 0)
+    return tmp;
+  else
+  {
+    while (ii > 0)
+      if (tmp[--ii] == '/')
+         break;
+    if (tmp[ii] == '/')
+        ii++;
+    for (len = 0; tmp[ii] != '/'; )
+      target[len++] = tmp[ii++];
+    target[len] = '\0';
+    return target;
+  }
+}
+
 void sum(char* tmp)
 {
 FILE* file;
@@ -177,7 +204,7 @@ unsigned char buffer[1024], digest[16];
  MD5Name(MD5Final)(digest, &context);
  fclose(file);
 
- printf("%s: ", basename(tmp));
+ printf("%s: ", basename_into(tmp, (char*)buffer));
  for (len = 0; len < 16; len++)
   printf ("%02x", digest[len]);
  printf("\n");