long REG_POLY_FUN_HDR(sml_getpwnam, long tuple, Region homeR, Region shellR, String nameML, long s, long exn) { long res; char *b; struct passwd pbuf, *pbuf2; char *name = &(nameML->data); mkTagRecordML(tuple,5); s = convertIntToC(s) + 1; b = (char *) malloc(s); if (!b) { res = errno; elemRecordML(tuple,4) = res; return tuple; } res = getpwnam_r(name, &pbuf, b, s-1, &pbuf2); elemRecordML(tuple,4) = res; if (res) { free(b); return tuple; } if (!pbuf2) { free(b); raise_exn(exn); } elemRecordML(tuple,0) = (long) pbuf2->pw_uid; elemRecordML(tuple,1) = (long) pbuf2->pw_gid; elemRecordML(tuple,2) = (long) REG_POLY_CALL(convertStringToML, homeR, pbuf2->pw_dir); elemRecordML(tuple,3) = (long) REG_POLY_CALL(convertStringToML, shellR, pbuf2->pw_shell); free(b); return tuple; }
uintptr_t sml_getrutime(uintptr_t vAddr) { struct rusage rusages; getrusage(RUSAGE_SELF, &rusages); elemRecordML(vAddr,2) = convertIntToML(rusages.ru_stime.tv_sec); elemRecordML(vAddr,3) = convertIntToML(rusages.ru_stime.tv_usec); elemRecordML(vAddr,4) = convertIntToML(rusages.ru_utime.tv_sec); elemRecordML(vAddr,5) = convertIntToML(rusages.ru_utime.tv_usec); mkTagRecordML(vAddr,6); elemRecordML(vAddr,0) = convertIntToML(0); /* zero gc */ elemRecordML(vAddr,1) = convertIntToML(0); return vAddr; }
uintptr_t sml_times(uintptr_t tuple) { struct tms buf; clock_t r; mkTagRecordML(tuple, 5); r = times(&buf); if (r == (clock_t) -1) raise_exn((uintptr_t)&exn_OVERFLOW); elemRecordML(tuple,0) = convertIntToML(r & (SIZE_MAX / 4)); elemRecordML(tuple,1) = convertIntToML(buf.tms_utime & (SIZE_MAX / 4)); elemRecordML(tuple,2) = convertIntToML(buf.tms_stime & (SIZE_MAX / 4)); elemRecordML(tuple,3) = convertIntToML(buf.tms_cutime & (SIZE_MAX / 4)); elemRecordML(tuple,4) = convertIntToML(buf.tms_cstime & (SIZE_MAX / 4)); return tuple; }
uintptr_t sml_gmtime (uintptr_t vAddr, uintptr_t r) { struct tm tmr; time_t clock = (long)(get_d(r)); gmtime_r(&clock,&tmr); mkTagRecordML(vAddr,9); elemRecordML(vAddr,0) = convertIntToML(tmr.tm_hour); elemRecordML(vAddr,1) = convertIntToML(tmr.tm_isdst); elemRecordML(vAddr,2) = convertIntToML(tmr.tm_mday); elemRecordML(vAddr,3) = convertIntToML(tmr.tm_min); elemRecordML(vAddr,4) = convertIntToML(tmr.tm_mon); elemRecordML(vAddr,5) = convertIntToML(tmr.tm_sec); elemRecordML(vAddr,6) = convertIntToML(tmr.tm_wday); elemRecordML(vAddr,7) = convertIntToML(tmr.tm_yday); elemRecordML(vAddr,8) = convertIntToML(tmr.tm_year); return vAddr; }