netmkaddr.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <ctype.h>
  4. /*
  5. * make an address, add the defaults
  6. */
  7. char *
  8. netmkaddr(char *linear, char *defnet, char *defsrv)
  9. {
  10. static char addr[256];
  11. char *cp;
  12. /*
  13. * dump network name
  14. */
  15. cp = strchr(linear, '!');
  16. if(cp == 0){
  17. if(defnet == 0)
  18. defnet = "net";
  19. /* allow unix sockets to omit unix! prefix */
  20. if(access(linear, 0) >= 0){
  21. snprint(addr, sizeof(addr), "unix!%s", linear);
  22. return addr;
  23. }
  24. /* allow host:service in deference to Unix convention */
  25. if((cp = strchr(linear, ':')) != nil){
  26. snprint(addr, sizeof(addr), "%s!%.*s!%s",
  27. defnet, utfnlen(linear, cp-linear),
  28. linear, cp+1);
  29. return addr;
  30. }
  31. if(defsrv)
  32. snprint(addr, sizeof(addr), "%s!%s!%s",
  33. defnet, linear, defsrv);
  34. else
  35. snprint(addr, sizeof(addr), "%s!%s", defnet, linear);
  36. return addr;
  37. }
  38. /*
  39. * if there is already a service, use it
  40. */
  41. cp = strchr(cp+1, '!');
  42. if(cp)
  43. return linear;
  44. /*
  45. * if the network is unix, no service
  46. */
  47. if(strncmp(linear, "unix!", 5) == 0)
  48. return linear;
  49. /*
  50. * add default service
  51. */
  52. if(defsrv == 0)
  53. return linear;
  54. snprint(addr, sizeof(addr), "%s!%s", linear, defsrv);
  55. return addr;
  56. }